[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 09:49:53 EDT 2016


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].
>> 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
>>     <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/itkTileImageFilte
>> r.hxx#L125-L136
>>         <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
>>         <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>
>>
>>         <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_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>>
>>
>>
>>
>>     --
>>     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/8d840ed7/attachment-0001.html>


More information about the Insight-users mailing list