[ITK] [ITK-users] streaming TileImageFilter for arbitrary number of inputs

Lowekamp, Bradley (NIH/NLM/LHC) [C] blowekamp at mail.nih.gov
Thu Jul 21 09:41:20 EDT 2016


Hello,

The TileImageFilter does not fully stream [1]. The filter also has some odd behavior, and other older implementation details. If you are going to work on a streaming pipelines it is best practice to examine the filters to determine how the Requested regions behave.

However, there is no reason that the TileImageFilter algorithm couldn’t support streaming. It is just a matter of code and a bunch of testing. A contribution for this issue would be welcomed! Also this filter is in need a refactoring and bring it up to several other best practices. There are several issue with the current implementation that would cause it not to work correctly with a streaming pipeline, and cause excessive execution.

You can also use the PipelieMoniotorImageFilter to record and print the pipeline interaction during Update [2]. This information helps with debugging and diagnosing problems, but if the pipeline is mis-behaving ( as the TileImageFilter may ), the information may not be correct.

I have tried similar streaming with the JoinSeriesImageFilter. However I ran into many problems with having hundreds of ImageIO being utilized at the same time. There were problems with having too many files open at the same time along with ImageIO libraries that couldn’t handle single threaded access to multiple files.

[1] https://github.com/InsightSoftwareConsortium/ITK/blob/master/Modules/Filtering/ImageGrid/include/itkTileImageFilter.hxx#L125-L136
[2] https://itk.org/Doxygen/html/classitk_1_1PipelineMonitorImageFilter.html

> On Jul 21, 2016, at 6:41 AM, Grothausmann, Roman Dr. <grothausmann.roman at mh-hannover.de> wrote:
> 
> Dear mailing list members,
> 
> 
> Based on the examples for TileImageFilter I've created a working CLI to append an arbitrary number of inputs (https://github.com/romangrothausmann/ITK-CLIs/blob/4fdf5778022598dcf83fb38e6002df72bd67bef3/tile.cxx).
> As there is an example that does not apply Update and DisconnectPipeline on the readers (https://itk.org/Doxygen/html/SphinxExamples_2src_2Filtering_2ImageGrid_2AppendTwo3DVolumes_2Code_8cxx-example.html#_a2) 
> I changed my code such that a reader instance is created for each input in a for-loop:
> https://github.com/romangrothausmann/ITK-CLIs/commit/ebfc0aea37d28cbbf2bb22c3f56be52453cebde9
> 
> However, the update from the writer seems not to propagate to the readers whether streaming or not. Can the TileImageFilter not stream in such a case or are further modifications necessary?
> 
> Thanks for any help or hints
> Roman
> 
> 
> On 18/08/14 17:01, Michka Popoff wrote:
>> Hi
>> 
>> Going the way described in the CreateVolume example is the way to go.
>> 
>> Why did you uncomment the DisconnectPipeline() call and Update() call in the for
>> loop ? They need to stay there, else you will always use the last image.
>> That’s why you see the same image, the single update call will be triggered at
>> the end of the script and read only one image.
>> 
>> You don’t need to call tileFilter->Update(), you can remove this line. The
>> writer->Update() will take care of the pipeline update.
>> As a bonus, you may wrap your writer->Update() call, to fetch errors at the end
>> of the pipeline:
>> 
>> try
>> {
>> writer->Update();
>> }
>> catch( itk::ExceptionObject & error )
>> {
>> std::cerr << "Error: " << error << std::endl;
>> return EXIT_FAILURE;
>> }
>> 
>> I made a little Python prototype, the syntax is a little bit different than in
>> C++ but it gives you the main idea.
>> 
>> Michka
>> 
> 
> -- 
> Dr. Roman Grothausmann
> 
> Tomographie und Digitale Bildverarbeitung
> Tomography and Digital Image Analysis
> 
> Institut für Funktionelle und Angewandte Anatomie, OE 4120
> Medizinische Hochschule Hannover
> Carl-Neuberg-Str. 1
> D-30625 Hannover
> 
> Tel. +49 511 532-2900
> _____________________________________
> Powered by www.kitware.com
> 
> Visit other Kitware open-source projects at
> http://www.kitware.com/opensource/opensource.html
> 
> Kitware offers ITK Training Courses, for more information visit:
> http://www.kitware.com/products/protraining.php
> 
> Please keep messages on-topic and check the ITK FAQ at:
> http://www.itk.org/Wiki/ITK_FAQ
> 
> Follow this link to subscribe/unsubscribe:
> http://public.kitware.com/mailman/listinfo/insight-users
> _______________________________________________
> Community mailing list
> Community at itk.org
> http://public.kitware.com/mailman/listinfo/community

_____________________________________
Powered by www.kitware.com

Visit other Kitware open-source projects at
http://www.kitware.com/opensource/opensource.html

Kitware offers ITK Training Courses, for more information visit:
http://www.kitware.com/products/protraining.php

Please keep messages on-topic and check the ITK FAQ at:
http://www.itk.org/Wiki/ITK_FAQ

Follow this link to subscribe/unsubscribe:
http://public.kitware.com/mailman/listinfo/insight-users


More information about the Community mailing list