[Insight-users] Managing conversion of pixel types during file read

Luis Ibanez luis.ibanez at kitware.com
Thu, 15 Apr 2004 12:46:45 -0400


Hi Zach,

Is there any particular reason why you don't want
to use a RescaleIntensityImageFilter connected to
the output of your reader ?

This filter will do both the scaling and the type
casting for you.

Please let us know,


   Thanks


     Luis


---------------------
Zachary Pincus wrote:

> Hmm, after looking at DefaultConvertPixelTraits and ConvertPixelBuffer, 
> I am not convinced that it is possible to create a input-type savvy 
> ConvertPixelTraits.
> 
> While the documentation for DefaultConvertPixelTraits states:
> 
>> This implementaion, does a simple assignment operator, so if you are 
>> going from from a higher bit representation to a lower bit one (int to 
>> char), you may want to specialize and add some sort of transfer function.
> 
> 
> there does not seem to be any way to do this. For example, in the 
> ConvertGrayToGray method of ConvertPixelBuffer, this gets called:
> 
> OutputConvertTraits
>       ::SetNthComponent(0, *outputData++,
>                         static_cast<OutputComponentType>
>                         (*inputData));
> 
> Note the static_cast. So if you wanted to write a ConvertPixelTraits 
> class that was savvy about, say, converting ints to chars (as per the 
> documentation), you're out of luck because this conversion was already 
> done in the static_cast in ConvertPixelBuffer. (I think.)
> 
> So it seems that you would really have to write a new version of 
> ConvertPixelBuffer that was smart about transforming pixel types between 
> each other. OK, this is a bit more of a pain than just writing a new 
> ConvertPixelTraits, but whatever. However, even this is not possible, 
> because it only seems possible to provide an ImageFileReader with a new 
> version of the ConvertPixelTraits, not of the ConvertPixelBuffer class.
> 
> This seems to be due to the fact that this matter *should* be 
> accomplishable through ConvertPixelTraits, but at least to my eye, it is 
> not.
> 
> Am I missing something fundamental here? Or is it not currently possible 
> to add a specialized pixel transfer function to an ImageFileReader?
> 
> Thanks,
> 
> Zach
> 
> 
> On Apr 14, 2004, at 4:03 PM, Zachary Pincus wrote:
> 
>> Hello,
>>
>> My plan is to convert images I read in (initially in heterogeneous 
>> pixel types) to floating-point pixels. I intend to rescale each image 
>> such that the dynamic range of the image type (e.g. 8 bits, 16 bits) 
>> is compressed to the floating-point range [0, 1].
>>
>> That is, I don't mean to "normalize" each image I read in so that 
>> [image.min_value, image.max_value] goes to [0, 1], but to convert 
>> [ImageType.min_possible_value, ImageType.max_possible_value] to [0, 
>> 1]. (If you follow my abused notation!)
>>
>> Is there any simple way to do this in ITK now? I could write a new 
>> version of DefaultConvertPixelTraits for use with the FileReaders, but 
>> (a) I don't quite know what all needs to go into this, and (b) if 
>> there's an easy way already, I should use that.
>>
>> Thanks,
>> Zach Pincus
>>
>>
>> Department of Biochemistry and Program in Biomedical Informatics
>> Stanford University School of Medicine
>>
>> _______________________________________________
>> Insight-users mailing list
>> Insight-users at itk.org
>> http://www.itk.org/mailman/listinfo/insight-users
>>
> 
> _______________________________________________
> Insight-users mailing list
> Insight-users at itk.org
> http://www.itk.org/mailman/listinfo/insight-users
>