documents:101029imagej_cui_lifconversion
Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| documents:101029imagej_cui_lifconversion [2010/10/29 15:38] – kota | documents:101029imagej_cui_lifconversion [2020/11/26 09:11] (current) – external edit 127.0.0.1 | ||
|---|---|---|---|
| Line 67: | Line 67: | ||
| </ | </ | ||
| + | ===== ImpProps.java ===== | ||
| + | |||
| + | Accessing Image Physical Properties. Compiled class should be copied to the imageJ plugin folder. [[http:// | ||
| + | |||
| + | <sxh java> | ||
| + | import ij.*; | ||
| + | import ij.measure.Calibration; | ||
| + | //import java.lang.Double; | ||
| + | /** | ||
| + | * This simple class can be called from an ImageJ macro via the " | ||
| + | * get and set the (string) properties of the active image (ImagePlus). | ||
| + | * | ||
| + | * call(" | ||
| + | * set property <key> to < | ||
| + | | ||
| + | * | ||
| + | * call(" | ||
| + | | ||
| + | * | ||
| + | * @see ij.ImagePlus# | ||
| + | * @see ij.ImagePlus# | ||
| + | * | ||
| + | * @author Joachim Wesner | ||
| + | * @author Leica Microsystems CMS GmbH | ||
| + | * @author joachim.wesner@leica-microsystems.com | ||
| + | * @version 2008-3-15 | ||
| + | | ||
| + | * @author Kota Miura | ||
| + | * cmci, embl | ||
| + | * added methods for setting image dimension sizes and pixel scales. | ||
| + | * this was done for setting these values in headless mode. | ||
| + | * @version 2010-10-28 | ||
| + | * This class can be compiled with ImageJ' | ||
| + | */ | ||
| + | |||
| + | public class ImpProps { | ||
| + | |||
| + | //kota | ||
| + | public static String getProperties() { | ||
| + | ImagePlus imp = WindowManager.getCurrentImage(); | ||
| + | if (imp == null) | ||
| + | return ""; | ||
| + | Object prop = imp.getProperties(); | ||
| + | if (prop != null && prop instanceof String) | ||
| + | return (String)prop; | ||
| + | else | ||
| + | return ""; | ||
| + | } | ||
| + | |||
| + | public static String setProperty(String arg1, String arg2) { | ||
| + | ImagePlus imp = WindowManager.getCurrentImage(); | ||
| + | if (imp == null) | ||
| + | return ""; | ||
| + | imp.setProperty(arg1, | ||
| + | imp.updateAndDraw(); | ||
| + | return arg2; | ||
| + | } | ||
| + | |||
| + | public static String getProperty(String arg1) { | ||
| + | ImagePlus imp = WindowManager.getCurrentImage(); | ||
| + | if (imp == null) | ||
| + | return ""; | ||
| + | Object prop = imp.getProperty(arg1); | ||
| + | if (prop != null && prop instanceof String) | ||
| + | return (String)prop; | ||
| + | else | ||
| + | return ""; | ||
| + | } | ||
| + | |||
| + | //kota | ||
| + | public static int setCalibration(String unit, String spixelWidth, | ||
| + | double pixelWidth = java.lang.Double.parseDouble(spixelWidth); | ||
| + | double pixelHeight = java.lang.Double.parseDouble(spixelHeight); | ||
| + | double pixelDepth = java.lang.Double.parseDouble(spixelDepth); | ||
| + | ImagePlus imp = WindowManager.getCurrentImage(); | ||
| + | if (imp == null) | ||
| + | return -1; | ||
| + | Calibration cal = imp.getCalibration(); | ||
| + | cal.setUnit(unit); | ||
| + | cal.pixelWidth = pixelWidth; | ||
| + | cal.pixelHeight = pixelHeight; | ||
| + | cal.pixelDepth = pixelDepth; | ||
| + | imp.setCalibration(cal); | ||
| + | WindowManager.repaintImageWindows(); | ||
| + | return 1; | ||
| + | } | ||
| + | |||
| + | //kota | ||
| + | public static int setCalibration( | ||
| + | String schannels, String sslices, | ||
| + | String sframes, String unit, | ||
| + | String spixelWidth, | ||
| + | String spixelDepth) { | ||
| + | int channels = java.lang.Integer.parseInt(schannels); | ||
| + | int slices | ||
| + | int frames | ||
| + | double pixelWidth | ||
| + | double pixelHeight = java.lang.Double.parseDouble(spixelHeight); | ||
| + | double pixelDepth | ||
| + | |||
| + | ImagePlus imp = WindowManager.getCurrentImage(); | ||
| + | if (imp == null) | ||
| + | return -1; | ||
| + | int stackSize = imp.getImageStackSize(); | ||
| + | if (channels*slices*frames==stackSize) | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | Calibration cal = imp.getCalibration(); | ||
| + | cal.setUnit(unit); | ||
| + | // | ||
| + | cal.pixelWidth = pixelWidth; | ||
| + | cal.pixelHeight = pixelHeight; | ||
| + | cal.pixelDepth = pixelDepth; | ||
| + | imp.setCalibration(cal); | ||
| + | WindowManager.repaintImageWindows(); | ||
| + | return 1; | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| ===== bfconvert help ===== | ===== bfconvert help ===== | ||
| - | <quote> | + | <blockquote> |
| To convert a file between formats, run: | To convert a file between formats, run: | ||
| bfconvert [-debug] [-stitch] [-separate] [-merge] [-expand] | bfconvert [-debug] [-stitch] [-separate] [-merge] [-expand] | ||
| Line 113: | Line 234: | ||
| Each file would have a single image plane. | Each file would have a single image plane. | ||
| - | </quote> | + | </blockquote> |
| + | |||
| + | ===== LifOpenerCUI.ijm ===== | ||
| + | |||
| + | ImageJ macro for converting LIF stack series to multiple tiff stacks, together with setting physical parameters. | ||
| + | < | ||
| + | // converts LIF file to channel-separated tif stacks. | ||
| + | // output files will be saved under the folder <LIF file name> | ||
| + | |||
| + | //bach command example | ||
| + | /* | ||
| + | / | ||
| + | */ | ||
| + | // TODO: scale should be set as the propertiy of tiff file. | ||
| + | // reading out of the scale from LIF is somehow not working, unlike it was done in 2009 | ||
| + | // metadata of .lif file would be saved as < | ||
| + | //will be saved in the same directory. | ||
| + | // TODO: program might return error if sequence is terminated abruptly. | ||
| + | |||
| + | // for setting scale, plugin " ImpProp.class" | ||
| + | |||
| + | srcfile = getArgument(); | ||
| + | // srcfile = File.openDialog(" | ||
| + | requires(" | ||
| + | run(" | ||
| + | |||
| + | path = srcfile; | ||
| + | name = File.getName(path); | ||
| + | dir = File.getParent(path); | ||
| + | DAPIch = 0;// | ||
| + | FISHch = 1;// | ||
| + | metaname = name + " | ||
| + | |||
| + | q = File.separator; | ||
| + | metafullpath = dir+q+metaname; | ||
| + | metastr = File.openAsString(metafullpath); | ||
| + | workdir = File.getParent(srcfile); | ||
| + | |||
| + | //create " | ||
| + | pathtifstack = workdir + q + name+ " | ||
| + | if (File.isDirectory(pathtifstack)==0) File.makeDirectory(pathtifstack); | ||
| + | |||
| + | Ext.setId(path); | ||
| + | Ext.getSeriesCount(seriesCount); | ||
| + | Ext.getCurrentFile(file); | ||
| + | Ext.close(); | ||
| + | print(" | ||
| + | print(" | ||
| + | |||
| + | for (s=0; s< | ||
| + | |||
| + | seriesNum = s; | ||
| + | // | ||
| + | // | ||
| + | // | ||
| + | // | ||
| + | |||
| + | if (s>0) refresh =0; | ||
| + | |||
| + | seriesName = OpenLIFSeriesOneChannel(path, | ||
| + | G_GID = getImageID(); | ||
| + | savepath = pathtifstack + q+getTitle(); | ||
| + | print(savepath); | ||
| + | saveAs(" | ||
| + | close(); | ||
| + | |||
| + | OpenLIFSeriesOneChannel(path, | ||
| + | G_RID = getImageID(); | ||
| + | savepath = pathtifstack | ||
| + | print(savepath); | ||
| + | saveAs(" | ||
| + | close(); | ||
| + | } | ||
| + | |||
| + | |||
| + | // | ||
| + | /* 090907 | ||
| + | 090908 | ||
| + | - save tif file in a specified directory | ||
| + | - problem with DAPI appearance in the resulting window. | ||
| + | */ | ||
| + | function OpenLIFSeriesOneChannel(id, | ||
| + | run(" | ||
| + | |||
| + | //if (datasetOpened ==0) Ext.setId(id); | ||
| + | Ext.setId(id); | ||
| + | Ext.setSeries(seriesNum); | ||
| + | Ext.getSeriesName(seriesName); | ||
| + | Ext.getSizeZ(sizeZ); | ||
| + | Ext.getSizeC(sizeC); | ||
| + | Ext.getSizeT(sizeT); | ||
| + | Ext.getImageCount(imageCount); | ||
| + | print(" | ||
| + | calculatedCount = sizeZ*sizeC*sizeT; | ||
| + | print(" | ||
| + | if (imageCount != calculatedCount) { | ||
| + | print(); | ||
| + | exit(); | ||
| + | } | ||
| + | sizeT = imageCount/ | ||
| + | print(" | ||
| + | newname = name+" | ||
| + | setBatchMode(true); | ||
| + | for (j=0; j<sizeT; j++){ | ||
| + | for (i=0; i<sizeZ; i++){ | ||
| + | currentZch0 = i*sizeC; | ||
| + | currentPlane = j*sizeZ*sizeC + i*sizeC; | ||
| + | Ext.openImage(" | ||
| + | if ((i==0) && (j==0)) | ||
| + | stackID=getImageID(); | ||
| + | else { | ||
| + | run(" | ||
| + | close; | ||
| + | selectImage(stackID); | ||
| + | run(" | ||
| + | run(" | ||
| + | } | ||
| + | // | ||
| + | } | ||
| + | } | ||
| + | rename(newname); | ||
| + | xscale = returnXscale(metastr); | ||
| + | yscale = returnYscale(metastr); | ||
| + | zscale = returnZscale(metastr); | ||
| + | tscale = 1;// | ||
| + | xscalemicron = parseFloat(xscale) * pow(10, 6); | ||
| + | yscalemicron = parseFloat(yscale) * pow(10, 6); | ||
| + | zscalemicron = parseFloat(zscale) * pow(10, 6); | ||
| + | op = " | ||
| + | //since run(" | ||
| + | // | ||
| + | // ImpProp.class | ||
| + | SsizeC = "" | ||
| + | SsizeZ = "" | ||
| + | SsizeT = "" | ||
| + | Sxscalemicron = "" | ||
| + | Syscalemicron = "" | ||
| + | Szscalemicron = "" | ||
| + | call(" | ||
| + | SsizeC, SsizeZ, SsizeT, " | ||
| + | Sxscalemicron, | ||
| + | |||
| + | setBatchMode(false); | ||
| + | //if (datasetOpened ==0) Ext.close(); | ||
| + | Ext.close(); | ||
| + | return seriesName; | ||
| + | } | ||
| + | |||
| + | //zscale in micron | ||
| + | function returnZscale(metastr){ | ||
| + | metaA = split(metastr, | ||
| + | zscale = 1; | ||
| + | for (i=0; i< | ||
| + | if (startsWith(metaA[i], | ||
| + | lineA = split(metaA[i], | ||
| + | //for (j=0; j< | ||
| + | if (lineA.length> | ||
| + | zscale = parseFloat(lineA[2]); | ||
| + | print(zscale); | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | return zscale; | ||
| + | } | ||
| + | |||
| + | //Xscale in micron | ||
| + | function returnXscale(metastr){ | ||
| + | metaA = split(metastr, | ||
| + | xscale = 1; | ||
| + | for (i=0; i< | ||
| + | if (startsWith(metaA[i], | ||
| + | lineA = split(metaA[i], | ||
| + | //for (j=0; j< | ||
| + | if (lineA.length> | ||
| + | xscale = parseFloat(lineA[2]); | ||
| + | print(xscale); | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | return xscale; | ||
| + | } | ||
| + | |||
| + | function returnYscale(metastr){ | ||
| + | metaA = split(metastr, | ||
| + | yscale = 1; | ||
| + | for (i=0; i< | ||
| + | if (startsWith(metaA[i], | ||
| + | lineA = split(metaA[i], | ||
| + | //for (j=0; j< | ||
| + | if (lineA.length> | ||
| + | yscale = parseFloat(lineA[2]); | ||
| + | print(yscale); | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | return yscale; | ||
| + | } | ||
| + | |||
| + | function returnTscale(){ | ||
| + | metaA = split(metastr, | ||
| + | for (i=0; i< | ||
| + | if (startsWith(metaA[i], | ||
| + | lineA = split(metaA[i], | ||
| + | //for (j=0; j< | ||
| + | if (lineA.length> | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| + | |||
documents/101029imagej_cui_lifconversion.1288366694.txt.gz · Last modified: 2016/05/24 12:46 (external edit)
