[Insight-developers] MetaIO and vector images

Bradley Lowekamp blowekamp at mail.nih.gov
Tue Mar 17 12:26:24 EDT 2009


These changes are not arbitrary, nor are they not sufficiently  
motivated. I had two scenarios  where this caused me problems:

I have a little program frame work which uses runtime information to  
determine type information. It simply calls ImageFileReader- 
 >GenerateOutputInformation() and then looks at the  
NumberOfComponents, PixelType, and ComponentType to determine the best  
pixel type to use. Many other file formats set the PixelType  
appropriately, yet for MetaIO I must ignore it's pixel type, and check  
the NumberOfComponents instead. The behavior and meaning of this pixel  
information should perhaps be better defined, but I see multi- 
component scalars as a non-sensical bug.

Secondly, there is a problem with the streaming/pasting code, which I  
wrote, and it was based on certain assumptions about the pixel  
descriptor variables. Before pasting beings, it verifies that the  
pixels in the file are of the same type as the what is to be written  
along with other meta data. To verify the type, it compares  
NumberOfComponents, PixelType, and ComponentType. As proposed in the  
bug report #3 will fix this. But simply removing the PixelType  
illustrates the bug in MetaIO.

Stating the problem another, there does not exist any multi-component  
pixel type  which writing will have the same  NumberOfComponents,  
PixelType, and ComponentType information when read back.



On Mar 17, 2009, at 10:32 AM, Stephen Aylward wrote:

> Please do not make that change.
>
> You are making an arbitrary change that is not motivated by need and
> that breaks backward compatibility.
>
> In your bug report you write:
> --- snip ---
> ElementNumberOfChannels = 3
> ElementType = MET_UCHAR
> When this is read, MetaIO interprets the file with a pixel type of
> scalar and number of components of 3. This seems like an odd
> ambiguity.
> --- snip ---
>
> This in no way seems odd or ambiguous.  What you are suggesting is
> ambiguous because the same notion will be repeated twice in the data -
> a user will have to change the number of channels and the element type
> to indicate an array.   The current solution indicates an array by
> simply changing the number of elements.   Having a single method for
> indicating an array reduces the chance on inconsistencies developing.

A single method is good, make since. But currently in the ImageIO,  
there is redundancy in the 3 variables which describe the pixel and a  
multi-component scalar does not make sense! The  
ImageIOBase::SetPixelType, does not use this combination either. If  
the PixelType is not known then there is the unkown type.

>
> Additionally, your change is not consistent with the notion of
> elementType - you are mixing the concept of element type with pixel
> type.   They are not the same.

You are right I don't fully understand the interpretation of  
elementType in the MetaIO file format. But it is the translation of  
MetaIO pixel information to ITK pixel information that I think needs  
to be addressed because it is buggy.

>
>
> Additionally, your suggestion eliminates the possibility of storing a
> multi-channel file with vector data in each channel.

Is itkMetaImageIO currently capable of writing or reading this? This  
actually further confuses me  on the meaning of element type. I simply  
changed the ElementType to MET_UCHAR_ARRAY, and it read and identified  
it as a vector pixel type. This lead me to the conclusion it should  
have been written as such.

>
>
> The current implementation is more general.
>
> Additionally, you are breaking breaking backward compatibility...the
> change you are suggesting is going to produce images that cannot be
> read by programs compiled with previous versions of the library.

No, they can be read. Currently MetaImageIO::ReadInformation switches  
on both MET_* and MET_*_ARRAY, and if it is an array element type,  
then it set's it to a vector pixel type. Also itkImageFileReader  
currently ignores the PixelType when reading, because ImageFileReader  
is template over the pixel type.

I have implemented #1 and #3 from the Bug report and all test pass in  
ITK.

Thanks,
Brad


>
>
> Why do you want to do this?
>
> s
>
> On Tue, Mar 17, 2009 at 10:11 AM, Bradley Lowekamp
> <blowekamp at mail.nih.gov> wrote:
>> Hello,
>> This is in regards to the following bug I encountered:
>>
>> http://www.itk.org/Bug/view.php?id=8732
>> Does anyone see any problems with changing MetaIO so that when it  
>> writes
>> multi components  pixel types, that it writes them an array type ie
>> ElementType = META_UCHAR_ARRAY. This is just a change to  
>> itkMetaImageIO
>> class, and not the library.
>> I am also still trying to figure out what it mean's to be a scalar  
>> pixel
>> type, with multiple components. This is how the reader would  
>> currently
>> report written vector images.
>> Brad
>>
>> ========================================================
>>
>> Bradley Lowekamp
>>
>> Lockheed Martin Contractor for
>>
>> Office of High Performance Computing and Communications
>>
>> National Library of Medicine
>>
>> blowekamp at mail.nih.gov
>>
>>
>
>
>
> -- 
> Stephen R. Aylward, Ph.D.
> Chief Medical Scientist
> Kitware, Inc. - North Carolina Office
> http://www.kitware.com
> (518) 371-3971 x300

========================================================
Bradley Lowekamp
Lockheed Martin Contractor for
Office of High Performance Computing and Communications
National Library of Medicine
blowekamp at mail.nih.gov


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.itk.org/mailman/private/insight-developers/attachments/20090317/353e9ff0/attachment.htm>


More information about the Insight-developers mailing list