[ITK] [ITK-users] How to determine PixelType of itk::Image

Dženan Zukić dzenanz at gmail.com
Tue Mar 15 14:57:09 EDT 2016


Yes, it knows. Using something like this:

template <typename ImageType>
void ItkToAvs(AVSfield** ppAvs, typename ImageType::Pointer image)
{
typename ImageType::PixelType *pixelPointer=image->GetBufferPointer();
unsigned int dimension=ImageType::ImageDimension;
//the rest of conversion code
}

However, ImageType::PixelType can be arbitrary type. Consider this:
class myClass {int a; complex<double> c; string sRep;};
typedef itk::Image<myClass, 2> ImageType;
ItkToAvs(ppAvs, image);

What do you expect ItkToAvs to do?

Regards,
Dženan

On Tue, Mar 15, 2016 at 2:53 PM, Lambert Zijp <ljzijp at gmail.com> wrote:

> This is all very confusing to me. In the FileWriter example, the caller *already
> knows* what the IOComponentType
> <http://www.itk.org/Doxygen/html/classitk_1_1ImageIOBase.html#a8dc783055a0af6f0a5a26cb080feb178> and
> what the IOPixelType
> <http://www.itk.org/Doxygen/html/classitk_1_1ImageIOBase.html#abd189f096c2a1b3ea559bc3e4849f658> of
> the itk::Image is (it is hard-coded; not retrieved from the itk::Image).
> The same holds for the reader: it gets that information from the file.
> I want to make a general function that takes *ANY* itk::Image as input,
> and converts it to an AVS datasructure (which supports all of them). So I
> need to get the information from itk::Image.
> Is there a way to get it from itk::Image? Or is it true that an
> itk::Image does not know what it actually is/represents?
>
> On Tue, Mar 15, 2016 at 7:07 PM, Dženan Zukić <dzenanz at gmail.com> wrote:
>
>> If I remember correctly, using this
>> <http://www.vtk.org/Wiki/ITK/Examples/IO/ReadUnknownImageType> approach
>> you can also get number of components with something like:
>> imageIO->GetNumberOfComponents();
>> You can take a look at class documentation
>> <http://www.itk.org/Doxygen/html/classitk_1_1ImageIOBase.html> for more
>> details.
>>
>> On Tue, Mar 15, 2016 at 1:09 PM, Lambert Zijp <ljzijp at gmail.com> wrote:
>>
>>> I'm still not sure how to handle vector images. Dženan gave an example
>>> of an RGB image. That would be a 3-vector unsigned char pixeltype.
>>> Would I have to write out in those *'if  **(**typeid(ValueType) ==
>>> ???)'* statements all permutations of the number of vectors and the
>>> type? Or is there a way to separate the number of vectors and the pixeltype?
>>> How are vector images stored in memory in ITK. In an RGB image for
>>> example, are the pixels consecutive triplets, or is the image stored as
>>> three consecutive color planes?
>>> I'm particular interested in 3D displacement vector fields, that are the
>>> result of deformable registration.
>>>
>>>
>>> On Tue, Mar 15, 2016 at 5:22 PM, Bill Lorensen <bill.lorensen at gmail.com>
>>> wrote:
>>>
>>>> This example may help
>>>> http://www.vtk.org/Wiki/ITK/Examples/IO/ReadUnknownImageType
>>>> On Mar 15, 2016 8:44 AM, "Dženan Zukić" <dzenanz at gmail.com> wrote:
>>>>
>>>>> Of course it complained, switch statement is for integral types (if I
>>>>> remember correctly).
>>>>>
>>>>> Regards
>>>>>
>>>>> On Tue, Mar 15, 2016 at 11:39 AM, Lambert Zijp <ljzijp at gmail.com>
>>>>> wrote:
>>>>>
>>>>>> Hi Dženan,
>>>>>>
>>>>>> Thank you very much!
>>>>>> Visual Studio 9 does not recognize decltype(), but typeid() worked
>>>>>> fine. At least, when you make separate if statements, like you did in your
>>>>>> example. When tried to use it in a switch statement, the compiler
>>>>>> complained.
>>>>>>
>>>>>> Greetings,
>>>>>> Lambert
>>>>>>
>>>>>>
>>>>>> On Tue, Mar 15, 2016 at 2:47 PM, Dženan Zukić <dzenanz at gmail.com>
>>>>>> wrote:
>>>>>>
>>>>>>> Hi Lambert,
>>>>>>>
>>>>>>> the classic way is using a bunch of if-else's.
>>>>>>>
>>>>>>> if (decltype(ValueType)==decltype(int))
>>>>>>> {
>>>>>>> //int specific processing
>>>>>>> }
>>>>>>> else if (decltype(ValueType)==decltype(itk::RGB<char>))
>>>>>>> {
>>>>>>> //RGB<char> specific processing
>>>>>>> }
>>>>>>> ​else if ...​
>>>>>>>
>>>>>>> ​If you can't use C++11's decltype then use typeid from <typeinfo>​
>>>>>>> header.
>>>>>>>
>>>>>>> Regards,
>>>>>>> Dženan
>>>>>>>
>>>>>>> On Tue, Mar 15, 2016 at 5:48 AM, Lambert Zijp <ljzijp at gmail.com>
>>>>>>> wrote:
>>>>>>>
>>>>>>>> I want to write a function that converts an arbitrary ITK image to
>>>>>>>> another format (AVS in my case).
>>>>>>>> It has been suggested that following functionprototype could de the
>>>>>>>> job:
>>>>>>>> template<typename ValueType,unsigned int Dimension>
>>>>>>>> int ItkToAvs(AVSfield** ppAvs, typename
>>>>>>>> itk::Image<ValueType,Dimension>::Pointer pItkImage);
>>>>>>>>
>>>>>>>> Now I want to know whether ValueType equals unsigned char or short
>>>>>>>> or int etc. Also whether the pixels are single numbers or vectors. How does
>>>>>>>> one do that?
>>>>>>>>
>>>>>>>> Greetings,
>>>>>>>> Lambert
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> _____________________________________
>>>>>>>> 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.php
>>>>>>>>
>>>>>>>> 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://public.kitware.com/mailman/listinfo/insight-users
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>>> _____________________________________
>>>>> 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.php
>>>>>
>>>>> 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://public.kitware.com/mailman/listinfo/insight-users
>>>>>
>>>>>
>>>
>>
>
> _____________________________________
> 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.php
>
> 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://public.kitware.com/mailman/listinfo/insight-users
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/community/attachments/20160315/592a6c7c/attachment-0001.html>
-------------- next part --------------
_____________________________________
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.php

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://public.kitware.com/mailman/listinfo/insight-users


More information about the Community mailing list