[ITK-users] get outputs from a std::vector list of smart-pointers of image-filters

Dženan Zukić dzenanz at gmail.com
Fri Sep 16 10:12:33 EDT 2016


Something just occurred to me. Why not make your code like this:

define CastFilter cF;
define SmoothFilter s0
s0->SetInput(cF->GetOutput());
SmoothFilter::Pointer previous=s0;
for (int i=1 to Dim)
{
  define SmoothFilter sI
  sI->SetInput(previous->GetOutput());
  previous=sI;
}
output=sI->GetOutput();
output->Update(); //or writer->Update

My attempt at it is attached. This code seems to have other bugs besides
the for loop (this crashes for me with "access violation"). Also, your big
for loops seems to be implementing an already existing filter:
SmoothingRecursiveGaussianImageFilter
<https://itk.org/Doxygen/html/classitk_1_1SmoothingRecursiveGaussianImageFilter.html>
.

HTH,
Dženan

On Fri, Sep 16, 2016 at 9:49 AM, Dženan Zukić <dzenanz at gmail.com> wrote:

> Hi Roman,
>
> I tried some modifications of your second attempt
> <https://github.com/romangrothausmann/ITK-CLIs/blob/d9b5c3f1a786b595255a9153da9ceafd88d2a189/resample.cxx>,
> but couldn't get it to compile. But your code reminded me very much of
> BRAINSFit <https://github.com/BRAINSia/BRAINSTools/tree/master/BRAINSFit>,
> so you might take inspiration from that.
>
> I am sorry I could not be of more help.
>
> Dženan
>
> On Fri, Sep 16, 2016 at 7:42 AM, Grothausmann, Roman Dr. <
> grothausmann.roman at mh-hannover.de> wrote:
>
>> On 12/09/16 17:41, Dženan Zukić wrote:
>>
>>> can you turn
>>> smoother->SetInput(savedPointers[i]->GetOutput());
>>> into
>>> if (i==0)
>>>
>>> smoother->SetInput(static_cast<CastFilterType::Pointer>(save
>>> dPointers[i])->GetOutput());
>>> else
>>>
>>> smoother->SetInput(static_cast<GaussianFilterType::Pointer>(
>>> savedPointers[i])->GetOutput());
>>> or something similar and see whether that works?
>>>
>>
>> Did so,
>> https://github.com/romangrothausmann/ITK-CLIs/commit/2cd1fbe
>> 4406eccbd6552e88e8be0a0ab1aad4ba6
>> but still getting compile errors like:
>> resample.cxx:73:5: error: no matching function for call to
>> ?std::vector<itk::SmartPointer<itk::ProcessObject>
>> >::push_back(itk::CastImageFilter<itk::Image<float, 1u>,
>> itk::Image<float, 1u> >::Pointer&)?
>>      savedPointers.push_back(caster);
>>
>> and
>>
>> resample.cxx:80:25: error: invalid user-defined conversion from
>> ?itk::SmartPointer<itk::ProcessObject>? to ?itk::SmartPointer<itk::CastImageFilter<itk::Image<float,
>> 1u>, itk::Image<float, 1u> > >::ObjectType* {aka
>> itk::CastImageFilter<itk::Image<float, 1u>, itk::Image<float, 1u> >*}?
>> [-fpermissive]
>>       smoother->SetInput(static_cast<typename
>> CastFilterType::Pointer>(savedPointers[i])->GetOutput());
>>
>>
>>
>> I also tried Your suggestion on the .GetPointer() variant:
>> https://github.com/romangrothausmann/ITK-CLIs/commit/4a96d96
>> 2430461c0b26de9363a1ccf623b9c9840
>> which compiles but segfaults when executed.
>>
>>
>>
>> A third variant stores the Output SPs in a separate list:
>> https://github.com/romangrothausmann/ITK-CLIs/commit/d9b5c3f
>> 1a786b595255a9153da9ceafd88d2a189
>> but compilation stops with:
>> 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());
>>      ^
>>
>> Any other ideas how to get this working?
>>
>> Many thanks for looking into this.
>> Roman
>>
>>
>> On Mon, Sep 12, 2016 at 5:41 AM, Grothausmann, Roman Dr.
>>> <grothausmann.roman at mh-hannover.de <mailto: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].Ge
>>> tPointer())->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
>>>     <https://github.com/romangrothausmann/ITK-CLIs/commit/b00551
>>> faf951192f50e4090d683300524b4c95ba>
>>>
>>>     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
>>>     <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
>>>     <https://github.com/romangrothausmann/ITK-CLIs/commit/d9b5c3
>>> f1a786b595255a9153da9ceafd88d2a189>
>>>
>>>     which does not compile either:
>>>
>>>     resample.cxx:77:5: error: request for member ?GetPointer? in
>>>     ?caster.itk::SmartPointer<TObjectType>::operator-><itk::Cast
>>> ImageFilter<itk::Image<float,
>>>     1u>, itk::Image<float, 1u> > >()->itk::CastImageFilter<itk:
>>> :Image<float,
>>>     1u>, itk::Image<float, 1u>
>>>     >::<anonymous>.itk::UnaryFunctorImageFilter<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::ImageSource<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>
>>>         <mailto: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>
>>>
>>>         <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>
>>>
>>>         <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>
>>>
>>>         <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>
>>>                     <mailto: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>
>>>
>>>         <https://github.com/romangrothausmann/ITK-CLIs/blob/ebfc0aea
>>> 37d28cbbf2bb22c3f56be52453cebde9/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>
>>>
>>>         <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/itkTileImageFilter.hxx#L125-L136
>>>         <https://github.com/InsightSoftwareConsortium/ITK/blob/maste
>>> r/Modules/Filtering/ImageGrid/include/itkTileImageFilter.hxx#L125-L136>
>>>
>>>         <https://github.com/InsightSoftwareConsortium/ITK/blob/maste
>>> r/Modules/Filtering/ImageGrid/include/itkTileImageFilter.hxx#L125-L136
>>>         <https://github.com/InsightSoftwareConsortium/ITK/blob/maste
>>> r/Modules/Filtering/ImageGrid/include/itkTileImageFilter.hxx#L125-L136>>
>>>
>>>
>>>
>>>
>>>             [2]
>>>         https://itk.org/Doxygen/html/classitk_1_1PipelineMonitorImag
>>> eFilter.html
>>>         <https://itk.org/Doxygen/html/classitk_1_1PipelineMonitorIma
>>> geFilter.html>
>>>
>>>         <https://itk.org/Doxygen/html/classitk_1_1PipelineMonitorIma
>>> geFilter.html <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
>>>         <mailto:grothausmann.roman at mh-hannover.de>
>>>                             <mailto: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/romangrothausmann/ITK-CLIs/blob/4fdf5778
>>> 022598dcf83fb38e6002df72bd67bef3/tile.cxx
>>>         <https://github.com/romangrothausmann/ITK-CLIs/blob/4fdf5778
>>> 022598dcf83fb38e6002df72bd67bef3/tile.cxx>
>>>
>>>         <https://github.com/romangrothausmann/ITK-CLIs/blob/4fdf5778
>>> 022598dcf83fb38e6002df72bd67bef3/tile.cxx
>>>         <https://github.com/romangrothausmann/ITK-CLIs/blob/4fdf5778
>>> 022598dcf83fb38e6002df72bd67bef3/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>
>>>
>>>         <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/romangrothausmann/ITK-CLIs/commit/ebfc0ae
>>> a37d28cbbf2bb22c3f56be52453cebde9
>>>         <https://github.com/romangrothausmann/ITK-CLIs/commit/ebfc0a
>>> ea37d28cbbf2bb22c3f56be52453cebde9>
>>>
>>>         <https://github.com/romangrothausmann/ITK-CLIs/commit/ebfc0a
>>> ea37d28cbbf2bb22c3f56be52453cebde9
>>>         <https://github.com/romangrothausmann/ITK-CLIs/commit/ebfc0a
>>> ea37d28cbbf2bb22c3f56be52453cebde9>>
>>>
>>>
>>>
>>>
>>>
>>>             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>
>>>         <tel:%2B49%20511%20532-2900>
>>>                             _____________________________________
>>> Powered by
>>>                             www.kitware.com <http://www.kitware.com>
>>>         <http://www.kitware.com>
>>>
>>>                             Visit other Kitware open-source projects at
>>>                             http://www.kitware.com/opensou
>>> rce/opensource.html
>>>         <http://www.kitware.com/opensource/opensource.html>
>>>                             <http://www.kitware.com/openso
>>> urce/opensource.html
>>>         <http://www.kitware.com/opensource/opensource.html>>
>>>
>>>                             Kitware offers ITK Training Courses, for more
>>>         information visit:
>>>                             http://www.kitware.com/product
>>> s/protraining.php
>>>         <http://www.kitware.com/products/protraining.php>
>>>                             <http://www.kitware.com/produc
>>> ts/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>
>>>                             <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>
>>>
>>>         <http://public.kitware.com/mailman/listinfo/insight-users
>>>         <http://public.kitware.com/mailman/listinfo/insight-users>>
>>>                             ______________________________
>>> _________________
>>>         Community
>>>                             mailing list
>>>                             Community at itk.org <mailto:Community at itk.org>
>>>         <mailto:Community at itk.org <mailto:Community at itk.org>>
>>>                             http://public.kitware.com/mail
>>> man/listinfo/community
>>>         <http://public.kitware.com/mailman/listinfo/community>
>>>
>>>         <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>
>>>         <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>
>>>         <tel:%2B49%20511%20532-2900>
>>>             _____________________________________
>>>             Powered by www.kitware.com <http://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>
>>>             <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>
>>>             <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>
>>>         <http://www.itk.org/Wiki/ITK_FAQ <http://www.itk.org/Wiki/ITK_F
>>> AQ>>
>>>
>>>             Follow this link to subscribe/unsubscribe:
>>>             http://public.kitware.com/mailman/listinfo/insight-users
>>>         <http://public.kitware.com/mailman/listinfo/insight-users>
>>>             <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 <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
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/insight-users/attachments/20160916/2820b09d/attachment-0001.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: tester.cpp
Type: text/x-c++src
Size: 17310 bytes
Desc: not available
URL: <http://public.kitware.com/pipermail/insight-users/attachments/20160916/2820b09d/attachment-0001.cpp>


More information about the Insight-users mailing list