The weird thing is if I manually save the cropped image with BF exporter. It works, OME XML string is correct and the cropped image can be easly re-opened (and I don't know why but BF exporter image size is huge (40MB) for and original image of 1.9MB).
-- Hadrien Mary Ph.D student in Biology Tournier-Gachet Team CNRS - LBCMCP - UMR 5088 Université de Toulouse - Bât. 4R3B1 118, route de Narbonne - 31062 Toulouse On Mon, Jan 26, 2015 at 4:37 PM, Hadrien Mary <hadrien.m...@gmail.com> wrote: > It appears that I have the same behaviour using 'ij.op().crop()'. > > So in short, my script works well for croping but saving the cropped > image on disk totally failed. In appearence it works but if you try to > open the image, axes (other than X and Y) are merged and it seems that > only the first image has been saved because all other frames from the > stack are the same. > > Looking at the OME XML string of the cropped image, it appears that > attributes of Pixel tag has been all set to 1.0. > > Best, > > -- > Hadrien Mary > > Ph.D student in Biology > Tournier-Gachet Team > CNRS - LBCMCP - UMR 5088 > > Université de Toulouse - Bât. 4R3B1 > 118, route de Narbonne - 31062 Toulouse > > > On Sun, Jan 25, 2015 at 10:22 PM, Hadrien Mary <hadrien.m...@gmail.com> wrote: >> I am now using 'ij.op().crop()' which works well. >> >> I also test fix-cell branch with my previous code (using SCIFIOConfig >> and ImageRegion) which fix the save issue (both with ImgSaver and >> DatasetService). However cropped image histogram is very different >> from the original. >> >> This issue appears only with my dataset (it works well with Samples > >> Track for Trackmate for example). >> >> Please try the following script with this file : >> https://arwen.hadim.fr/public.php?service=files&t=0d6a774bdfaeed521156ec8a8f9ccdcf >> >> ---------------------------------------------- >> # @DatasetService data >> >> from ij import IJ >> from ij.plugin.frame import RoiManager >> >> from io.scif.config import SCIFIOConfig >> from io.scif.img import ImageRegion >> from io.scif.img import ImgOpener >> from io.scif.img import ImgSaver >> from net.imagej.axis import Axes >> >> import os >> >> # Get current image filename >> imp = IJ.getImage() >> f = imp.getOriginalFileInfo() >> fname = os.path.join(f.directory, f.fileName) >> >> IJ.log('Image filename is %s' % fname) >> >> # Iterate over all ROIs from ROI Manager >> rois = RoiManager.getInstance().getRoisAsArray() >> for i, roi in enumerate(rois): >> >> crop_id = i +1 >> IJ.log("Opening crop %i / %i" % (crop_id, len(rois))) >> >> # Get ROI bounds >> bounds = roi.getBounds() >> x = bounds.x >> y = bounds.y >> w = bounds.width >> h = bounds.height >> >> # Import only cropped region of the image >> axes = [Axes.X, Axes.Y] >> ranges = ["%i-%i" % (x, x+w), "%i-%i" % (y, y+h)] >> config = SCIFIOConfig() >> config.imgOpenerSetRegion(ImageRegion(axes, ranges)) >> >> opener = ImgOpener() >> imps = opener.openImgs(fname, config) >> imp = imps[0] >> >> # Get filename and basename of the current cropped image >> crop_basename = "crop%i_%s" % (crop_id, f.fileName) >> crop_fname = os.path.join(f.directory, crop_basename) >> IJ.log("Saving crop to %s" % crop_fname) >> >> # Create dataset >> ds = data.create(imp) >> >> # Save cropped image >> data.save(ds, crop_fname) >> >> IJ.log('Done') >> ------------------------------------------------------------------------ >> >> -- >> Hadrien Mary >> >> Ph.D student in Biology >> Tournier-Gachet Team >> CNRS - LBCMCP - UMR 5088 >> >> Université de Toulouse - Bât. 4R3B1 >> 118, route de Narbonne - 31062 Toulouse >> >> >> On Sun, Jan 25, 2015 at 9:42 PM, Mark Hiner <hi...@wisc.edu> wrote: >>> Hi Hadrien, >>> >>>>I tried to use another method to save cropped images using DatasetService: >>> >>> I couldn't reproduce this failure.. it works for me using the >>> DatasetService. Do you have any local changes? Did you update your Fiji to >>> the latest version? If you're still having problems, you could also copy and >>> paste the "Useful information about your system" contents generated by Help >>>> Report a Bug. >>> >>>> saver.saveImg(crop_fname, imp) >>>> at >>>> io.scif.img.cell.loaders.AbstractArrayLoader.loadArray(AbstractArrayLoader.java:156) >>>> java.lang.NullPointerException: java.lang.NullPointerException >>> >>> Yes! This was definitely a bug - thank you for finding it. I think I have a >>> fix here: https://github.com/scifio/scifio/commits/fix-cell >>> Would you mind giving it a try locally in your workflow? >>> >>> Thank you! >>> - Mark >>> >>> On Sat, Jan 24, 2015 at 3:01 PM, Hadrien Mary <hadrien.m...@gmail.com> >>> wrote: >>>> >>>> Quick update: >>>> >>>> I tried to use another method to save cropped images using DatasetService: >>>> >>>> --------------------------- >>>> # Create dataset >>>> ds = data.create(imp) >>>> >>>> # Save cropped image >>>> data.save(ds, crop_fname) >>>> ------------------------- >>>> >>>> And the error is exactly the same as before. >>>> >>>> -- >>>> Hadrien Mary >>>> >>>> Ph.D student in Biology >>>> Tournier-Gachet Team >>>> CNRS - LBCMCP - UMR 5088 >>>> >>>> Université de Toulouse - Bât. 4R3B1 >>>> 118, route de Narbonne - 31062 Toulouse >>>> >>>> >>>> On Tue, Jan 20, 2015 at 10:17 AM, Hadrien Mary <hadrien.m...@gmail.com> >>>> wrote: >>>> > Another thing I noticed, it's that histogram is different when >>>> > cropping manually inside Fiji (select area and do "Duplicate") or when >>>> > it has been cropped with the python script (SCIFIO crop). >>>> > >>>> > See screenshot attachment. >>>> > >>>> > >>>> > >>>> > -- >>>> > Hadrien Mary >>>> > >>>> > Ph.D student in Biology >>>> > Tournier-Gachet Team >>>> > CNRS - LBCMCP - UMR 5088 >>>> > >>>> > Université de Toulouse - Bât. 4R3B1 >>>> > 118, route de Narbonne - 31062 Toulouse >>>> > >>>> > >>>> > On Mon, Jan 19, 2015 at 10:29 AM, Hadrien Mary <hadrien.m...@gmail.com> >>>> > wrote: >>>> >> Hi again, >>>> >> >>>> >> The script works well for small images (OME Tiff or normal Tiff) with >>>> >> the recent Fiji update. However when I run it on large movies (13GB), >>>> >> I have the following error. >>>> >> >>>> >> ---------------------------------------------------------- >>>> >> -- Classpath of ClassLoader -- >>>> >> /home/hadim/local/Fiji.app/plugins/ >>>> >> >>>> >> at org.scijava.Context.inject(Context.java:431) >>>> >> at org.scijava.Context.inject(Context.java:363) >>>> >> at >>>> >> org.scijava.plugin.DefaultPluginService.createInstance(DefaultPluginService.java:237) >>>> >> at >>>> >> org.scijava.ui.DefaultUIService.discoverUIs(DefaultUIService.java:500) >>>> >> at org.scijava.ui.DefaultUIService.uiList(DefaultUIService.java:479) >>>> >> at >>>> >> org.scijava.ui.DefaultUIService.getAvailableUIs(DefaultUIService.java:231) >>>> >> at org.scijava.ui.DefaultUIService.onEvent(DefaultUIService.java:457) >>>> >> at sun.reflect.GeneratedMethodAccessor5.invoke(Unknown Source) >>>> >> at >>>> >> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) >>>> >> at java.lang.reflect.Method.invoke(Method.java:606) >>>> >> at >>>> >> org.scijava.event.DefaultEventService$ProxySubscriber.onEvent(DefaultEventService.java:280) >>>> >> at >>>> >> org.scijava.event.DefaultEventService$ProxySubscriber.onEvent(DefaultEventService.java:254) >>>> >> at >>>> >> org.bushe.swing.event.ThreadSafeEventService.publish(ThreadSafeEventService.java:971) >>>> >> at >>>> >> org.scijava.event.DefaultEventBus.access$201(DefaultEventBus.java:56) >>>> >> at org.scijava.event.DefaultEventBus$2.run(DefaultEventBus.java:223) >>>> >> at >>>> >> org.scijava.thread.DefaultThreadService$1.run(DefaultThreadService.java:147) >>>> >> at >>>> >> java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) >>>> >> at java.util.concurrent.FutureTask.run(FutureTask.java:262) >>>> >> at >>>> >> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) >>>> >> at >>>> >> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) >>>> >> at java.lang.Thread.run(Thread.java:745) >>>> >> Traceback (most recent call last): >>>> >> File >>>> >> "/home/hadim/local/Fiji.app/plugins/Scripts/Plugins/Crop_Multi_Roi.py", >>>> >> line 50, in <module> >>>> >> saver.saveImg(crop_fname, imp) >>>> >> at >>>> >> io.scif.img.cell.loaders.AbstractArrayLoader.loadArray(AbstractArrayLoader.java:156) >>>> >> at io.scif.img.cell.SCIFIOCellCache.load(SCIFIOCellCache.java:144) >>>> >> at >>>> >> io.scif.img.cell.SCIFIOImgCells$CachedCells.get(SCIFIOImgCells.java:122) >>>> >> at >>>> >> io.scif.img.cell.SCIFIOImgCells$CachedCells.get(SCIFIOImgCells.java:101) >>>> >> at net.imglib2.img.list.ListCursor.get(ListCursor.java:80) >>>> >> at net.imglib2.img.cell.CellCursor.getCell(CellCursor.java:92) >>>> >> at net.imglib2.img.cell.CellCursor.moveToNextCell(CellCursor.java:180) >>>> >> at net.imglib2.img.cell.CellCursor.reset(CellCursor.java:150) >>>> >> at net.imglib2.img.cell.CellCursor.<init>(CellCursor.java:86) >>>> >> at >>>> >> net.imglib2.img.cell.AbstractCellImg.cursor(AbstractCellImg.java:113) >>>> >> at net.imglib2.img.cell.AbstractCellImg.cursor(AbstractCellImg.java:47) >>>> >> at net.imglib2.img.AbstractImg.firstElement(AbstractImg.java:81) >>>> >> at net.imagej.ImgPlus.firstElement(ImgPlus.java:261) >>>> >> at io.scif.img.ImgSaver.populateMeta(ImgSaver.java:894) >>>> >> at io.scif.img.ImgSaver.writeImg(ImgSaver.java:514) >>>> >> at io.scif.img.ImgSaver.writeImg(ImgSaver.java:495) >>>> >> at io.scif.img.ImgSaver.writeImg(ImgSaver.java:457) >>>> >> at io.scif.img.ImgSaver.saveImg(ImgSaver.java:174) >>>> >> at io.scif.img.ImgSaver.saveImg(ImgSaver.java:158) >>>> >> at io.scif.img.ImgSaver.saveImg(ImgSaver.java:128) >>>> >> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) >>>> >> at >>>> >> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) >>>> >> at >>>> >> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) >>>> >> at java.lang.reflect.Method.invoke(Method.java:606) >>>> >> >>>> >> java.lang.NullPointerException: java.lang.NullPointerException >>>> >> ------------------------------------------------------------------- >>>> >> >>>> >> The associated script is below. >>>> >> >>>> >> >>>> >> ------------------------------------------------------------------------ >>>> >> from ij import IJ >>>> >> from ij.plugin.frame import RoiManager >>>> >> >>>> >> from io.scif.config import SCIFIOConfig >>>> >> from io.scif.img import ImageRegion >>>> >> from io.scif.img import ImgOpener >>>> >> from io.scif.img import ImgSaver >>>> >> from net.imagej.axis import Axes >>>> >> >>>> >> import os >>>> >> >>>> >> # Get current image filename >>>> >> imp = IJ.getImage() >>>> >> f = imp.getOriginalFileInfo() >>>> >> fname = os.path.join(f.directory, f.fileName) >>>> >> >>>> >> IJ.log('Image filename is %s' % fname) >>>> >> >>>> >> # Iterate over all ROIs from ROI Manager >>>> >> rois = RoiManager.getInstance().getRoisAsArray() >>>> >> for i, roi in enumerate(rois): >>>> >> >>>> >> crop_id = i +1 >>>> >> IJ.log("Opening crop %i / %i" % (crop_id, len(rois))) >>>> >> >>>> >> # Get ROI bounds >>>> >> bounds = roi.getBounds() >>>> >> x = bounds.x >>>> >> y = bounds.y >>>> >> w = bounds.width >>>> >> h = bounds.height >>>> >> >>>> >> # Import only cropped region of the image >>>> >> axes = [Axes.X, Axes.Y] >>>> >> ranges = ["%i-%i" % (x, x+w), "%i-%i" % (y, y+h)] >>>> >> config = SCIFIOConfig() >>>> >> config.imgOpenerSetRegion(ImageRegion(axes, ranges)) >>>> >> >>>> >> opener = ImgOpener() >>>> >> imps = opener.openImgs(fname, config) >>>> >> imp = imps[0] >>>> >> >>>> >> # Get filename and basename of the current cropped image >>>> >> crop_basename = "crop%i_%s" % (crop_id, f.fileName) >>>> >> crop_fname = os.path.join(f.directory, crop_basename) >>>> >> IJ.log("Saving crop to %s" % crop_fname) >>>> >> >>>> >> # Save cropped image >>>> >> saver = ImgSaver() >>>> >> saver.saveImg(crop_fname, imp) >>>> >> >>>> >> IJ.log('Done') >>>> >> >>>> >> ---------------------------------------------------------------------------- >>>> >> >>>> >> Does opener.openImgs() wait for the image to open ? If it does not I >>>> >> guess that saver.saveImg() is called on an image that does not exist >>>> >> in memory. >>>> >> >>>> >> Thanks >>>> >> >>>> >> -- >>>> >> Hadrien Mary >>>> >> >>>> >> Ph.D student in Biology >>>> >> Tournier-Gachet Team >>>> >> CNRS - LBCMCP - UMR 5088 >>>> >> >>>> >> Université de Toulouse - Bât. 4R3B1 >>>> >> 118, route de Narbonne - 31062 Toulouse >>>> >> >>>> >> >>>> >> On Wed, Jan 14, 2015 at 4:35 PM, Hadrien Mary <hadrien.m...@gmail.com> >>>> >> wrote: >>>> >>> I confirm it works ! >>>> >>> >>>> >>> Thanks again >>>> >>> >>>> >>> -- >>>> >>> Hadrien Mary >>>> >>> >>>> >>> Ph.D student in Biology >>>> >>> Tournier-Gachet Team >>>> >>> CNRS - LBCMCP - UMR 5088 >>>> >>> >>>> >>> Université de Toulouse - Bât. 4R3B1 >>>> >>> 118, route de Narbonne - 31062 Toulouse >>>> >>> >>>> >>> >>>> >>> On Wed, Jan 14, 2015 at 3:32 PM, Mark Hiner <hi...@wisc.edu> wrote: >>>> >>>> Hi Hadrien, >>>> >>>> >>>> >>>>>Exception in thread "DrawAndDrop" java.lang.NoSuchMethodError: >>>> >>>>>io.scif.ImageMetadata.setAxisLength(Lnet/imglib2/meta/AxisType;J)V >>>> >>>> >>>> >>>> Ah sorry - my fault again for responding too quickly. ImageJ.git >>>> >>>> doesn't >>>> >>>> have a dependency on scifio-ome-xml; it's a dependency in Fiji >>>> >>>> itself[1]. So >>>> >>>> when you installed ImageJ into your Fiji, it updated all the >>>> >>>> dependencies >>>> >>>> but didn't actually update scifio-ome-xml. >>>> >>>> >>>> >>>> You can either manually copy scifio-ome-xml[2] over, or try >>>> >>>> installing from >>>> >>>> the latest Fiji master[3] which I just updated to have the latest >>>> >>>> dependencies. >>>> >>>> >>>> >>>> [1] >>>> >>>> >>>> >>>> https://github.com/fiji/fiji/blob/2bc6266ff5ad5dfa155db9c0631db9baae396062/pom.xml#L608-612 >>>> >>>> [2] >>>> >>>> >>>> >>>> https://github.com/scifio/scifio-ome-xml/releases/tag/scifio-ome-xml-0.12.0 >>>> >>>> [3] >>>> >>>> >>>> >>>> https://github.com/fiji/fiji/commit/2bc6266ff5ad5dfa155db9c0631db9baae396062 >>>> >>>> >>>> >>>> On Wed, Jan 14, 2015 at 7:05 AM, Hadrien Mary >>>> >>>> <hadrien.m...@gmail.com> >>>> >>>> wrote: >>>> >>>>> >>>> >>>>> Ok it makes sense now ! >>>> >>>>> >>>> >>>>> So I did what you told me about cloning imagej repo, building and >>>> >>>>> install it with maven inside my local Fiji.app/. I don't know if >>>> >>>>> it's >>>> >>>>> a bug or a missing dependency but I am now unable to open OME Tiff >>>> >>>>> files (other kind of file works well) wether it is by drag and drop >>>> >>>>> or >>>> >>>>> with my script. The error is the following: >>>> >>>>> >>>> >>>>> ------------------------------------------------- >>>> >>>>> Exception in thread "DrawAndDrop" java.lang.NoSuchMethodError: >>>> >>>>> io.scif.ImageMetadata.setAxisLength(Lnet/imglib2/meta/AxisType;J)V >>>> >>>>> at >>>> >>>>> >>>> >>>>> io.scif.ome.formats.OMETIFFFormat$Metadata.populateImageMetadata(OMETIFFFormat.java:273) >>>> >>>>> at io.scif.AbstractParser.parse(AbstractParser.java:254) >>>> >>>>> at >>>> >>>>> io.scif.ome.formats.OMETIFFFormat$Parser.parse(OMETIFFFormat.java:609) >>>> >>>>> at >>>> >>>>> io.scif.ome.formats.OMETIFFFormat$Parser.parse(OMETIFFFormat.java:552) >>>> >>>>> at io.scif.AbstractParser.parse(AbstractParser.java:335) >>>> >>>>> at io.scif.AbstractParser.parse(AbstractParser.java:52) >>>> >>>>> at io.scif.AbstractReader.setSource(AbstractReader.java:270) >>>> >>>>> at >>>> >>>>> >>>> >>>>> io.scif.services.DefaultInitializeService.initializeReader(DefaultInitializeService.java:90) >>>> >>>>> at io.scif.img.ImgOpener.createReader(ImgOpener.java:542) >>>> >>>>> at io.scif.img.ImgOpener.openImgs(ImgOpener.java:144) >>>> >>>>> at io.scif.io.DatasetIOPlugin.open(DatasetIOPlugin.java:133) >>>> >>>>> at io.scif.io.DatasetIOPlugin.open(DatasetIOPlugin.java:109) >>>> >>>>> at io.scif.io.DatasetIOPlugin.open(DatasetIOPlugin.java:63) >>>> >>>>> at >>>> >>>>> >>>> >>>>> net.imagej.legacy.plugin.DefaultLegacyOpener.open(DefaultLegacyOpener.java:134) >>>> >>>>> at >>>> >>>>> >>>> >>>>> net.imagej.legacy.DefaultLegacyHooks.interceptDragAndDropFile(DefaultLegacyHooks.java:358) >>>> >>>>> at ij.plugin.DragAndDrop.openFile(DragAndDrop.java) >>>> >>>>> at ij.plugin.DragAndDrop.run(DragAndDrop.java:152) >>>> >>>>> at java.lang.Thread.run(Thread.java:745) >>>> >>>>> ----------------------------------------------- >>>> >>>>> >>>> >>>>> I guess something in scifio has not been updated to use the new >>>> >>>>> net.imagej.axis or maybe the update is not built/downloaded when I >>>> >>>>> run >>>> >>>>> maven on my imagej clone. >>>> >>>>> >>>> >>>>> >>>> >>>>> -- >>>> >>>>> Hadrien Mary >>>> >>>>> >>>> >>>>> Ph.D student in Biology >>>> >>>>> Tournier-Gachet Team >>>> >>>>> CNRS - LBCMCP - UMR 5088 >>>> >>>>> >>>> >>>>> Université de Toulouse - Bât. 4R3B1 >>>> >>>>> 118, route de Narbonne - 31062 Toulouse >>>> >>>>> >>>> >>>>> >>>> >>>>> On Wed, Jan 14, 2015 at 12:58 PM, Mark Hiner <hi...@wisc.edu> wrote: >>>> >>>>> > Hi Hadrien, >>>> >>>>> > >>>> >>>>> >>Sorry if it's off topic but I tried to run my script and I got a >>>> >>>>> >> python >>>> >>>>> >> error >>>> >>>>> > >>>> >>>>> > Oh no! This is totally my fault. I had to update your script for >>>> >>>>> > the new >>>> >>>>> > dependencies I mentioned and forgot to paste the new version in my >>>> >>>>> > response >>>> >>>>> > yesterday: >>>> >>>>> > >>>> >>>>> >>from net.imglib2.meta import Axes >>>> >>>>> > >>>> >>>>> > This import needs to change to: >>>> >>>>> > >>>> >>>>> > from net.imagej.axis import Axes >>>> >>>>> > >>>> >>>>> > Sorry about that! >>>> >>>>> > >>>> >>>>> > Best, >>>> >>>>> > Mark >>>> >>>>> > >>>> >>>>> > >>>> >>>>> > On Tue, Jan 13, 2015 at 3:59 PM, Hadrien Mary >>>> >>>>> > <hadrien.m...@gmail.com> >>>> >>>>> > wrote: >>>> >>>>> >> >>>> >>>>> >> Thank you Mark ! >>>> >>>>> >> >>>> >>>>> >> Sorry if it's off topic but I tried to run my script and I got a >>>> >>>>> >> python error probably related to type difference between python >>>> >>>>> >> and >>>> >>>>> >> java. It's not the first time I saw this kind of message and I'd >>>> >>>>> >> like >>>> >>>>> >> to know how to resolve it. Note that for python script I mainly >>>> >>>>> >> use >>>> >>>>> >> javadoc as documentation. >>>> >>>>> >> >>>> >>>>> >> The error is below coming from almost the same script as before >>>> >>>>> >> in this >>>> >>>>> >> thread. >>>> >>>>> >> >>>> >>>>> >> ******************************** >>>> >>>>> >> Started test_open_save.py at Tue Jan 13 22:54:36 CET 2015 >>>> >>>>> >> Traceback (most recent call last): >>>> >>>>> >> File >>>> >>>>> >> >>>> >>>>> >> >>>> >>>>> >> "/home/hadim/Documents/phd/dev/scripts/imagej_scripts/test_open_save.py", >>>> >>>>> >> line 17, in <module> >>>> >>>>> >> config.imgOpenerSetRegion(ImageRegion(axes, ranges)) >>>> >>>>> >> TypeError: io.scif.img.ImageRegion(): 1st arg can't be coerced to >>>> >>>>> >> net.imagej.axis.AxisType[] >>>> >>>>> >> >>>> >>>>> >> at org.python.core.Py.TypeError(Py.java:235) >>>> >>>>> >> at >>>> >>>>> >> >>>> >>>>> >> >>>> >>>>> >> org.python.core.PyReflectedFunction.throwError(PyReflectedFunction.java:209) >>>> >>>>> >> at >>>> >>>>> >> >>>> >>>>> >> >>>> >>>>> >> org.python.core.PyReflectedFunction.throwBadArgError(PyReflectedFunction.java:312) >>>> >>>>> >> at >>>> >>>>> >> >>>> >>>>> >> >>>> >>>>> >> org.python.core.PyReflectedFunction.throwError(PyReflectedFunction.java:321) >>>> >>>>> >> at >>>> >>>>> >> >>>> >>>>> >> >>>> >>>>> >> org.python.core.PyReflectedConstructor.__call__(PyReflectedConstructor.java:176) >>>> >>>>> >> at org.python.core.PyObject.__call__(PyObject.java:345) >>>> >>>>> >> at >>>> >>>>> >> org.python.core.PyMethod.instancemethod___call__(PyMethod.java:220) >>>> >>>>> >> at org.python.core.PyMethod.__call__(PyMethod.java:211) >>>> >>>>> >> at org.python.core.PyMethod.__call__(PyMethod.java:206) >>>> >>>>> >> at org.python.core.Deriveds.dispatch__init__(Deriveds.java:19) >>>> >>>>> >> at >>>> >>>>> >> >>>> >>>>> >> >>>> >>>>> >> org.python.core.PyObjectDerived.dispatch__init__(PyObjectDerived.java:1057) >>>> >>>>> >> at org.python.core.PyType.type___call__(PyType.java:1565) >>>> >>>>> >> at org.python.core.PyType.__call__(PyType.java:1548) >>>> >>>>> >> at org.python.core.PyObject.__call__(PyObject.java:404) >>>> >>>>> >> at org.python.core.PyObject.__call__(PyObject.java:408) >>>> >>>>> >> at >>>> >>>>> >> >>>> >>>>> >> >>>> >>>>> >> org.python.pycode._pyx0.f$0(/home/hadim/Documents/phd/dev/scripts/imagej_scripts/test_open_save.py:26) >>>> >>>>> >> at >>>> >>>>> >> >>>> >>>>> >> >>>> >>>>> >> org.python.pycode._pyx0.call_function(/home/hadim/Documents/phd/dev/scripts/imagej_scripts/test_open_save.py) >>>> >>>>> >> at org.python.core.PyTableCode.call(PyTableCode.java:165) >>>> >>>>> >> at org.python.core.PyCode.call(PyCode.java:18) >>>> >>>>> >> at org.python.core.Py.runCode(Py.java:1275) >>>> >>>>> >> at >>>> >>>>> >> >>>> >>>>> >> >>>> >>>>> >> org.scijava.plugins.scripting.jython.JythonScriptEngine.eval(JythonScriptEngine.java:76) >>>> >>>>> >> at org.scijava.script.ScriptModule.run(ScriptModule.java:175) >>>> >>>>> >> at org.scijava.module.ModuleRunner.run(ModuleRunner.java:167) >>>> >>>>> >> at org.scijava.module.ModuleRunner.call(ModuleRunner.java:126) >>>> >>>>> >> at org.scijava.module.ModuleRunner.call(ModuleRunner.java:65) >>>> >>>>> >> at >>>> >>>>> >> >>>> >>>>> >> >>>> >>>>> >> org.scijava.thread.DefaultThreadService$2.call(DefaultThreadService.java:164) >>>> >>>>> >> at java.util.concurrent.FutureTask.run(FutureTask.java:262) >>>> >>>>> >> at >>>> >>>>> >> >>>> >>>>> >> >>>> >>>>> >> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) >>>> >>>>> >> at >>>> >>>>> >> >>>> >>>>> >> >>>> >>>>> >> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) >>>> >>>>> >> at java.lang.Thread.run(Thread.java:745) >>>> >>>>> >> ************************************ >>>> >>>>> >> >>>> >>>>> >> -- >>>> >>>>> >> Hadrien Mary >>>> >>>>> >> >>>> >>>>> >> Ph.D student in Biology >>>> >>>>> >> Tournier-Gachet Team >>>> >>>>> >> CNRS - LBCMCP - UMR 5088 >>>> >>>>> >> >>>> >>>>> >> Université de Toulouse - Bât. 4R3B1 >>>> >>>>> >> 118, route de Narbonne - 31062 Toulouse >>>> >>>>> >> >>>> >>>>> >> >>>> >>>>> >> On Tue, Jan 13, 2015 at 10:20 PM, Mark Hiner <hi...@wisc.edu> >>>> >>>>> >> wrote: >>>> >>>>> >> > Hi Hadrien, >>>> >>>>> >> > >>>> >>>>> >> > Unsurprisingly, cropping and writing OME-TIFFs was quite >>>> >>>>> >> > broken. >>>> >>>>> >> > >>>> >>>>> >> > It's working for me now, as of the latest SCIFIO[1] and >>>> >>>>> >> > SCIFIO-OME-XML[2]. >>>> >>>>> >> > Note that these libraries have updated dependencies compared to >>>> >>>>> >> > what's >>>> >>>>> >> > currently on Fiji, so you can't just drop these .jars into your >>>> >>>>> >> > Fiji >>>> >>>>> >> > installation if you want to test locally; you need to update >>>> >>>>> >> > the >>>> >>>>> >> > dependencies as well. The easiest way to do this would be to >>>> >>>>> >> > just >>>> >>>>> >> > clone >>>> >>>>> >> > Imagej.git[3] and install it into your Fiji.app directory by >>>> >>>>> >> > running: >>>> >>>>> >> > >>>> >>>>> >> > mvn -Dimagej.app.directory=/path/to/Fiji.app/ >>>> >>>>> >> > -Ddelete.other.versions=true >>>> >>>>> >> > >>>> >>>>> >> > We'll push these changes up to Fiji this week, and I will find >>>> >>>>> >> > or >>>> >>>>> >> > write >>>> >>>>> >> > better instructions for local testing. >>>> >>>>> >> > >>>> >>>>> >> > Hope this helps. Let us know if you have any >>>> >>>>> >> > questions/problems. >>>> >>>>> >> > Thanks >>>> >>>>> >> > again for finding this issue! >>>> >>>>> >> > >>>> >>>>> >> > Best, >>>> >>>>> >> > - Mark >>>> >>>>> >> > >>>> >>>>> >> > [1] https://github.com/scifio/scifio/releases/tag/scifio-0.19.0 >>>> >>>>> >> > [2] >>>> >>>>> >> > >>>> >>>>> >> > >>>> >>>>> >> > >>>> >>>>> >> > https://github.com/scifio/scifio-ome-xml/releases/tag/scifio-ome-xml-0.12.0 >>>> >>>>> >> > [3] https://github.com/imagej/imagej >>>> >>>>> >> > >>>> >>>>> >> > On Sat, Jan 10, 2015 at 5:13 AM, Hadrien Mary >>>> >>>>> >> > <hadrien.m...@gmail.com> >>>> >>>>> >> > wrote: >>>> >>>>> >> >> >>>> >>>>> >> >> Ok. Let me know when you want me to test your changes. I also >>>> >>>>> >> >> tested >>>> >>>>> >> >> fix-writing branch and I didn't notice any changes. >>>> >>>>> >> >> >>>> >>>>> >> >> -- >>>> >>>>> >> >> Hadrien Mary >>>> >>>>> >> >> >>>> >>>>> >> >> Ph.D student in Biology >>>> >>>>> >> >> Tournier-Gachet Team >>>> >>>>> >> >> CNRS - LBCMCP - UMR 5088 >>>> >>>>> >> >> >>>> >>>>> >> >> Université de Toulouse - Bât. 4R3B1 >>>> >>>>> >> >> 118, route de Narbonne - 31062 Toulouse >>>> >>>>> >> >> >>>> >>>>> >> >> >>>> >>>>> >> >> On Fri, Jan 9, 2015 at 10:14 PM, Mark Hiner <hi...@wisc.edu> >>>> >>>>> >> >> wrote: >>>> >>>>> >> >> > Hi Hadrien, >>>> >>>>> >> >> > >>>> >>>>> >> >> > I've identified at least two bugs that could be affecting >>>> >>>>> >> >> > you >>>> >>>>> >> >> > here. >>>> >>>>> >> >> > >>>> >>>>> >> >> > First of all, there was a bug in the OME-TIFF format writing >>>> >>>>> >> >> > out >>>> >>>>> >> >> > multi-dimensional images. That's fixed on a branch but not >>>> >>>>> >> >> > uploaded >>>> >>>>> >> >> > to >>>> >>>>> >> >> > Fiji >>>> >>>>> >> >> > yet [1]. >>>> >>>>> >> >> > >>>> >>>>> >> >> > Second, it seems like cropping is restricting pixel reads to >>>> >>>>> >> >> > the >>>> >>>>> >> >> > correct >>>> >>>>> >> >> > region but then doesn't change the image size. >>>> >>>>> >> >> > >>>> >>>>> >> >> > I'm hoping when I fix the second issue writing cropped >>>> >>>>> >> >> > regions >>>> >>>>> >> >> > will >>>> >>>>> >> >> > be >>>> >>>>> >> >> > fixed. >>>> >>>>> >> >> > >>>> >>>>> >> >> > Thanks for the great feedback! >>>> >>>>> >> >> > - Mark >>>> >>>>> >> >> > >>>> >>>>> >> >> > [1] >>>> >>>>> >> >> > https://github.com/scifio/scifio-ome-xml/tree/fix-writing >>>> >>>>> >> >> > >>>> >>>>> >> >> > On Fri, Jan 9, 2015 at 11:49 AM, Hadrien Mary >>>> >>>>> >> >> > <hadrien.m...@gmail.com> >>>> >>>>> >> >> > wrote: >>>> >>>>> >> >> >> >>>> >>>>> >> >> >> I also confirm the same behaviour when replacing original >>>> >>>>> >> >> >> file by >>>> >>>>> >> >> >> OME >>>> >>>>> >> >> >> sample data : >>>> >>>>> >> >> >> >>>> >>>>> >> >> >> >>>> >>>>> >> >> >> >>>> >>>>> >> >> >> >>>> >>>>> >> >> >> http://www.openmicroscopy.org/Schemas/Samples/2013-06/bioformats-artificial/multi-channel-4D-series.ome.tif.zip. >>>> >>>>> >> >> >> >>>> >>>>> >> >> >> -- >>>> >>>>> >> >> >> Hadrien Mary >>>> >>>>> >> >> >> >>>> >>>>> >> >> >> Ph.D student in Biology >>>> >>>>> >> >> >> Tournier-Gachet Team >>>> >>>>> >> >> >> CNRS - LBCMCP - UMR 5088 >>>> >>>>> >> >> >> >>>> >>>>> >> >> >> Université de Toulouse - Bât. 4R3B1 >>>> >>>>> >> >> >> 118, route de Narbonne - 31062 Toulouse >>>> >>>>> >> >> >> >>>> >>>>> >> >> >> >>>> >>>>> >> >> >> On Fri, Jan 9, 2015 at 6:46 PM, Hadrien Mary >>>> >>>>> >> >> >> <hadrien.m...@gmail.com> >>>> >>>>> >> >> >> wrote: >>>> >>>>> >> >> >> > After some investigations I think there is a bug with >>>> >>>>> >> >> >> > ImgSaver. >>>> >>>>> >> >> >> > In >>>> >>>>> >> >> >> > the >>>> >>>>> >> >> >> > following script, X, Y crop is fine but axes informations >>>> >>>>> >> >> >> > (T >>>> >>>>> >> >> >> > and >>>> >>>>> >> >> >> > Z) >>>> >>>>> >> >> >> > are lost and all frames appears on the same axes. Now if >>>> >>>>> >> >> >> > I >>>> >>>>> >> >> >> > replace >>>> >>>>> >> >> >> > "target = "/home/hadim/cropped.tif" by "target = >>>> >>>>> >> >> >> > "/home/hadim/cropped.ome.tif" on line 9. X, Y crop fails, >>>> >>>>> >> >> >> > cropped >>>> >>>>> >> >> >> > image has the same dimensions than original however axes >>>> >>>>> >> >> >> > informations >>>> >>>>> >> >> >> > (T and Z) are ok. Note that in cropped.ome.tif, pixel >>>> >>>>> >> >> >> > values >>>> >>>>> >> >> >> > are >>>> >>>>> >> >> >> > totally incoherent which is not the case in cropped.tif. >>>> >>>>> >> >> >> > >>>> >>>>> >> >> >> > Files can be found here : >>>> >>>>> >> >> >> > >>>> >>>>> >> >> >> > >>>> >>>>> >> >> >> > >>>> >>>>> >> >> >> > >>>> >>>>> >> >> >> > >>>> >>>>> >> >> >> > https://arwen.hadim.fr/public.php?service=files&t=71aa17336dcccb3437d9a3dff789d2c0 >>>> >>>>> >> >> >> > >>>> >>>>> >> >> >> > Archive contains cropped.tif, cropped.ome.tif and >>>> >>>>> >> >> >> > original.ome.tif. >>>> >>>>> >> >> >> > >>>> >>>>> >> >> >> > The script: >>>> >>>>> >> >> >> > >>>> >>>>> >> >> >> > --------------------------------------------------- >>>> >>>>> >> >> >> > from io.scif import SCIFIO >>>> >>>>> >> >> >> > from io.scif.config import SCIFIOConfig >>>> >>>>> >> >> >> > from io.scif.img import ImageRegion >>>> >>>>> >> >> >> > from io.scif.img import ImgOpener >>>> >>>>> >> >> >> > from io.scif.img import ImgSaver >>>> >>>>> >> >> >> > from net.imglib2.meta import Axes >>>> >>>>> >> >> >> > >>>> >>>>> >> >> >> > fname = "/home/hadim/original.ome.tif" >>>> >>>>> >> >> >> > target = "/home/hadim/cropped.tif" >>>> >>>>> >> >> >> > >>>> >>>>> >> >> >> > axes = [Axes.X, Axes.Y] >>>> >>>>> >> >> >> > ranges = ["%i-%i" % (0, 15), "%i-%i" % (0, 25)] >>>> >>>>> >> >> >> > config = SCIFIOConfig() >>>> >>>>> >> >> >> > config.imgOpenerSetRegion(ImageRegion(axes, ranges)) >>>> >>>>> >> >> >> > >>>> >>>>> >> >> >> > opener = ImgOpener() >>>> >>>>> >> >> >> > imps = opener.openImgs(fname, config) >>>> >>>>> >> >> >> > imp = imps[0] >>>> >>>>> >> >> >> > >>>> >>>>> >> >> >> > saver = ImgSaver() >>>> >>>>> >> >> >> > saver.saveImg(target, imp) >>>> >>>>> >> >> >> > >>>> >>>>> >> >> >> > print('Done') >>>> >>>>> >> >> >> > --------------------------------------------------- >>>> >>>>> >> >> >> > >>>> >>>>> >> >> >> > >>>> >>>>> >> >> >> > -- >>>> >>>>> >> >> >> > Hadrien Mary >>>> >>>>> >> >> >> > >>>> >>>>> >> >> >> > >>>> >>>>> >> >> >> > On Fri, Jan 9, 2015 at 12:25 AM, Hadrien Mary >>>> >>>>> >> >> >> > <hadrien.m...@gmail.com> >>>> >>>>> >> >> >> > wrote: >>>> >>>>> >> >> >> >> Thanks for the tip (reminder to me: always look for >>>> >>>>> >> >> >> >> example in >>>> >>>>> >> >> >> >> tests!). >>>> >>>>> >> >> >> >> >>>> >>>>> >> >> >> >> Unfortunately crop does not work... I will try to do >>>> >>>>> >> >> >> >> more >>>> >>>>> >> >> >> >> tests >>>> >>>>> >> >> >> >> tomorrow or wait for you or someone else to have a look. >>>> >>>>> >> >> >> >> >>>> >>>>> >> >> >> >> Updated code: >>>> >>>>> >> >> >> >> >>>> >>>>> >> >> >> >> from ij import IJ >>>> >>>>> >> >> >> >> from ij import ImagePlus >>>> >>>>> >> >> >> >> >>>> >>>>> >> >> >> >> from io.scif import SCIFIO >>>> >>>>> >> >> >> >> from io.scif.config import SCIFIOConfig >>>> >>>>> >> >> >> >> from io.scif.img import ImageRegion >>>> >>>>> >> >> >> >> from io.scif.img import ImgOpener >>>> >>>>> >> >> >> >> from io.scif.img import ImgSaver >>>> >>>>> >> >> >> >> from net.imglib2.meta import Axes >>>> >>>>> >> >> >> >> >>>> >>>>> >> >> >> >> fname = "/home/hadim/original.ome.tif" >>>> >>>>> >> >> >> >> target = "/home/hadim/cropped.ome.tif" >>>> >>>>> >> >> >> >> >>>> >>>>> >> >> >> >> axes = [Axes.X, Axes.Y] >>>> >>>>> >> >> >> >> ranges = ["%i-%i" % (2, 15), "%i-%i" % (2, 25)] >>>> >>>>> >> >> >> >> config = SCIFIOConfig() >>>> >>>>> >> >> >> >> config.imgOpenerSetRegion(ImageRegion(axes, ranges)) >>>> >>>>> >> >> >> >> >>>> >>>>> >> >> >> >> opener = ImgOpener() >>>> >>>>> >> >> >> >> imps = opener.openImgs(fname, config) >>>> >>>>> >> >> >> >> imp = imps[0] >>>> >>>>> >> >> >> >> >>>> >>>>> >> >> >> >> saver = ImgSaver() >>>> >>>>> >> >> >> >> saver.saveImg(target, imp) >>>> >>>>> >> >> >> >> >>>> >>>>> >> >> >> >> print('Done') >>>> >>>>> >> >> >> >> >>>> >>>>> >> >> >> >> -- >>>> >>>>> >> >> >> >> Hadrien Mary >>>> >>>>> >> >> >> >> >>>> >>>>> >> >> >> >> >>>> >>>>> >> >> >> >> On Fri, Jan 9, 2015 at 12:09 AM, Curtis Rueden >>>> >>>>> >> >> >> >> <ctrue...@wisc.edu> >>>> >>>>> >> >> >> >> wrote: >>>> >>>>> >> >> >> >>> Hi Hadrien, >>>> >>>>> >> >> >> >>> >>>> >>>>> >> >> >> >>>> I would like to be able to crop a region in X and Y >>>> >>>>> >> >> >> >>>> while >>>> >>>>> >> >> >> >>>> keeping any other dimensions which could exist (C, Z, >>>> >>>>> >> >> >> >>>> T). >>>> >>>>> >> >> >> >>> >>>> >>>>> >> >> >> >>> Here's some Java: >>>> >>>>> >> >> >> >>> >>>> >>>>> >> >> >> >>> int minX = 128, maxX = 255, minY = 128, minY = 255; >>>> >>>>> >> >> >> >>> AxisType[] axes = { Axes.X, Axes.Y }; >>>> >>>>> >> >> >> >>> String[] ranges = { minX + "-" + maxX, minY + "-" + >>>> >>>>> >> >> >> >>> maxY >>>> >>>>> >> >> >> >>> }; >>>> >>>>> >> >> >> >>> config.imgOpenerSetRegion(new ImageRegion(axes, >>>> >>>>> >> >> >> >>> ranges)); >>>> >>>>> >> >> >> >>> >>>> >>>>> >> >> >> >>> Adapted from here: >>>> >>>>> >> >> >> >>> >>>> >>>>> >> >> >> >>> >>>> >>>>> >> >> >> >>> >>>> >>>>> >> >> >> >>> >>>> >>>>> >> >> >> >>> >>>> >>>>> >> >> >> >>> https://github.com/scifio/scifio/blob/scifio-0.18.0/src/test/java/io/scif/img/utests/ImgOpenerTest.java#L189-L191 >>>> >>>>> >> >> >> >>> >>>> >>>>> >> >> >> >>> And untested. >>>> >>>>> >> >> >> >>> >>>> >>>>> >> >> >> >>> HTH, >>>> >>>>> >> >> >> >>> Curtis >>>> >>>>> >> >> >> >>> >>>> >>>>> >> >> >> >>> On Thu, Jan 8, 2015 at 4:47 PM, Hadrien Mary >>>> >>>>> >> >> >> >>> <hadrien.m...@gmail.com> >>>> >>>>> >> >> >> >>> wrote: >>>> >>>>> >> >> >> >>>> >>>> >>>>> >> >> >> >>>> After some investigations, I'm pretty sure I don't >>>> >>>>> >> >> >> >>>> instanciate >>>> >>>>> >> >> >> >>>> ImageRegion correctly. Doc and source code didn't help >>>> >>>>> >> >> >> >>>> me... >>>> >>>>> >> >> >> >>>> I >>>> >>>>> >> >> >> >>>> would >>>> >>>>> >> >> >> >>>> like to be able to crop a region in X and Y while >>>> >>>>> >> >> >> >>>> keeping >>>> >>>>> >> >> >> >>>> any >>>> >>>>> >> >> >> >>>> other >>>> >>>>> >> >> >> >>>> dimensions which could exist (C, Z, T). >>>> >>>>> >> >> >> >>>> >>>> >>>>> >> >> >> >>>> -- >>>> >>>>> >> >> >> >>>> Hadrien Mary >>>> >>>>> >> >> >> >>>> >>>> >>>>> >> >> >> >>>> >>>> >>>>> >> >> >> >>>> >>>> >>>>> >> >> >> >>>> On Thu, Jan 8, 2015 at 10:22 PM, Hadrien Mary >>>> >>>>> >> >> >> >>>> <hadrien.m...@gmail.com> >>>> >>>>> >> >> >> >>>> wrote: >>>> >>>>> >> >> >> >>>> > Thank you Curtis for the answer. >>>> >>>>> >> >> >> >>>> > >>>> >>>>> >> >> >> >>>> > I tried to apply what you told me and the code now >>>> >>>>> >> >> >> >>>> > works >>>> >>>>> >> >> >> >>>> > without >>>> >>>>> >> >> >> >>>> > error. However the saved cropped image is not >>>> >>>>> >> >> >> >>>> > cropped >>>> >>>>> >> >> >> >>>> > (same >>>> >>>>> >> >> >> >>>> > size >>>> >>>>> >> >> >> >>>> > as >>>> >>>>> >> >> >> >>>> > original) and pixel values are modified). >>>> >>>>> >> >> >> >>>> > >>>> >>>>> >> >> >> >>>> > Script: >>>> >>>>> >> >> >> >>>> > >>>> >>>>> >> >> >> >>>> > from io.scif.config import SCIFIOConfig >>>> >>>>> >> >> >> >>>> > from io.scif.img import ImageRegion >>>> >>>>> >> >> >> >>>> > from io.scif.img import ImgOpener >>>> >>>>> >> >> >> >>>> > from io.scif.img import ImgSaver >>>> >>>>> >> >> >> >>>> > >>>> >>>>> >> >> >> >>>> > fname = "/home/hadim/original.ome.tif" >>>> >>>>> >> >> >> >>>> > target = "/home/hadim/cropped.ome.tif" >>>> >>>>> >> >> >> >>>> > >>>> >>>>> >> >> >> >>>> > config = SCIFIOConfig() >>>> >>>>> >> >> >> >>>> > region = ImageRegion(dict(x=2, y=2, width=10, >>>> >>>>> >> >> >> >>>> > height=10)) >>>> >>>>> >> >> >> >>>> > config.imgOpenerSetRegion(region) >>>> >>>>> >> >> >> >>>> > >>>> >>>>> >> >> >> >>>> > opener = ImgOpener() >>>> >>>>> >> >> >> >>>> > imps = opener.openImgs(fname, config) >>>> >>>>> >> >> >> >>>> > imp = imps[0] >>>> >>>>> >> >> >> >>>> > >>>> >>>>> >> >> >> >>>> > print(imps) >>>> >>>>> >> >> >> >>>> > >>>> >>>>> >> >> >> >>>> > saver = ImgSaver() >>>> >>>>> >> >> >> >>>> > saver.saveImg(target, imp) >>>> >>>>> >> >> >> >>>> > >>>> >>>>> >> >> >> >>>> > Thanks again for your time. Don't be sorry if you >>>> >>>>> >> >> >> >>>> > don't >>>> >>>>> >> >> >> >>>> > have >>>> >>>>> >> >> >> >>>> > time >>>> >>>>> >> >> >> >>>> > to >>>> >>>>> >> >> >> >>>> > write an example. >>>> >>>>> >> >> >> >>>> > >>>> >>>>> >> >> >> >>>> > I will be happy to provide some python/scifio >>>> >>>>> >> >> >> >>>> > examples >>>> >>>>> >> >> >> >>>> > scripts. >>>> >>>>> >> >> >> >>>> > >>>> >>>>> >> >> >> >>>> > >>>> >>>>> >> >> >> >>>> > -- >>>> >>>>> >> >> >> >>>> > Hadrien Mary >>>> >>>>> >> >> >> >>>> > >>>> >>>>> >> >> >> >>>> > Ph.D student in Biology >>>> >>>>> >> >> >> >>>> > Tournier-Gachet Team >>>> >>>>> >> >> >> >>>> > CNRS - LBCMCP - UMR 5088 >>>> >>>>> >> >> >> >>>> > >>>> >>>>> >> >> >> >>>> > Université de Toulouse - Bât. 4R3B1 >>>> >>>>> >> >> >> >>>> > 118, route de Narbonne - 31062 Toulouse >>>> >>>>> >> >> >> >>>> > >>>> >>>>> >> >> >> >>>> > >>>> >>>>> >> >> >> >>>> > On Thu, Jan 8, 2015 at 9:56 PM, Curtis Rueden >>>> >>>>> >> >> >> >>>> > <ctrue...@wisc.edu> >>>> >>>>> >> >> >> >>>> > wrote: >>>> >>>>> >> >> >> >>>> >> Hi Hadrien, >>>> >>>>> >> >> >> >>>> >> >>>> >>>>> >> >> >> >>>> >>> I tried to use SCIFIO to write cropped image on >>>> >>>>> >> >> >> >>>> >>> disk but >>>> >>>>> >> >> >> >>>> >>> it >>>> >>>>> >> >> >> >>>> >>> doesn >>>> >>>>> >> >> >> >>>> >>> not >>>> >>>>> >> >> >> >>>> >>> work. >>>> >>>>> >> >> >> >>>> >> >>>> >>>>> >> >> >> >>>> >> The error you see is because SCIFIO operates on >>>> >>>>> >> >> >> >>>> >> ImgLib2 >>>> >>>>> >> >> >> >>>> >> data >>>> >>>>> >> >> >> >>>> >> structures, not >>>> >>>>> >> >> >> >>>> >> ImagePlus objects. >>>> >>>>> >> >> >> >>>> >> >>>> >>>>> >> >> >> >>>> >>> Is there is any “easy” alternative to BF >>>> >>>>> >> >> >> >>>> >>> setCropRegion >>>> >>>>> >> >> >> >>>> >>> function >>>> >>>>> >> >> >> >>>> >>> in >>>> >>>>> >> >> >> >>>> >>> SCIFIO ? >>>> >>>>> >> >> >> >>>> >> >>>> >>>>> >> >> >> >>>> >> Yes: you create a SCIFIOConfig, calling >>>> >>>>> >> >> >> >>>> >> imgOpenerSetRegion >>>> >>>>> >> >> >> >>>> >> [1] >>>> >>>>> >> >> >> >>>> >> on >>>> >>>>> >> >> >> >>>> >> it, >>>> >>>>> >> >> >> >>>> >> then >>>> >>>>> >> >> >> >>>> >> pass it as an argument to the ImgOpener. You'll get >>>> >>>>> >> >> >> >>>> >> back >>>> >>>>> >> >> >> >>>> >> an >>>> >>>>> >> >> >> >>>> >> ImgLib2 >>>> >>>>> >> >> >> >>>> >> data >>>> >>>>> >> >> >> >>>> >> object which can then be fed to the SCIFIO >>>> >>>>> >> >> >> >>>> >> ImgSaver. >>>> >>>>> >> >> >> >>>> >> >>>> >>>>> >> >> >> >>>> >> I'm sorry that I don't have time to whip up an >>>> >>>>> >> >> >> >>>> >> example >>>> >>>>> >> >> >> >>>> >> for >>>> >>>>> >> >> >> >>>> >> you >>>> >>>>> >> >> >> >>>> >> right >>>> >>>>> >> >> >> >>>> >> now. It >>>> >>>>> >> >> >> >>>> >> would be great to add more SCIFIO tutorials [2] >>>> >>>>> >> >> >> >>>> >> that use >>>> >>>>> >> >> >> >>>> >> the >>>> >>>>> >> >> >> >>>> >> ImgOpener >>>> >>>>> >> >> >> >>>> >> and >>>> >>>>> >> >> >> >>>> >> ImgSaver, since they are much higher level APIs >>>> >>>>> >> >> >> >>>> >> akin to >>>> >>>>> >> >> >> >>>> >> the >>>> >>>>> >> >> >> >>>> >> Bio-Formats >>>> >>>>> >> >> >> >>>> >> "BF" >>>> >>>>> >> >> >> >>>> >> functionality... please feel welcome to contribute >>>> >>>>> >> >> >> >>>> >> some! >>>> >>>>> >> >> >> >>>> >> >>>> >>>>> >> >> >> >>>> >> Regards, >>>> >>>>> >> >> >> >>>> >> Curtis >>>> >>>>> >> >> >> >>>> >> >>>> >>>>> >> >> >> >>>> >> [1] >>>> >>>>> >> >> >> >>>> >> >>>> >>>>> >> >> >> >>>> >> >>>> >>>>> >> >> >> >>>> >> >>>> >>>>> >> >> >> >>>> >> >>>> >>>>> >> >> >> >>>> >> >>>> >>>>> >> >> >> >>>> >> >>>> >>>>> >> >> >> >>>> >> http://javadoc.imagej.net/SCIFIO/io/scif/config/SCIFIOConfig.html#imgOpenerSetRegion(io.scif.img.ImageRegion) >>>> >>>>> >> >> >> >>>> >> [2] https://github.com/scifio/scifio-tutorials >>>> >>>>> >> >> >> >>>> >> >>>> >>>>> >> >> >> >>>> >> On Thu, Jan 8, 2015 at 2:18 PM, Hadrien Mary >>>> >>>>> >> >> >> >>>> >> <hadrien.m...@gmail.com> >>>> >>>>> >> >> >> >>>> >> wrote: >>>> >>>>> >> >> >> >>>> >>> >>>> >>>>> >> >> >> >>>> >>> Hi, >>>> >>>>> >> >> >> >>>> >>> >>>> >>>>> >> >> >> >>>> >>> I am writing a python macro which iterate over all >>>> >>>>> >> >> >> >>>> >>> rois >>>> >>>>> >> >> >> >>>> >>> in >>>> >>>>> >> >> >> >>>> >>> ROI >>>> >>>>> >> >> >> >>>> >>> Manager >>>> >>>>> >> >> >> >>>> >>> and then use setCropRegion function from bioformat >>>> >>>>> >> >> >> >>>> >>> plugin >>>> >>>>> >> >> >> >>>> >>> to >>>> >>>>> >> >> >> >>>> >>> open >>>> >>>>> >> >> >> >>>> >>> a >>>> >>>>> >> >> >> >>>> >>> cropped region of an image. >>>> >>>>> >> >> >> >>>> >>> >>>> >>>>> >> >> >> >>>> >>> I tried to use SCIFIO to write cropped image on >>>> >>>>> >> >> >> >>>> >>> disk but >>>> >>>>> >> >> >> >>>> >>> it >>>> >>>>> >> >> >> >>>> >>> doesn >>>> >>>>> >> >> >> >>>> >>> not >>>> >>>>> >> >> >> >>>> >>> work. >>>> >>>>> >> >> >> >>>> >>> >>>> >>>>> >> >> >> >>>> >>> (I am using an updated version of Fiji.) >>>> >>>>> >> >> >> >>>> >>> >>>> >>>>> >> >> >> >>>> >>> Here is my script: >>>> >>>>> >> >> >> >>>> >>> >>>> >>>>> >> >> >> >>>> >>> from ij.plugin.frame import RoiManager >>>> >>>>> >> >> >> >>>> >>> from ij import IJ >>>> >>>>> >> >> >> >>>> >>> from io.scif.img import ImgSaver >>>> >>>>> >> >> >> >>>> >>> >>>> >>>>> >> >> >> >>>> >>> from loci.plugins import BF >>>> >>>>> >> >> >> >>>> >>> from loci.plugins.in import ImporterOptions >>>> >>>>> >> >> >> >>>> >>> from loci.common import Region >>>> >>>>> >> >> >> >>>> >>> >>>> >>>>> >> >> >> >>>> >>> import os >>>> >>>>> >> >> >> >>>> >>> >>>> >>>>> >> >> >> >>>> >>> # Get current image filename >>>> >>>>> >> >> >> >>>> >>> imp = IJ.getImage() >>>> >>>>> >> >> >> >>>> >>> f = imp.getOriginalFileInfo() >>>> >>>>> >> >> >> >>>> >>> fname = os.path.join(f.directory, f.fileName) >>>> >>>>> >> >> >> >>>> >>> >>>> >>>>> >> >> >> >>>> >>> IJ.log('Image filename is %s' % fname) >>>> >>>>> >> >> >> >>>> >>> >>>> >>>>> >> >> >> >>>> >>> # Iterate over all ROIs from ROI Manager >>>> >>>>> >> >> >> >>>> >>> rois = RoiManager.getInstance().getRoisAsArray() >>>> >>>>> >> >> >> >>>> >>> for i, roi in enumerate(rois): >>>> >>>>> >> >> >> >>>> >>> >>>> >>>>> >> >> >> >>>> >>> crop_id = i +1 >>>> >>>>> >> >> >> >>>> >>> IJ.log("Opening crop %i / %i" % (crop_id, >>>> >>>>> >> >> >> >>>> >>> len(rois))) >>>> >>>>> >> >> >> >>>> >>> >>>> >>>>> >> >> >> >>>> >>> bounds = roi.getBounds() >>>> >>>>> >> >> >> >>>> >>> >>>> >>>>> >> >> >> >>>> >>> x = bounds.x >>>> >>>>> >> >> >> >>>> >>> y = bounds.y >>>> >>>>> >> >> >> >>>> >>> w = bounds.width >>>> >>>>> >> >> >> >>>> >>> h = bounds.height >>>> >>>>> >> >> >> >>>> >>> >>>> >>>>> >> >> >> >>>> >>> # Import only cropped region of the image >>>> >>>>> >> >> >> >>>> >>> options = ImporterOptions() >>>> >>>>> >> >> >> >>>> >>> options.setCrop(True) >>>> >>>>> >> >> >> >>>> >>> options.setCropRegion(0, Region(x, y, w, h)) >>>> >>>>> >> >> >> >>>> >>> options.setId(fname) >>>> >>>>> >> >> >> >>>> >>> imps = BF.openImagePlus(options) >>>> >>>>> >> >> >> >>>> >>> >>>> >>>>> >> >> >> >>>> >>> imp = imps[0] >>>> >>>>> >> >> >> >>>> >>> imp.show() >>>> >>>>> >> >> >> >>>> >>> >>>> >>>>> >> >> >> >>>> >>> crop_basename = "crop%i_%s" % (crop_id, >>>> >>>>> >> >> >> >>>> >>> f.fileName) >>>> >>>>> >> >> >> >>>> >>> crop_fname = os.path.join(f.directory, >>>> >>>>> >> >> >> >>>> >>> crop_basename) >>>> >>>>> >> >> >> >>>> >>> imp.setTitle(crop_basename) >>>> >>>>> >> >> >> >>>> >>> >>>> >>>>> >> >> >> >>>> >>> # Save image >>>> >>>>> >> >> >> >>>> >>> IJ.log("Saving crop to %s" % crop_fname) >>>> >>>>> >> >> >> >>>> >>> saver = ImgSaver() >>>> >>>>> >> >> >> >>>> >>> saver.saveImg(crop_basename, imp) >>>> >>>>> >> >> >> >>>> >>> >>>> >>>>> >> >> >> >>>> >>> IJ.log('Done') >>>> >>>>> >> >> >> >>>> >>> >>>> >>>>> >> >> >> >>>> >>> It fails with this error: >>>> >>>>> >> >> >> >>>> >>> >>>> >>>>> >> >> >> >>>> >>> Traceback (most recent call last): >>>> >>>>> >> >> >> >>>> >>> File >>>> >>>>> >> >> >> >>>> >>> >>>> >>>>> >> >> >> >>>> >>> "/home/hadim/local/Fiji.app/plugins/Crop_Multi_Roi.py", >>>> >>>>> >> >> >> >>>> >>> line >>>> >>>>> >> >> >> >>>> >>> 49, in <module> >>>> >>>>> >> >> >> >>>> >>> saver.saveImg(crop_basename, imp) >>>> >>>>> >> >> >> >>>> >>> TypeError: saveImg(): 1st arg can't be coerced to >>>> >>>>> >> >> >> >>>> >>> io.scif.Writer, >>>> >>>>> >> >> >> >>>> >>> String >>>> >>>>> >> >> >> >>>> >>> >>>> >>>>> >> >> >> >>>> >>> at org.python.core.Py.TypeError(Py.java:235) >>>> >>>>> >> >> >> >>>> >>> at >>>> >>>>> >> >> >> >>>> >>> >>>> >>>>> >> >> >> >>>> >>> >>>> >>>>> >> >> >> >>>> >>> >>>> >>>>> >> >> >> >>>> >>> >>>> >>>>> >> >> >> >>>> >>> >>>> >>>>> >> >> >> >>>> >>> >>>> >>>>> >> >> >> >>>> >>> org.python.core.PyReflectedFunction.throwError(PyReflectedFunction.java:209) >>>> >>>>> >> >> >> >>>> >>> at >>>> >>>>> >> >> >> >>>> >>> >>>> >>>>> >> >> >> >>>> >>> >>>> >>>>> >> >> >> >>>> >>> >>>> >>>>> >> >> >> >>>> >>> >>>> >>>>> >> >> >> >>>> >>> >>>> >>>>> >> >> >> >>>> >>> >>>> >>>>> >> >> >> >>>> >>> org.python.core.PyReflectedFunction.throwBadArgError(PyReflectedFunction.java:312) >>>> >>>>> >> >> >> >>>> >>> at >>>> >>>>> >> >> >> >>>> >>> >>>> >>>>> >> >> >> >>>> >>> >>>> >>>>> >> >> >> >>>> >>> >>>> >>>>> >> >> >> >>>> >>> >>>> >>>>> >> >> >> >>>> >>> >>>> >>>>> >> >> >> >>>> >>> >>>> >>>>> >> >> >> >>>> >>> org.python.core.PyReflectedFunction.throwError(PyReflectedFunction.java:321) >>>> >>>>> >> >> >> >>>> >>> at >>>> >>>>> >> >> >> >>>> >>> >>>> >>>>> >> >> >> >>>> >>> >>>> >>>>> >> >> >> >>>> >>> >>>> >>>>> >> >> >> >>>> >>> >>>> >>>>> >> >> >> >>>> >>> >>>> >>>>> >> >> >> >>>> >>> >>>> >>>>> >> >> >> >>>> >>> org.python.core.PyReflectedFunction.__call__(PyReflectedFunction.java:167) >>>> >>>>> >> >> >> >>>> >>> at >>>> >>>>> >> >> >> >>>> >>> >>>> >>>>> >> >> >> >>>> >>> >>>> >>>>> >> >> >> >>>> >>> >>>> >>>>> >> >> >> >>>> >>> >>>> >>>>> >> >> >> >>>> >>> >>>> >>>>> >> >> >> >>>> >>> >>>> >>>>> >> >> >> >>>> >>> org.python.core.PyReflectedFunction.__call__(PyReflectedFunction.java:204) >>>> >>>>> >> >> >> >>>> >>> at >>>> >>>>> >> >> >> >>>> >>> org.python.core.PyObject.__call__(PyObject.java:422) >>>> >>>>> >> >> >> >>>> >>> at >>>> >>>>> >> >> >> >>>> >>> org.python.core.PyObject.__call__(PyObject.java:426) >>>> >>>>> >> >> >> >>>> >>> at >>>> >>>>> >> >> >> >>>> >>> org.python.core.PyMethod.__call__(PyMethod.java:139) >>>> >>>>> >> >> >> >>>> >>> at >>>> >>>>> >> >> >> >>>> >>> >>>> >>>>> >> >> >> >>>> >>> >>>> >>>>> >> >> >> >>>> >>> >>>> >>>>> >> >> >> >>>> >>> >>>> >>>>> >> >> >> >>>> >>> >>>> >>>>> >> >> >> >>>> >>> >>>> >>>>> >> >> >> >>>> >>> org.python.pycode._pyx7.f$0(/home/hadim/local/Fiji.app/plugins/Crop_Multi_Roi.py:51) >>>> >>>>> >> >> >> >>>> >>> at >>>> >>>>> >> >> >> >>>> >>> >>>> >>>>> >> >> >> >>>> >>> >>>> >>>>> >> >> >> >>>> >>> >>>> >>>>> >> >> >> >>>> >>> >>>> >>>>> >> >> >> >>>> >>> >>>> >>>>> >> >> >> >>>> >>> >>>> >>>>> >> >> >> >>>> >>> org.python.pycode._pyx7.call_function(/home/hadim/local/Fiji.app/plugins/Crop_Multi_Roi.py) >>>> >>>>> >> >> >> >>>> >>> at >>>> >>>>> >> >> >> >>>> >>> >>>> >>>>> >> >> >> >>>> >>> org.python.core.PyTableCode.call(PyTableCode.java:165) >>>> >>>>> >> >> >> >>>> >>> at org.python.core.PyCode.call(PyCode.java:18) >>>> >>>>> >> >> >> >>>> >>> at org.python.core.Py.runCode(Py.java:1275) >>>> >>>>> >> >> >> >>>> >>> at >>>> >>>>> >> >> >> >>>> >>> >>>> >>>>> >> >> >> >>>> >>> >>>> >>>>> >> >> >> >>>> >>> >>>> >>>>> >> >> >> >>>> >>> >>>> >>>>> >> >> >> >>>> >>> >>>> >>>>> >> >> >> >>>> >>> >>>> >>>>> >> >> >> >>>> >>> org.scijava.plugins.scripting.jython.JythonScriptEngine.eval(JythonScriptEngine.java:76) >>>> >>>>> >> >> >> >>>> >>> at >>>> >>>>> >> >> >> >>>> >>> >>>> >>>>> >> >> >> >>>> >>> >>>> >>>>> >> >> >> >>>> >>> org.scijava.script.ScriptModule.run(ScriptModule.java:175) >>>> >>>>> >> >> >> >>>> >>> at >>>> >>>>> >> >> >> >>>> >>> >>>> >>>>> >> >> >> >>>> >>> >>>> >>>>> >> >> >> >>>> >>> org.scijava.module.ModuleRunner.run(ModuleRunner.java:167) >>>> >>>>> >> >> >> >>>> >>> at >>>> >>>>> >> >> >> >>>> >>> >>>> >>>>> >> >> >> >>>> >>> >>>> >>>>> >> >> >> >>>> >>> org.scijava.module.ModuleRunner.call(ModuleRunner.java:126) >>>> >>>>> >> >> >> >>>> >>> at >>>> >>>>> >> >> >> >>>> >>> >>>> >>>>> >> >> >> >>>> >>> >>>> >>>>> >> >> >> >>>> >>> org.scijava.module.ModuleRunner.call(ModuleRunner.java:65) >>>> >>>>> >> >> >> >>>> >>> at >>>> >>>>> >> >> >> >>>> >>> >>>> >>>>> >> >> >> >>>> >>> >>>> >>>>> >> >> >> >>>> >>> >>>> >>>>> >> >> >> >>>> >>> >>>> >>>>> >> >> >> >>>> >>> >>>> >>>>> >> >> >> >>>> >>> >>>> >>>>> >> >> >> >>>> >>> org.scijava.thread.DefaultThreadService$2.call(DefaultThreadService.java:164) >>>> >>>>> >> >> >> >>>> >>> at >>>> >>>>> >> >> >> >>>> >>> >>>> >>>>> >> >> >> >>>> >>> java.util.concurrent.FutureTask.run(FutureTask.java:262) >>>> >>>>> >> >> >> >>>> >>> at >>>> >>>>> >> >> >> >>>> >>> >>>> >>>>> >> >> >> >>>> >>> >>>> >>>>> >> >> >> >>>> >>> >>>> >>>>> >> >> >> >>>> >>> >>>> >>>>> >> >> >> >>>> >>> >>>> >>>>> >> >> >> >>>> >>> >>>> >>>>> >> >> >> >>>> >>> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) >>>> >>>>> >> >> >> >>>> >>> at >>>> >>>>> >> >> >> >>>> >>> >>>> >>>>> >> >> >> >>>> >>> >>>> >>>>> >> >> >> >>>> >>> >>>> >>>>> >> >> >> >>>> >>> >>>> >>>>> >> >> >> >>>> >>> >>>> >>>>> >> >> >> >>>> >>> >>>> >>>>> >> >> >> >>>> >>> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) >>>> >>>>> >> >> >> >>>> >>> at java.lang.Thread.run(Thread.java:745) >>>> >>>>> >> >> >> >>>> >>> >>>> >>>>> >> >> >> >>>> >>> Three questions: >>>> >>>>> >> >> >> >>>> >>> >>>> >>>>> >> >> >> >>>> >>> how can I write cropped image (I need to write >>>> >>>>> >> >> >> >>>> >>> them as >>>> >>>>> >> >> >> >>>> >>> OME >>>> >>>>> >> >> >> >>>> >>> Tiff >>>> >>>>> >> >> >> >>>> >>> so I >>>> >>>>> >> >> >> >>>> >>> need BF or SCIFIO). >>>> >>>>> >> >> >> >>>> >>> Is there is any “easy” alternative to BF >>>> >>>>> >> >> >> >>>> >>> setCropRegion >>>> >>>>> >> >> >> >>>> >>> function >>>> >>>>> >> >> >> >>>> >>> in >>>> >>>>> >> >> >> >>>> >>> SCIFIO >>>> >>>>> >> >> >> >>>> >>> ? >>>> >>>>> >> >> >> >>>> >>> I am currently using >>>> >>>>> >> >> >> >>>> >>> RoiManager.getInstance().getRoisAsArray() >>>> >>>>> >> >> >> >>>> >>> to >>>> >>>>> >> >> >> >>>> >>> retrieve all rois. How can I directly get a >>>> >>>>> >> >> >> >>>> >>> ROIManager >>>> >>>>> >> >> >> >>>> >>> instance >>>> >>>>> >> >> >> >>>> >>> from >>>> >>>>> >> >> >> >>>> >>> RoiSet.zip file ? >>>> >>>>> >> >> >> >>>> >>> >>>> >>>>> >> >> >> >>>> >>> Any help would be very appreciated. >>>> >>>>> >> >> >> >>>> >>> >>>> >>>>> >> >> >> >>>> >>> Thanks ! >>>> >>>>> >> >> >> >>>> >>> >>>> >>>>> >> >> >> >>>> >>> — >>>> >>>>> >> >> >> >>>> >>> Hadrien Mary >>>> >>>>> >> >> >> >>>> >>> >>>> >>>>> >> >> >> >>>> >>> _______________________________________________ >>>> >>>>> >> >> >> >>>> >>> ImageJ-devel mailing list >>>> >>>>> >> >> >> >>>> >>> ImageJ-devel@imagej.net >>>> >>>>> >> >> >> >>>> >>> http://imagej.net/mailman/listinfo/imagej-devel >>>> >>>>> >> >> >> >>>> >> >>>> >>>>> >> >> >> >>>> >> >>>> >>>>> >> >> >> >>> >>>> >>>>> >> >> >> >>> >>>> >>>>> >> >> >> >>>> >>>>> >> >> >> _______________________________________________ >>>> >>>>> >> >> >> ImageJ-devel mailing list >>>> >>>>> >> >> >> ImageJ-devel@imagej.net >>>> >>>>> >> >> >> http://imagej.net/mailman/listinfo/imagej-devel >>>> >>>>> >> >> > >>>> >>>>> >> >> > >>>> >>>>> >> > >>>> >>>>> >> > >>>> >>>>> > >>>> >>>>> > >>>> >>>> >>>> >>>> >>> >>> _______________________________________________ ImageJ-devel mailing list ImageJ-devel@imagej.net http://imagej.net/mailman/listinfo/imagej-devel