[Insight-developers] Wrong behaviour of ImageFileReader when reading an itk::VectorImage<itk::FixedArray<double, 6>, 3> ?

Benoit Scherrer benoitscherrer at gmail.com
Mon Jan 17 10:46:23 EST 2011


Ok thanks!

But so there is no way to use:
typedef itk::VectorImage<itk::DiffusionTensor<double>, 3> TensorVectorImage;

to read a set of tensors at each voxel ?
( itk::DiffusionTensor inherits itk::FixedArray)

It would be useful to do for example:

TensorVectorImage tensors;
tensors[i].GetFractionalAnisotropy()

Thanks
Benoit


On Thu, Jan 13, 2011 at 11:26 PM, Karthik Krishnan <
karthik.krishnan at kitware.com> wrote:

>
>
> On Fri, Jan 14, 2011 at 6:26 AM, Benoit Scherrer <benoitscherrer at gmail.com
> > wrote:
>
>> Hi,
>>
>> I wanted to use the type:
>> typedef itk::VectorImage<itk::FixedArray<double, 6>, 3> TensorVectorImage;
>> to make a vector image of tensors.
>>
>> Everything compiles well. But when i use the
>> itk::ImageFileReader<TensorVectorImage>
>> it seems that things goes wrong. When trying to iterate on the image :
>>
>> itk::ImageRegionConstIterator<TensorVectorImage>
>>  it(image, image->GetLargestPossibleRegion());
>>  while(!it.IsAtEnd())
>> {
>> itk::VariableLengthVector<itk::FixedArray<double, 6> > tensors = it.Get();
>>                (...)
>> ++it;
>> }
>>
>> it compiles but during the execution goes out of the data bounds.
>>
>> By looking into ImageFileReader<TOutputImage,
>> ConvertPixelTraits>::GenerateOutputInformation
>> I found the lines:
>>
>>   if( strcmp( output->GetNameOfClass(), "VectorImage" ) == 0 )
>>     {
>>     typedef typename TOutputImage::AccessorFunctorType
>> AccessorFunctorType;
>>     AccessorFunctorType::SetVectorLength( output,
>> m_ImageIO->GetNumberOfComponents() );
>>     }
>>
>> So here m_ImageIO->GetNumberOfComponents() will returns 6 for a simple
>> tensor file (Dimension
>> of the VectorImage = 1), instead of 1 (after the offsets computed
>> in ImageRegionConstIterator are wrong).
>>
>> So should ImageFileReader divides m_ImageIO->GetNumberOfComponents() by
>> the number of components
>> of TOutputImage::PixelType ? (i manually set it to 1 in the debugger, it's
>> working. However i didn't tried
>> with an image with 12 components, ie two tensors)
>>
>> Or is it a bad idea to use  itk::VectorImage<itk::FixedArray<double, 6>,
>> 3>  ?
>>
>
> To make a VectorImage of tensors, you declare it simply as
> itk::VectorImage< double, 3 > and set the VectorLength on the image to 6.
>
> Or you could use itk::Image< FixedArray< double, 6 >, 3 >.
>
> The two are equivalent.
>
>
>
>> Thanks a lot
>> Benoit
>>
>>
>> _______________________________________________
>> 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
>>
>>
>


-- 
/ / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /
/ /
Benoit Scherrer
Postdoctoral Research Fellow
Computational Radiology Laboratory,
Harvard Medical School (Boston)

http://www.crl.med.harvard.edu/
http://www.BenoitScherrer.com
/ / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /
/ /
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.itk.org/mailman/private/insight-developers/attachments/20110117/22c1bfe4/attachment.htm>


More information about the Insight-developers mailing list