[Insight-users] Error ->>> ImageToVectorImageFilter + ImageToListAdaptor

Luis Ibanez luis.ibanez at kitware.com
Sun Nov 8 19:15:06 EST 2009


Hi Ricardo,

You should probably use the refactored Statistics framework.

In this framework, improvements were made on the methods
for adapting vector images to list samples.

You will find the new code in the directory:

           Insight/Code/Review/Statistics

and you can enable it by reconfiguring your ITK build with CMake
and turning ON the following two CMake variables:

            * ITK_USE_REVIEW
            * ITK_USE_REVIEW_STATISTICS

For examples on the mechanism for adapting an image to a list
you may want to  look at the code in the directory:


  Insight/Testing/Code/Review/Statistics/
                   itkImageToListSampleAdaptorTest2.cxx
                   itkImageToListSampleAdaptorTest.cxx


One of the improvements made in this code is that the management
of multiple-components images was made more uniform with the
management of scalar images.


      Please give it a try and let us know if you find any problems,


             Thanks


                   Luis


----------------------------------------------------------------------------------------------
On Sat, Nov 7, 2009 at 6:08 PM, Ricardo Ferrari
<rjf.araraquara at gmail.com> wrote:
> Hi Itk-users,
>
> After my message to Luis (please see below) I've found a way to create
> vector samples from different image contrasts by using the itk::FixedArray
> class.
>
> However, in addition to my previous question (which still remains) about how
> to use the " ImageToVectorImageFilter + ImageToListAdaptor " to to build
> vector samples (as performed with the itk::FixedArray), I do have another
> question.
>
> Is there any way to define the number of contrasts (as used in the line
> typedef itk::FixedArray< TInputPixelType, NumberOfContrasts >
> TMeasurementVectorType; ) in the running time ?
>
> Thank you again,
>
> Ricardo
>
>
>
> ///
> const int NumberOfContrasts = 1; //3;
> const int Dimension = 3;
>
> /// Pixel type definition
> typedef signed short
> TInputPixelType;
> typedef signed short
> TOutputPixelType;
>
> /// Define type of the input and output images
> typedef itk::Image< TInputPixelType, Dimension >
> TInputImageType;
> typedef itk::Image< TOutputPixelType, Dimension >
> TOutputImageType;
>
>
>     typedef itk::FixedArray< TInputPixelType, NumberOfContrasts >
> TMeasurementVectorType;
>     typedef itk::Image< TMeasurementVectorType, Dimension > TArrayImageType;
>
>     typedef itk::ScalarToArrayCastImageFilter< TInputImageType,
> TArrayImageType > CasterType;
>     CasterType::Pointer caster = CasterType::New();
>     caster->SetInput( 0, img );
>     caster->Update();
>
>     typedef itk::Statistics::ImageToListAdaptor< CasterType::OutputImageType
>> ImageToListAdaptorType;
>     ImageToListAdaptorType::Pointer adaptor = ImageToListAdaptorType::New();
>     adaptor->SetImage( caster->GetOutput() );
>
>     ///
>     /// Create the GMM
>     ///
>     TGMM< TArrayImageType, TOutputImageType > gmm;
>     gmm.SetInputArrayImage( caster->GetOutput() );
>
>
>
>
> -----
> Hi Luis,
>
> I am trying to use the two following itk classes to get Vector Samples into
> an Gaussian Mixture Model classifier. Although, I am following your
> suggestion (please see
> http://www.cmake.org/pipermail/insight-users/2007-April/022003.html ) I am
> still getting an error.
>
> I really appreciate if you could help on this.
>
> Thanks,
> Ricardo
>
>
>
> #include "io.h"
> #include "itkImageToVectorImageFilter.
> h"
> #include "itkScalarToArrayCastImageFilter.h"
> #include "itkImageToListAdaptor.h"
>
> /// Pixel type definition
> typedef signed short
>                  TInputPixelType;
>
> /// Define type of the input and output images
> typedef itk::Image< TInputPixelType, Dimension >
> TInputImageType;
>
>
> ///
> /// Main function
> ///
> int main( int argc, char **argv )
> {
>    // Read a minc image
>    TInputImageType::Pointer img = ReadMincImage< TInputImageType >(
> "test.mnc" );
>
>    typedef itk::ImageToVectorImageFilter< TInputImageType >
> ImageToVectorImageFilterType;
>    ImageToVectorImageFilterType::Pointer vectorImage =
> ImageToVectorImageFilterType::New();
>    vectorImage->SetNthInput( 0, img );
>    vectorImage->Update();
>
>    typedef itk::Statistics::ImageToListAdaptor<
> ImageToVectorImageFilterType::OutputImageType > ImageToListAdaptorType;
>    ImageToListAdaptorType::Pointer adaptor = ImageToListAdaptorType::New();
>    adaptor->SetImage( vectorImage->GetOutput() );
>
>    return 0;
> }
>
>
> [100%] Building CXX object
> segmentation/gmm/CMakeFiles/gmm_classifier.dir/main.cpp.o
> In file included from
> /usr/local/include/InsightToolkit/Common/itkConceptChecking.h:23,
>                 from
> /usr/local/include/InsightToolkit/Common/itkImageHelper.h:20,
>                 from
> /usr/local/include/InsightToolkit/Common/itkImageBase.h:35,
>                 from
> /usr/local/include/InsightToolkit/Common/itkImage.h:20,
>                 from /home/ferrari/Workspace/MIP_PROJECTS/trunk/io/io.h:6,
>                 from
> /home/ferrari/Workspace/MIP_PROJECTS/trunk/segmentation/gmm/main.cpp:2:
> /usr/local/include/InsightToolkit/Common/itkPixelTraits.h: In instantiation
> of ?itk::PixelTraits<itk::VariableLengthVector<short int> >?:
> /usr/local/include/InsightToolkit/Numerics/Statistics/itkImageToListAdaptor.h:97:
> instantiated from
> ?itk::Statistics::ImageToListAdaptor<itk::VectorImage<short int, 3u>,
> itk::VariableLengthVector<short int> >?
> /home/ferrari/Workspace/MIP_PROJECTS/trunk/segmentation/gmm/main.cpp:51:
> instantiated from here
> /usr/local/include/InsightToolkit/Common/itkPixelTraits.h:41: error:
> ?Length? is not a member of ?itk::VariableLengthVector<short int>?
> In file included from
> /home/ferrari/Workspace/MIP_PROJECTS/trunk/segmentation/gmm/main.cpp:8:
> /usr/local/include/InsightToolkit/Numerics/Statistics/itkImageToListAdaptor.h:
> In member function ?const TMeasurementVector&
> itk::Statistics::ImageToListAdaptor<TImage,
> TMeasurementVector>::GetMeasurementVector(const typename
> TImage::PixelContainer::ElementIdentifier&) const [with TImage =
> itk::VectorImage<short int, 3u>, TMeasurementVector =
> itk::VariableLengthVector<short int>]?:
> /home/ferrari/Workspace/MIP_PROJECTS/trunk/segmentation/gmm/main.cpp:56:
> instantiated from here
> /usr/local/include/InsightToolkit/Numerics/Statistics/itkImageToListAdaptor.h:323:
> warning: taking address of temporary
> /usr/local/include/InsightToolkit/Numerics/Statistics/itkImageToListAdaptor.h:323:
> warning: returning reference to temporary
> make[2]: *** [segmentation/gmm/CMakeFiles/gmm_classifier.dir/main.cpp.o]
> Error 1
> make[1]: *** [segmentation/gmm/CMakeFiles/gmm_classifier.dir/all] Error 2
> make: *** [all] Error 2
> _____________________________________
> 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.html
>
> 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://www.itk.org/mailman/listinfo/insight-users
>
>


More information about the Insight-users mailing list