documents:120206pyip_cooking:python_imagej_cookbook
                Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| documents:120206pyip_cooking:python_imagej_cookbook [2025/09/30 08:58] – [Mask to multi-points selection, then to segmented line ROI] kota | documents:120206pyip_cooking:python_imagej_cookbook [2025/10/05 22:53] (current) – [Converting Java array types] kota | ||
|---|---|---|---|
| Line 719: | Line 719: | ||
| ==== ImagePlus Array ==== | ==== ImagePlus Array ==== | ||
| - | Some arguments ask for an array of specific type. Since Python array is not java array, {{http://onlamp.com/pub/ | + | Some arguments ask for an array of a specific type. Since Python array is not Java array, {{https://www.tutorialspoint.com/jython/jython_using_java_collection_types.htm|one should generate a Java array}}. For this, you could use the jarray package. | 
| <code python linenums: | <code python linenums: | ||
| import jarray | import jarray | ||
| Line 748: | Line 748: | ||
| </ | </ | ||
| + | ==== Java native 2D Array from Python2D ==== | ||
| + | To initialize a Java native 2D array (e.g. float[][]), create a Python 2D array first, then convert it to a Java 2D array using jarray. See the example code below. | ||
| + | |||
| + | <code python> | ||
| + | import jarray | ||
| + | import java.lang.Class | ||
| + | |||
| + | #prepare 3x2 matrix | ||
| + | py2Dlist = [[float(0)]*2]*3 | ||
| + | |||
| + | print(py2Dlist) | ||
| + | # [[0.0, 0.0], [0.0, 0.0], [0.0, 0.0]] | ||
| + | print(type(py2Dlist)) | ||
| + | # <type ' | ||
| + | |||
| + | java2Dlist = jarray.array(py2Dlist, | ||
| + | |||
| + | print (java2Dlist) | ||
| + | # array([F, [array(' | ||
| + | |||
| + | print(type(java2Dlist)) | ||
| + | # <type ' | ||
| + | |||
| + | print(java2Dlist[1][1]) | ||
| + | #0.0 | ||
| + | |||
| + | </ | ||
| + | |||
| + | " | ||
| + | |||
| + | ==== Creating floating point processor image ==== | ||
| + | |||
| + | Java float 2D array can also be made using jarray.zeros (like numpy.zeros). | ||
| + | Here is an example of creating a floating-point image from 2D array. | ||
| + | |||
| + | <code python linenums: | ||
| + | from jarray import zeros | ||
| + | from ij import ImagePlus | ||
| + | from ij.process import FloatProcessor | ||
| + | |||
| + | #generate 200 x 100 floating point matrix | ||
| + | matrix2D = [zeros(100, ' | ||
| + | |||
| + | # check the generated matrix | ||
| + | print(matrix2D) | ||
| + | # | ||
| + | rows = len(matrix2D) | ||
| + | cols = len(matrix2D[0]) | ||
| + | print(" | ||
| + | #rows 200 cols 100 | ||
| + | |||
| + | # instantiate FP image | ||
| + | fp = FloatProcessor(matrix2D) | ||
| + | |||
| + | #check created FP image | ||
| + | print(" | ||
| + | ImagePlus(' | ||
| + | </ | ||
| + | |||
| + | In short, as simple as: | ||
| + | <code python linenums: | ||
| + | from jarray import zeros | ||
| + | from ij import ImagePlus | ||
| + | from ij.process import FloatProcessor | ||
| + | |||
| + | matrix2D = [zeros(100, ' | ||
| + | ImagePlus(' | ||
| + | </ | ||
| + | |||
| + | |||
| + | |||
| ==== Converting Java array types ==== | ==== Converting Java array types ==== | ||
| - | Sometimes we need to convert the type of Java array e.g. double[] to int[]. | + | Sometimes we need to convert the type of Java array e.g. double[] to int[]. | 
| < | < | ||
| + | from ij import IJ | ||
| from ij.process import StackStatistics | from ij.process import StackStatistics | ||
| import jarray | import jarray | ||
| + | imp = IJ.getImage() #stack | ||
| stackstats = StackStatistics(imp) | stackstats = StackStatistics(imp) | ||
| - | histD = stackstats.histogram() | + | histD = stackstats.histogram() | 
| - | hist = jarray.zeros(len(histD), ' | + | print(type(histD[0])) | 
| - | for i in range(len(histD)): | + | |
| - | hist[i] = int(histD[i]) | + | hist = map(int, histD) | 
| + | histInt = jarray.array(hist, ' | ||
| + | print(type(histInt[0])) #Java int[] | ||
| </ | </ | ||
| Line 1208: | Line 1283: | ||
| # here is only listing mean intensity of ROIs | # here is only listing mean intensity of ROIs | ||
| # if you want more, see | # if you want more, see | ||
| - | # http://rsbweb.nih.gov/ | + | # http://imagej.net/ | 
| for r in ra: | for r in ra: | ||
| ip.setRoi(r) | ip.setRoi(r) | ||
| Line 1233: | Line 1308: | ||
| ==== Union of multiple ROIs ==== | ==== Union of multiple ROIs ==== | ||
| - | For combining multiple ROIs, {{http://rsbweb.nih.gov/ | + | For combining multiple ROIs, [[http://imagej.net/ | 
| <code python linenums: | <code python linenums: | ||
| Line 1241: | Line 1316: | ||
| sr3 = sr1.or(sr2) | sr3 = sr1.or(sr2) | ||
| </ | </ | ||
| - | sr3 is then a combination of ROIs roi1 and roi2. In similar way, there are AND, XOR, NOT and so on, logical operations. | + | sr3 is then a combination of ROIs roi1 and roi2. ShapeRoi allows upi to perform logical operations between ROIs, such as AND, XOR, NOT, and so on. | 
| ==== Mask to selection (Binary to Selection) ==== | ==== Mask to selection (Binary to Selection) ==== | ||
| Line 1654: | Line 1729: | ||
| </ | </ | ||
| - | For more explanation about this processing, see [[http://rsbweb.nih.gov/ | + | For more explanation about this processing, see [[http://imagej.net/ | 
| ==== Background Subtraction (Rolling Ball) ==== | ==== Background Subtraction (Rolling Ball) ==== | ||
| Line 2552: | Line 2627: | ||
| The code below shows how to measure spherical 3D ROI in an image. We first create 3 3D spheres and then use them for measuring the mean pixel intensity of those 3D ROIs within a synthetic gradient 3D image. | The code below shows how to measure spherical 3D ROI in an image. We first create 3 3D spheres and then use them for measuring the mean pixel intensity of those 3D ROIs within a synthetic gradient 3D image. | ||
| - | <code:py> | + | <code py> | 
| from ij import IJ, ImagePlus | from ij import IJ, ImagePlus | ||
| from mcib3d.geom import ObjectCreator3D | from mcib3d.geom import ObjectCreator3D | ||
| Line 2583: | Line 2658: | ||
| print "Obj3: ", | print "Obj3: ", | ||
| </ | </ | ||
| + | |||
| + | ===== Plugin: Ridge Detection ===== | ||
| + | |||
| + | [[https:// | ||
| + | [[https:// | ||
| + | |||
| + | <code python linenums: | ||
| + | from ij import IJ | ||
| + | from ij.process import ImageConverter | ||
| + | from ij.plugin.frame import RoiManager | ||
| + | from ij.gui import PolygonRoi | ||
| + | from de.biomedical_imaging.ij.steger import Lines, Position, Junctions, LinesUtil | ||
| + | from org.apache.commons.lang3.mutable import MutableInt | ||
| + | import jarray | ||
| + | import java.lang.Class | ||
| + | |||
| + | # parameter settings | ||
| + | sigma = 2.8 #estimated radius of structure | ||
| + | high = 4.0 #eigenvalue upper threshold | ||
| + | low = 2.0 #eigenvalue lower threshold | ||
| + | minLength = 0.0 #length filter | ||
| + | maxLength = 0.0 #length filter | ||
| + | doCorrectPosition = False | ||
| + | doEstimateWidth = False | ||
| + | doExtendLine = False | ||
| + | mode = LinesUtil.MODE_LIGHT #white signal with black back | ||
| + | |||
| + | |||
| + | # start processing | ||
| + | imp = IJ.getImage() | ||
| + | imp32=imp.duplicate() | ||
| + | ImageConverter(imp32).convertToGray32() | ||
| + | in_img = imp32.getProcessor() | ||
| + | |||
| + | cols = in_img.getWidth() | ||
| + | rows = in_img.getHeight() | ||
| + | |||
| + | imgpxls2 = in_img.getPixels() #alredy float | ||
| + | |||
| + | # prepare output data variables | ||
| + | contours = Lines(in_img.getSliceNumber()) | ||
| + | resultJunction = Junctions(in_img.getSliceNumber()) | ||
| + | hnum_cont = MutableInt() | ||
| + | |||
| + | # detection | ||
| + | p = Position() | ||
| + | p.detect_lines(imgpxls2, | ||
| + | hnum_cont, sigma, low, high, mode, doEstimateWidth, | ||
| + | doCorrectPosition, | ||
| + | |||
| + | # visualization of results | ||
| + | rm = RoiManager.getInstance() | ||
| + | if (rm is None): | ||
| + | rm = RoiManager() | ||
| + | else: | ||
| + | rm.reset() | ||
| + | for c in contours: | ||
| + | pr = PolygonRoi(c.getXCoordinates(), | ||
| + | c.getYCoordinates(), | ||
| + | PolygonRoi.POLYLINE) | ||
| + | rm.addRoi(pr) | ||
| + | rm.runCommand(imp, | ||
| + | |||
| + | </ | ||
| + | |||
documents/120206pyip_cooking/python_imagej_cookbook.1759222680.txt.gz · Last modified: 2025/09/30 08:58 by kota
                
                