====== ImgLib2, first test ====== I pretty much enjoyed [[http://imagejconf.tudor.lu/|ImageJ User and Developer conference 2012]] in Luxemburg. Interesting people from different areas in science, very exciting to see how people are doing image processing and analysis. Some of live notes could be found in [[https://twitter.com/cmci_|my time line]]. One of the great contribution for the third day was Bene Schmidt's work [[http://132.187.25.13/ij3d/?page=IntSeg_3D&category=Extensions|intseg_3D]], combining user clicking and active contour fitting in 3D. One of the core topic there was [[http://fiji.sc/ImgLib2|ImgLib2]], the generic image typ behind [[http://developer.imagej.net/|ImageJ2]]. After coming back home, I tested ImgLib2 with the Jython code below. Results were: Started testImgLib2.py at Sun Oct 28 16:41:57 CET 2012 * ImgLib2 cursor 333 millisec * ImgLib2 for : 138 millisec * ImagePlus 152 millisec * ImageProcessor 114 millisec * Pixel Array 59 millisec for loop using Img iterator is a bit faster than going through ImagePlus using classic nested for-loop. Even with the classic nested for-loop, using ImageProcessor was a bit faster than Img. The fastest is of course accessing pixels via pixel array. I only did this via ImagePlus, but there should be also some methods to extract an array from Img, which I did not test. Addendum: See also proper benchmark in the following link in ImageJ2 site: http://developer.imagej.net/imglib-benchmarks Thanks to Albert Cardona for commenting on this. # first trial with ImageLib2 # iterations from net.imglib2.img import ImagePlusAdapter imp = IJ.openImage("http://imagej.nih.gov/ij/images/blobs.gif") img = ImagePlusAdapter.wrapReal(imp) # accessing via ImagePlus t3 = System.currentTimeMillis() for i in range(imp.getHeight()): for j in range(imp.getWidth()): # print imp.getPixel(j, i)[0] imp.getPixel(j, i)[0] t4 = System.currentTimeMillis() # accessing via ImageProcessor t5 = System.currentTimeMillis() ip = imp.getProcessor() for i in range(imp.getHeight()): for j in range(imp.getWidth()): # print ip.getPixelValue(j, i) ip.getPixelValue(j, i) t6 = System.currentTimeMillis() # ImgLib2 cursor t1 = System.currentTimeMillis() cursor = img.cursor() cursor.fwd() while cursor.hasNext(): cursor.next() # print cursor.get() cursor.get() t2 = System.currentTimeMillis() t7 = System.currentTimeMillis() for t in img: # print t.get() t.get() t8 = System.currentTimeMillis() # pixel array t9 = System.currentTimeMillis() pix = imp.getProcessor().getPixels() for i in pix: i = i # print i t10 = System.currentTimeMillis() print 'ImgLib2 cursor',(t2-t1), 'millisec' print 'ImgLib2 for : ',(t8-t7), 'millisec' print 'ImagePlus',(t4-t3), 'millisec' print 'ImageProcessor',(t6-t5), 'millisec' print 'Pixel Array',(t10-t9), 'millisec'