[Insight-developers] Question regarding itkColorTable
James Ross
jross at bwh.harvard.edu
Thu Jan 14 14:05:33 EST 2010
Hi Luis,
Thanks for your reply. My personal preference would be for option 1 (the
more flexible of the two). I can plan on making the change and
committing if there are no objections.
Regards,
-James
Luis Ibanez wrote:
> Hi James,
>
> Thanks for pointing this out.
>
> You are right this looks like a bug.
>
>
> It was probably thought for the case of "unsigned char"
> types, where "max()" will make sense.
>
>
> The following couple of options
> come to mind for fixing this issue:
>
> 1) Have member variables
> * m_ComponentMinimum
> * m_ComponentMaximum
>
> that will be initialized by default in the constructor
> to the values
>
> NumericTraits<TPixel>::NonpositiveMin(),
> NumericTraits<TPixel>::max())
>
> respectively,
>
> and that could also be set by the user via
> SetMacro() methods.
>
>
> OR
>
>
> 2) Provide specialized ColorTraits<> classes
> that will define the proper Min and Max values
> for every type.
>
>
>
> The advantage of the first method is that it is
> more flexible.
>
> The advantage of the second method is that
> it will choose the "best" values by default.
>
>
> What do you think of these two options ?
>
>
>
> Thanks
>
>
>
> Luis
>
>
>
> -----------------------------------------------------------
> On Wed, Dec 23, 2009 at 11:00 AM, James Ross <jross at bwh.harvard.edu> wrote:
>
>> Greetings,
>>
>> I have recently been working with itkColorTable and have a question about
>> the UseRandomColors method. When I attempt the following:
>>
>> typedef itk::ColorTable< float > ColorType;
>>
>> ColorType::Pointer colorTable = ColorType::New();
>> colorTable->UseRandomColors( 5000 );
>>
>> my program crashes.
>>
>> However, if I alter the body of ::UseRandomColors from:
>>
>> r = static_cast<TPixel>(vnl_sample_uniform(NumericTraits<TPixel>
>> ::NonpositiveMin(), NumericTraits<TPixel>::max()));
>> m_Color[i].SetRed( r );
>> g = static_cast<TPixel>(vnl_sample_uniform(NumericTraits<TPixel>
>> ::NonpositiveMin(), NumericTraits<TPixel>::max()));
>> m_Color[i].SetGreen( g );
>> b = static_cast<TPixel>(vnl_sample_uniform(NumericTraits<TPixel>
>> ::NonpositiveMin(), NumericTraits<TPixel>::max()));
>> m_Color[i].SetBlue( b );
>>
>> to:
>>
>> r = static_cast<TPixel>( vnl_sample_uniform( 0.0, 1.0 ) );
>> m_Color[i].SetRed( r );
>> g = static_cast<TPixel>( vnl_sample_uniform( 0.0, 1.0 ) );
>> m_Color[i].SetGreen( g );
>> b = static_cast<TPixel>( vnl_sample_uniform( 0.0, 1.0 ) );
>> m_Color[i].SetBlue( b );
>>
>> my program runs, and I get expected behavior. Why are the color components
>> randomly chosen in the interval from non-positive min to max in the
>> original? Isn't the floating point color component convention associated
>> with the interval [0.0, 1.0]? If the original is a logical bug, I'd be
>> happy to fix and commit. If I'm doing something incorrectly, please let me
>> know.
>>
>> Many thanks,
>>
>> -James
>> _______________________________________________
>> 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
>>
>>
More information about the Insight-developers
mailing list