[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