[Insight-developers] How to cast the itk::Image<PixelType, 3> * to itk::Image<itk::VariableLengthVector<PixelType>, 3> *
Luis Ibanez
luis.ibanez at kitware.com
Thu Jan 28 15:57:58 EST 2010
Hi Binjie,
If you want to pass an itk::VectorImage as input to your filter:
VectorImageRegisterVersorRigidFilter<TInputImage,TOutputImage>
Then you MUST use
itk::VectorImage<>
as the template argument of the VectorImageRegisterVersorRigidFilter.
Right now you are, incorrectly, using
NrrdImageType
as the template arguments of
> typedef itk::VectorImageRegisterVersorRigidFilter<NrrdImageType,
> NrrdImageType> RegisterFilterType;
That's the reason why the compiler tells you that it :
: cannot convert parameter 1 from '
itk::VectorImage<TPixel,VImageDimension> > *
to itk::Image<TPixel,VImageDimension> *
In your typedef of
> typedef itk::VectorImageRegisterVersorRigidFilter<NrrdImageType,
> NrrdImageType> RegisterFilterType;
You are promising this filter to give it a NrrdImageType, as input,
and instead you are giving it an itk::VectorImage.
Please make your template instantiations consistent with
your pipeline.
Regards,
Luis
--------------------------------------------------------------------------------------------
On Wed, Jan 27, 2010 at 10:43 PM, Binjie Qin <bjqin at sjtu.edu.cn> wrote:
> Dear Luis:
>
> We follow your advice by using the ImageToVectorImageFilter to convert
> "itk::Image<PixelType, 3>*" to
> "itk::Image<itk::VariableLengthVector<PixelType>, 3>*", those codes are:
>
> typedef itk::Image<PixelType,2> ScalarImageType;
> typedef itk::ImageToVectorImageFilter<ScalarImageType> FilterType;
> FilterType::Pointer filter = FilterType::New();
>
> typedef
> itk::VectorIndexSelectionCastImageFilter<NrrdImageType,IndexImageType>
> FixedImageType;
> FixedImageType::Pointer fixedImageExtractionFilter =
> FixedImageType::New();
> .
> .
> .
>
> filter->SetInput(0,fixedImageExtractionFilter->GetOutput( ));
> filter->Update();
>
> typedef itk::VectorImageRegisterVersorRigidFilter<NrrdImageType,
> NrrdImageType> RegisterFilterType;
> RegisterFilterType::Pointer registerImageFilter =
> RegisterFilterType::New();
> .
> .
> .
>
> registerImageFilter->SetFixedImage( filter->GetOutput());
>
> However, the last line code still results in the same conversion error:
> error C2664:
> 'itk::VectorImageRegisterVersorRigidFilter<TInputImage,TOutputImage>::SetFixedImage'
> : cannot convert parameter 1 from 'itk::VectorImage<TPixel,VImageDimension>
> *' to 'itk::Image<TPixel,VImageDimension> *'
> 1> with
> 1> [
> 1> TInputImage=NrrdImageType,
> 1> TOutputImage=NrrdImageType
> 1> ]
> 1> and
> 1> [
> 1> TPixel=PixelType,
> 1> VImageDimension=3
> 1> ]
> 1> and
> 1> [
> 1> TPixel=itk::VariableLengthVector<PixelType>,
> 1> VImageDimension=3
> 1> ]
> 1> Types pointed to are unrelated; conversion requires
> reinterpret_cast, C-style cast or function-style cast
>
>
>
>
>
>
>
> On Tue, 26 Jan 2010 23:18:18 +0800, Luis Ibanez <luis.ibanez at kitware.com>
> wrote:
>
>> Hi bjqin at SJTU,
>>
>>
>> You may want to use the filter:
>>
>> Insight/Code/BasicFilters/
>> itkImageToVectorImageFilter.h
>>
>>
>> Regards,
>>
>>
>> Luis
>>
>>
>>
>> ------------------------------------
>> On Mon, Jan 25, 2010 at 10:44 PM, Binjie Qin <bjqin at sjtu.edu.cn> wrote:
>>>
>>> Dear insight-developers:
>>>
>>> There is PixelType (typedef signed short PixelType) conversion error of
>>> building gtractCoregBvalues at the GTRACT in the following code:
>>>
>>> typedef
>>> itk::VectorIndexSelectionCastImageFilter<NrrdImageType,IndexImageType>
>>> FixedImageType;
>>> FixedImageType::Pointer fixedImageExtractionFilter =
>>> FixedImageType::New();
>>> .
>>> .
>>> .
>>>
>>> typedef itk::VectorImageRegisterVersorRigidFilter<NrrdImageType,
>>> NrrdImageType> RegisterFilterType;
>>> RegisterFilterType::Pointer registerImageFilter =
>>> RegisterFilterType::New();
>>> .
>>> .
>>> .
>>>
>>> registerImageFilter->SetFixedImage(
>>> fixedImageExtractionFilter->GetOutput( ) );
>>>
>>>
>>> The outputimage PixelType of "fixedImageExtractionFilter->GetOutput( )"
>>> is TPixel=PixelType, PixelType is signed short.
>>>
>>> However the inputimage PixelType of "registerImageFilter->SetFixedImage
>>> (itk::Image<TPixel,VImageDimension> *)" is
>>> TPixel=itk::VariableLengthVector<PixelType>
>>>
>>> How to cast the "itk::Image<PixelType,3> *" to
>>> "itk::Image<itk::VariableLengthVector<PixelType>,3> *"?
>>>
>>> The itkScalarToArrayCastImageFilter is not useful because the
>>> VariableLengthVector<PixelType> is not a fixed array .
>>>
>>> If the cast should be implemented with static_cast of each PixelType by
>>> accessing each pixel value?
>>>
>>>
>>> Thank you in advance.
>>>
>>>
>>> bjqin at SJTU
>>>
>>> _______________________________________________
>>> 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://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-developers
>>>
>>
>> __________ Information from ESET NOD32 Antivirus, version of virus
>> signature database 4805 (20100125) __________
>>
>> The message was checked by ESET NOD32 Antivirus.
>>
>> http://www.eset.com
>>
>>
>>
>
>
> --
> Binjie Qin, Ph.D.
> Associate Professor
> Dept. of Biomedical Engineering
> Shanghai Jiao Tong University
> 800 Dongchuan Road, Min Hang
> Shanghai, P. R. China, 200240
> Phone: 86-21-34204382,86-138-1635-5349
> Fax: 86-21-34205709
> Email:bjqin at sjtu.edu.cn
>
More information about the Insight-developers
mailing list