[ome-users] bioformats and ITK

Kishore Mosaliganti kishoreraom at gmail.com
Tue Oct 16 19:37:54 BST 2012


Dear Mark,

Thanks for the clarification. My original problem remains unresolved. For
example, in the LSM gist on lines 104-107:

    ReaderType::Pointer reader = ReaderType::New();
    reader->SetFileName(argv[1]);
    reader->SetImageIO(io);

    reader->Update();


Here, calling reader->Update() loads the entire image into memory. If you
have a very large LSM file (several gigabytes large), then this code will
fail since such an image cannot get into the memory.

Hence, I am trying to send the read region directly into the reader using

io->SetRegion(region);

and then

reader->SetImageIO(io);
reader->Update();


But this step is not giving me two different timepoints. It is writing out
the same timepoint.

Kishore





On Tue, Oct 16, 2012 at 2:13 PM, Mark Hiner <hiner at wisc.edu> wrote:

> Hello again,
>
>  I created a gist for your LSM test and updated it with my most recent
> code:
> https://gist.github.com/3900888
>
>  That example is currently working for me, in that it writes out 2 images
> of 72 planes - one for T=0 and one for T=1. Since everything in ITK seems
> to be pipeline-oriented, I am not sure there is a solution to splitting out
> channels just using Setters like we were both trying.
>
>  Instead, I followed this ROI Filter example<http://www.vtk.org/Wiki/ITK/Examples/ImageProcessing/RegionOfInterestImageFilter>and used the logic from my last e-mail.
>
>  I do need to correct one thing I said in my last e-mail: SizeT should
> always be 1, as it is a relative offset to the Index value.
>
>  When I ran that test, both images went to grayscale.. I'm going to see if
> that's an error in the bf-itk-pipes logic, or just something that needs to
> be set up differently in using the ITK API.
>
>  Let me know if you run into any more problems with this code, or if you
> just want to discuss any part of it.
>
> Thanks again for using our software :)
> - Mark
>
>
> On Tue, Oct 16, 2012 at 11:00 AM, Mark Hiner <hiner at wisc.edu> wrote:
>
>> Hi Kishore,
>>
>>  I am sorry I wasn't able to get to your issue yesterday. Looking at it
>> today, I think there are a couple of things going on here.
>>
>>  First of all: in your test class
>> - I consolidated a BioFormatsImageIO and the ImageIOBase.
>> - In the region updating loop, the wrong region (dim-3 instead of dim-2)
>> was being set, and only the index is set. I suspect both the index and size
>> need to be set.
>>
>>  I attached an updated version of your test, where in the first iteration
>> it sets IndexT = 0, sizeT = 1. The second iteration sets IndexT = 1, sizeT
>> = 2.  I believe those regions will split the time points as you wanted.
>>
>> But there is a second issue: although the Reader IORegion is correct (I
>> think) the Writer is not. It is defaulting to the ITK base 3D region. When
>> I tried setting the Writer's region to our desired region, it throws an
>> exception because the 5D region can't be contained by what it thinks is the
>> largest possible (3D) region. I am refreshing myself on the ITK API and
>> once we figure out how to set that region, I think it will write the images
>> correctly (or we can move on to the next problem).
>>
>> In your test I changed the output format to ome.tiff because I know that
>> will use the itkBioFormatsImageIO writer code, which I know is capable of
>> handling 5D writing.
>>
>> Also, in testing I found a couple of bugs in the ITKPipesBridge code. I
>> started a new branch to fix these and any other issues that may be
>> discovered. If you want to use the itkBioFormatsImageIO writer code you'll
>> have to use this new branch for now. You can find it here:
>> https://github.com/hinerm/bioformats/commits/bf-itk-fixes
>>
>> As always, let me know if this isn't fully addressing your issue.
>> Otherwise, I'll let you know as soon as I have the Writer region setting
>> properly.
>>
>> Thanks!
>> - Mark
>>
>>
>> On Fri, Oct 12, 2012 at 11:28 AM, Kishore Mosaliganti <
>> kishoreraom at gmail.com> wrote:
>>
>>> Hi Mark,
>>>
>>> Thank you for the email and invaluable help. The bioformats-itk plugin
>>> is wonderful. I am attaching my script here to help you debug. Let me know
>>> if you have any questions on my script. I am starting with a 5D (XYZTC)
>>> image and trying to write out all the 3D timepoints for the first channel.
>>>
>>> Kishore
>>>
>>>
>>> On Fri, Oct 12, 2012 at 12:19 PM, Mark Hiner <hinerm at gmail.com> wrote:
>>>
>>>> Hi Kishore,
>>>>
>>>>  I helped develop the bf-itk-pipe plugin and am investigating your
>>>> issue right now.
>>>>
>>>>  What you're doing seems reasonable, so I'm trying to determine if
>>>> there's a bug in the plugin. My goal is to have some working example code
>>>> for you (and a fix if necessary) by the end of the day.
>>>>
>>>> Thank you for using our plugin! I hope we can get it working for you
>>>> soon.
>>>>
>>>> - Mark
>>>>
>>>> On Fri, Oct 12, 2012 at 10:54 AM, Kishore Mosaliganti <
>>>> kishoreraom at gmail.com> wrote:
>>>>
>>>>> Dear ITK and OME users,
>>>>>
>>>>> To further elaborate, I figured that this has nothing to do with the
>>>>> itkStreamingImageFilter.
>>>>>
>>>>> Instead, the itkImageFileReader seems to be extracting the same image
>>>>> region although I update the requested region in the BioformatsImageIO
>>>>> class :;
>>>>>
>>>>>     itk::BioFormatsImageIO::Pointer io = itk::BioFormatsImageIO::New();
>>>>>     io->SetIORegion( region ); // doesn't make a difference in terms
>>>>> of image data extracted. Its always from the beginning.
>>>>>
>>>>>     ReaderType::Pointer reader = ReaderType::New();
>>>>>     reader->SetFileName(argv[1]);
>>>>>     reader->SetImageIO(io);
>>>>>     reader->Update();
>>>>>
>>>>> So, my general question is whether the BioformatsImageIO expects the
>>>>> whole LSM image to be loaded into memory before writing it out? I would
>>>>> like to specify small image regions since my LSM is too large to be fully
>>>>> loaded into memory. How else can I stream data from large LSM?
>>>>>
>>>>> Thanks,
>>>>>
>>>>> Kishore
>>>>>
>>>>>
>>>>> On Fri, Oct 12, 2012 at 8:53 AM, Kishore Mosaliganti <
>>>>> kishoreraom at gmail.com> wrote:
>>>>>
>>>>>> Hi all,
>>>>>>
>>>>>> I am trying to use bioformats and itk. I downloaded and compiled
>>>>>> bf-itk-pipe using cmake by linking against ITK 3.2:
>>>>>>
>>>>>>
>>>>>> https://github.com/openmicroscopy/bioformats/tree/develop/components/native/bf-itk-pipe
>>>>>>
>>>>>>
>>>>>> I tested out itkBFImageInfo and ./itkRGBBioFormatsImageIOTest on a
>>>>>> few simple LSM images. It works great and writes out all the associated
>>>>>> metadata and pixel data for the first timepoint.
>>>>>>
>>>>>> My LSM microscopy image is 5D. It is X-Y-Z-Time-Channel. I am
>>>>>> interested in extracting individual timepoints from the LSM file for
>>>>>> processing. The filter seems to be using itkStreamingImageFilter. I set the
>>>>>> NumberOfStreams to 10 but that still seems to still write out only the
>>>>>> first image.
>>>>>>
>>>>>> How do I set the output requestion region for an individual timepoint?
>>>>>>
>>>>>> Thank you,
>>>>>>
>>>>>> Kishore
>>>>>
>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> ome-users mailing list
>>>>> ome-users at lists.openmicroscopy.org.uk
>>>>> http://lists.openmicroscopy.org.uk/mailman/listinfo/ome-users
>>>>>
>>>>>
>>>>
>>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openmicroscopy.org.uk/pipermail/ome-users/attachments/20121016/501941c1/attachment.html>


More information about the ome-users mailing list