[ITK] [ITK-users] get outputs from a std::vector list of smart-pointers of image-filters
Dženan Zukić
dzenanz at gmail.com
Mon Sep 12 11:41:27 EDT 2016
Hi Roman,
can you turn
smoother->SetInput(savedPointers[i]->GetOutput());
into
if (i==0)
smoother->SetInput(static_cast<CastFilterType::Pointer>(savedPointers[i])->GetOutput());
else
smoother->SetInput(static_cast<GaussianFilterType::Pointer>(savedPointers[i])->GetOutput());
or something similar and see whether that works?
Regards,
Dženan
On Mon, Sep 12, 2016 at 5:41 AM, Grothausmann, Roman Dr. <
grothausmann.roman at mh-hannover.de> wrote:
> On 09/09/16 16:21, Dženan Zukić wrote:
>
>> Hi Roman,
>>
>> you should not save the pointer the SmartPointer encapsulates, but rather
>> the
>> SmartPointer itself. The saving line of code should not be
>> savedPointers.push_back(caster.GetPointer());
>> but rather
>> savedPointers.push_back(caster);
>> and later usage should not be
>> smoother->SetInput(dynamic_cast<ISType*>(savedPointers[i].
>> GetPointer())->GetOutput());
>> but rather
>> smoother->SetInput(savedPointers[i]->GetOutput());
>>
>
> Many thanks Dženan for Your reply. I tried as You suggested:
>
> https://github.com/romangrothausmann/ITK-CLIs/commit/b00551f
> af951192f50e4090d683300524b4c95ba
>
> but am getting:
>
> resample.cxx:79:49: error: no matching function for call to
> ?itk::ProcessObject::GetOutput()?
> smoother->SetInput(savedPointers[i]->GetOutput());
> ^
> resample.cxx:79:49: note: candidates are:
> In file included from resample.cxx:5:
> /opt/itk-4.9.1/include/ITK-4.9/itkProcessObject.h:612:16: note:
> itk::DataObject* itk::ProcessObject::GetOutput(const
> DataObjectIdentifierType&)
> DataObject * GetOutput(const DataObjectIdentifierType & key);
> ^
>
> I also tried:
> std::vector<itk::ProcessObject> savedPointers;
> std::vector<itk::ISType> savedPointers;
> std::vector< itk::SmartPointer<itk::ProcessObject> > savedPointers;
> but always got compile errors.
> I am confused when to use the smart-pointer as is and when with
> .GetPointer().
>
> According to
>
> https://cmake.org/pipermail/insight-users/2007-May/022374.html
>
> I also tried storing the output-pointers (without pipe-line disconnection)
> in a separate list
>
> https://github.com/romangrothausmann/ITK-CLIs/commit/d9b5c3f
> 1a786b595255a9153da9ceafd88d2a189
>
> which does not compile either:
>
> resample.cxx:77:5: error: request for member ?GetPointer? in
> ?caster.itk::SmartPointer<TObjectType>::operator-><itk::CastImageFilter<itk::Image<float,
> 1u>, itk::Image<float, 1u> > >()->itk::CastImageFilter<itk::Image<float,
> 1u>, itk::Image<float, 1u> >::<anonymous>.itk::UnaryFunct
> orImageFilter<itk::Image<float, 1u>, itk::Image<float, 1u>,
> itk::Functor::Cast<float, float> >::<anonymous>.itk::InPlaceImageFilter<itk::Image<float,
> 1u>, itk::Image<float, 1u> >::<anonymous>.itk::ImageToImageFilter<itk::Image<float,
> 1u>, itk::Image<float, 1u> >::<anonymous>.itk::ImageSourc
> e<TOutputImage>::GetOutput<itk::Image<float, 1u> >()?, which is of
> pointer type ?itk::ImageSource<itk::Image<float, 1u> >::OutputImageType*
> {aka itk::Image<float, 1u>*}? (maybe you meant to use ?->? ?)
> savedOutPointers.push_back(caster->GetOutput().GetPointer());
> ^
>
> I'm wondering if construct as needed is not possible at all because I
> can't find anything like that in the ITK-sources or examples. For the code
> snippets I can find in the MLs it is not clear whether they got tested and
> were accepted by a compiler.
>
> Any further ideas?
>
> Best
> Roman
>
>
> On Fri, Sep 9, 2016 at 8:29 AM, Grothausmann, Roman Dr.
>> <grothausmann.roman at mh-hannover.de <mailto:grothausmann.roman at mh-
>> hannover.de>>
>> wrote:
>>
>> On 22/07/16 14:49, Lowekamp, Bradley (NIH/NLM/LHC) [C] wrote:
>>
>> Hi,
>>
>> Who is holding the pointer to the newly created ImageFileReader
>> outside of
>> the loop? For that type of operation I’ll frequently just stash
>> smart
>> pointers into a std::vector or list.
>>
>>
>> I tried to change the resample example
>> (https://itk.org/Doxygen/html/Examples_2Filtering_2ResampleV
>> olumesToBeIsotropic_8cxx-example.html
>> <https://itk.org/Doxygen/html/Examples_2Filtering_2ResampleV
>> olumesToBeIsotropic_8cxx-example.html>
>> that uses itkRecursiveGaussianImageFilter for each dimension) such
>> that it works
>> for any dimensional image.
>> Doing as Brad suggested and storing each smart-pointer of
>> itkRecursiveGaussianImageFilter in a std::vector I get a program
>> (https://github.com/romangrothausmann/ITK-CLIs/blob/0968dd25
>> af2abc37ffb0c0503cc4c2972b3b2098/resample.cxx
>> <https://github.com/romangrothausmann/ITK-CLIs/blob/0968dd25
>> af2abc37ffb0c0503cc4c2972b3b2098/resample.cxx>)
>> that compiles but segfaults when used. I guess the way I'm trying to
>> dereference a pointer from the list is not correct
>> (https://github.com/romangrothausmann/ITK-CLIs/commit/0968dd
>> 25af2abc37ffb0c0503cc4c2972b3b2098#diff-cb1b1c6837c6074372c2
>> 20250cfdbb36R80
>> <https://github.com/romangrothausmann/ITK-CLIs/commit/0968dd
>> 25af2abc37ffb0c0503cc4c2972b3b2098#diff-cb1b1c6837c6074372c2
>> 20250cfdbb36R80>)
>> but I could not find an example except the one referenced in the code
>> line.
>> So how to correctly dereference a pointer from the list of
>> smart-pointers to
>> get its output?
>>
>> Thank for any help or hints
>> Roman
>>
>> On Jul 22, 2016, at 6:00 AM, Grothausmann, Roman Dr.
>> <grothausmann.roman at mh-hannover.de
>> <mailto:grothausmann.roman at mh-hannover.de>> wrote:
>>
>> Many thanks Brad for Your detailed reply. I understand now
>> the problems
>> concerning streaming TileImageFilter. However I still wonder
>> why my
>> non-streaming version also does not work any more after
>> moving the
>> creation
>> of reader instances into the for-loop:
>> https://github.com/romangrothausmann/ITK-CLIs/blob/ebfc0aea3
>> 7d28cbbf2bb22c3f56be52453cebde9/tile.cxx#L46-L50
>> <https://github.com/romangrothausmann/ITK-CLIs/blob/ebfc0aea
>> 37d28cbbf2bb22c3f56be52453cebde9/tile.cxx#L46-L50>
>>
>>
>>
>> Is this construct inappropriate for the TileImageFilter?
>>
>> Why does it work for:
>> https://itk.org/Doxygen/html/SphinxExamples_2src_2Filtering_
>> 2ImageGrid_2AppendTwo3DVolumes_2Code_8cxx-example.html#_a2
>> <https://itk.org/Doxygen/html/SphinxExamples_2src_2Filtering
>> _2ImageGrid_2AppendTwo3DVolumes_2Code_8cxx-example.html#_a2>
>>
>>
>>
>> On 21/07/16 15:41, Lowekamp, Bradley (NIH/NLM/LHC) [C] wrote:
>>
>> 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/itkTileImageFilte
>> r.hxx#L125-L136
>> <https://github.com/InsightSoftwareConsortium/ITK/blob/
>> master/Modules/Filtering/ImageGrid/include/itkTileImageFilte
>> r.hxx#L125-L136>
>>
>>
>>
>>
>> [2] https://itk.org/Doxygen/html/classitk_1_1PipelineMonitorImag
>> eFilter.html
>> <https://itk.org/Doxygen/html/classitk_1_1PipelineMonitorIma
>> geFilter.html>
>>
>>
>> On Jul 21, 2016, at 6:41 AM, Grothausmann, Roman Dr.
>> <grothausmann.roman at mh-hannover.de
>> <mailto: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/romangroth
>> ausmann/ITK-CLIs/blob/4fdf5778022598dcf83fb38e6002df72bd67bef3/tile.cxx
>> <https://github.com/romangroth
>> ausmann/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
>> <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/romangrotha
>> usmann/ITK-CLIs/commit/ebfc0aea37d28cbbf2bb22c3f56be52453cebde9
>> <https://github.com/romangroth
>> ausmann/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 <tel:%2B49%20511%20532-2900>
>> _____________________________________ Powered by
>> www.kitware.com <http://www.kitware.com>
>>
>> Visit other Kitware open-source projects at
>> http://www.kitware.com/opensource/opensource.html
>> <http://www.kitware.com/opensource/opensource.html>
>>
>> Kitware offers ITK Training Courses, for more
>> information visit:
>> http://www.kitware.com/products/protraining.php
>> <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
>> <http://www.itk.org/Wiki/ITK_FAQ>
>>
>> Follow this link to subscribe/unsubscribe:
>> http://public.kitware.com/mail
>> man/listinfo/insight-users
>> <http://public.kitware.com/mai
>> lman/listinfo/insight-users>
>> _______________________________________________
>> Community
>> mailing list
>> Community at itk.org <mailto:Community at itk.org>
>> http://public.kitware.com/mailman/listinfo/community
>> <http://public.kitware.com/mailman/listinfo/community
>> >
>>
>>
>>
>> -- 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 <tel:%2B49%20511%20532-2900>
>>
>>
>>
>> --
>> 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 <tel:%2B49%20511%20532-2900>
>> _____________________________________
>> Powered by www.kitware.com <http://www.kitware.com>
>>
>> Visit other Kitware open-source projects at
>> http://www.kitware.com/opensource/opensource.html
>> <http://www.kitware.com/opensource/opensource.html>
>>
>> Kitware offers ITK Training Courses, for more information visit:
>> http://www.kitware.com/products/protraining.php
>> <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 <http://www.itk.org/Wiki/ITK_FAQ>
>>
>> Follow this link to subscribe/unsubscribe:
>> http://public.kitware.com/mailman/listinfo/insight-users
>> <http://public.kitware.com/mailman/listinfo/insight-users>
>>
>>
>>
> --
> 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
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/community/attachments/20160912/7e224792/attachment-0001.html>
-------------- next part --------------
_____________________________________
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