[ImageJ-devel] [ImgLib2] The img-metadata branch

Brian Northan bnorthan at gmail.com
Thu Dec 12 08:23:48 CST 2013


Hi Curtis

I was testing out the ImgSaver updates and seem to be having trouble saving
a 32 bit float image.  At some point in the chain the format seems to be
getting set to 32 bit unsigned int.

Not sure if I am doing something wrong... basically my code looks exactly
like your example.  I did step through the scifio code a bit and was
looking at the translation steps for the meta data.  In TiffFormat.java,
"typedTranslate" the format gets set to either 2 or 1 depending on whether
it is signed...

firstIFD.putIFDValue(IFD.SAMPLE_FORMAT, FormatTools.isSigned(m
                .getPixelType()) ? 2 : 1);

In the next step where the translated meta data is set for the destination,
it seems to be looking for a sample format of 3 for float.  But the sample
format was set to 2 in the previous step...

final int bitFormat = getIFDIntValue(SAMPLE_FORMAT);
....
case 32:
                if (bitFormat == 3) return FormatTools.FLOAT;
                return bitFormat == 2 ? FormatTools.INT32 :
FormatTools.UINT32;

On first glance it would seem to me the SAMPLE_FORMAT should be set to 3
(for float) somehow in the typedTranslate function.   However I'm not
overly familiar with the code.

Brian



On Wed, Dec 4, 2013 at 4:57 PM, Curtis Rueden <ctrueden at wisc.edu> wrote:

