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