> Hi Brian & everyone,
>
> > there is currently a bug in ImgSaver preventing things from working
> ...
> > We are working on a fix now and will reply back when the bug is
> > resolved.
>
> Just a quick update that ImgSaver of scifio-0.7.3 is working better. The
> following code now produces a multi-page TIFF as expected:
>
> --snip--
> import io.scif.SCIFIO;
> import io.scif.img.ImgOpener;
> import io.scif.img.ImgOptions;
> import io.scif.img.ImgOptions.ImgMode;
> import io.scif.img.ImgSaver;
> import net.imglib2.meta.ImgPlus;
>
> public class WriteAnImgPlus {
> public static void main(final String... args) throws Exception {
> final SCIFIO scifio = new SCIFIO();
>  final ImgOpener opener = new ImgOpener(scifio.getContext());
>
> // NB: ImgSaver only supports PlanarImg for now!
>  final ImgOptions options = new ImgOptions().setImgModes(ImgMode.PLANAR);
> final ImgPlus<?> imgPlus =
>  opener.openImg("stack&axes=X,Y,Z&lengths=128,128,10.fake", options);
>
> System.out.println("imgPlus = " + imgPlus);
>  System.out.println("numDimensions = " + imgPlus.numDimensions());
> for (int d=0; d<imgPlus.numDimensions(); d++) {
>  System.out.println("dim #" + d + " = " + imgPlus.dimension(d));
> System.out.println("axis #" + d + " = " + imgPlus.axis(d).type());
>  }
>
> final ImgSaver saver = new ImgSaver(scifio.getContext());
> saver.saveImg("stack.tif", (ImgPlus) imgPlus);
>  }
> }
> --snap--
>
> As of this writing, please note that you will only be able to save as
> OME-TIFF if you include the ome-formats library [1] plus dependencies on
> your classpath.
>
> Regards,
> Curtis
>
> [1] https://github.com/scifio/ome-formats
>
>
> On Thu, Oct 24, 2013 at 1:14 PM, Curtis Rueden <ctrueden at wisc.edu> wrote:
>
>> Hi Brian,
>>
>> Apologies for the long delay in reply. It is better to write to a public
>> mailing list. I am CCing imagej-devel.
>>
>> > Is the following code snippet still correct given recent changes??
>> >
>> > AxisType[] ax = new AxisType[3]; ax[0]=Axes.X; ax[1]=Axes.Y;
>> > ax[2]=Axes.Z;
>> >
>> > ImgPlus<T> imgPlus = new ImgPlus<T>(image, name, ax);
>>  >
>> > new ImgSaver().saveImg("name.ome.tif", imgPlus);
>>
>> Firstly, as an aside, please note that ImgSaver has moved from the
>> net.imglib2:imglib2-io project into io.scif:scifio core.
>>
>> But yes, the above code is still supposed to work.
>>
>> However, in practice there is currently a bug in ImgSaver preventing
>> things from working correctly.
>>
>> Here is a complete (non-)working example:
>> https://gist.github.com/ctrueden/6234396
>>
>> We are working on a fix now and will reply back when the bug is resolved.
>>
>> Regards,
>> Curtis
>>
>>
>> On Tue, Aug 13, 2013 at 5:21 AM, Brian Northan <bnorthan at gmail.com>wrote:
>>
>>> Hi Curtis
>>>
>>> So after updating imglib this morning I now get lots of errors.  Which
>>> is expected after your changes.  So I suspect after I sort through them and
>>> rework my code for the changes that saving the axis types will work again.
>>>
>>> But one other quick question.  Is the ImageJ2 scripting ready for use??
>>> I looked at it a bit a while ago but it didn't seem quite ready.   I have a
>>> series of commands I call, so temporarily I just use a bash script calling
>>> Imagej2 in headless mode, with a utility I wrote to parse command name and
>>> parameters.   Eventually I will switch to the ImageJ scripting...  is it
>>> usable yet or should I wait a few more months?
>>>
>>> Thanks, this stuff is really great.
>>>
>>> Brian
>>>
>>> On Tue, Aug 13, 2013 at 4:46 AM, Brian Northan <bnorthan at gmail.com>wrote:
>>>
>>>> Hi Curtis
>>>>
>>>> I have some simple code to wrap an 3D Img<T> as an ImgPlus, define the
>>>> axis as x,y and z and then save it.  Up until a week or so ago it seemed to
>>>> work fine.  But now when I read back the image it come in as x, y, t.   Is
>>>> the following code snippet still correct given recent changes??   Thanks-
>>>> Brian
>>>>
>>>> AxisType[] ax = new AxisType[3];
>>>>         ax[0]=Axes.X;
>>>>         ax[1]=Axes.Y;
>>>>         ax[2]=Axes.Z;
>>>>
>>>> ImgPlus<T> imgPlus = new ImgPlus<T>(image, name, ax);
>>>>
>>>> new ImgSaver().saveImg("name.ome.tif", imgPlus);
>>>>
>>>>
>>>>
>>>> On Mon, Aug 12, 2013 at 1:39 PM, Curtis Rueden <ctrueden at wisc.edu>wrote:
>>>>
>>>>> Hi all,
>>>>>
>>>>> > I will merge the img-metadata branch to master on Thursday.
>>>>>
>>>>> Got a bit busy in the interim, but img-metadata is now merged to
>>>>> imglib.git's master branch:
>>>>>
>>>>>
>>>>> https://github.com/imagej/imglib/commit/e4e26aa05e0f42ff1a90e8c6d67235431471de44
>>>>>
>>>>>  The commit message gives a quick gist of the changes, including
>>>>> future directions.
>>>>>
>>>>> Please let me know of any questions or problems with it!
>>>>>
>>>>> Regards,
>>>>> Curtis
>>>>>
>>>>>
>>>>> On Tue, Jul 30, 2013 at 10:28 AM, Curtis Rueden <ctrueden at wisc.edu>wrote:
>>>>>
>>>>>> Hi all, and especially ImgLib2 developers,
>>>>>>
>>>>>> At the ImgLib2 hackathon this past May, I started work on a branch to
>>>>>> make it easier to attach per-axis metadata to N-dimensional spaces. I think
>>>>>> this branch is finally in a merge-worthy state.
>>>>>>
>>>>>> It introduces an AnnotatedSpace extension to EuclideanSpace which
>>>>>> lets you attach on Axis per dimension. It defines TypedSpace, which
>>>>>> declares an AxisType for each Axis, as well as a CalibratedSpace, which in
>>>>>> addition adds a calibration value and optional unit name to the mix.
>>>>>>
>>>>>> This approach is much more flexible than the previous
>>>>>> CalibratedSpace, which has been renamed to OldCalibratedSpace and
>>>>>> deprecated until we can fully transition all the code away from it. In
>>>>>> particular, having the axes attached to the space directly will allows
>>>>>> Views to maintain the axis metadata without much additional work.
>>>>>>
>>>>>> Note that these new classes are defined in the net.imglib2.meta
>>>>>> component, which was split into a separate module called imglib2-meta. The
>>>>>> ImgPlus class moved there, too (it should have been there all along). So
>>>>>> merging this branch will cause some code breakage, but all should be
>>>>>> straightforward to fix: rename usages of CalibratedSpace to
>>>>>> OldCalibratedSpace, and rename the ImgPlus package from net.imglib2.img to
>>>>>> net.imglib2.meta.
>>>>>>
>>>>>> Going forward, we can also add a CalibratedViews class to the
>>>>>> net.imglib2.meta package which has some additional features such as
>>>>>> exposing resampled Imgs from a source CalibratedSpace into a target one
>>>>>> based on the units used. We can lean on a units library for this, as we
>>>>>> have discussed in the past.
>>>>>>
>>>>>> If interested, you can browse the branch at:
>>>>>> https://github.com/imagej/imglib/compare/img-metadata
>>>>>>
>>>>>> If no one objects, I will merge the img-metadata branch to master on
>>>>>> Thursday.
>>>>>>
>>>>>> Regards,
>>>>>> Curtis
>>>>>>
>>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> ImageJ-devel mailing list
>>>>> ImageJ-devel at imagej.net
>>>>> http://imagej.net/mailman/listinfo/imagej-devel
>>>>>
>>>>>
>>>>
>>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://imagej.net/pipermail/imagej-devel/attachments/20131212/283f7c15/attachment.html>


More information about the ImageJ-devel mailing list