[Insight-developers] NumericTraits for RGBPixel

Bradley Lowekamp blowekamp at mail.nih.gov
Wed Jan 14 11:39:59 EST 2009


Hello,

	I see that < is in fact defined for RGBPixelType:

/**
  * Returns the results from a test for less than (all components must  
be less than)
  */
template<class T>
bool
RGBPixel<T>
::operator<(const Self & r) const
{
   for( unsigned int i=0; i<3; i++)
     {
     if((*this)[i] >= r[i])
       {
       return false;
       }
     }
   return true;
}

Hrmm... this is a very "interesting" definition of the < operator. It  
does not produce a well ordered set. It is logically inconsistent. And  
you can not define a unique maximum from it. Consider the following:

Let a = (1,0,0) and b = (0,1,0)
as defined above:
a < b =>false
b < a => false
a == b => false

Let  c = (255, 255, 255)  and d = (255, 0, 0)
c < d => false;
d < c => false;
c == d => false;


By interesting, I mean I'd like to call it a bug.

Brad



On Jan 14, 2009, at 10:51 AM, Bradley Lowekamp wrote:

> Hello,
>
> 	ITK does not have max defined for any of the vector or array like  
> classes either. I am pretty sure that this was done on purpose.
>
> 	From a theoretical point of view, a maximum is defined as the  
> greatest element in a set. This essentially implies that the set can  
> be ordered and have comparative operators. I don't think this is  
> true for vector-like elements.
>
> 	Does the connected components algorithm need the max trait?
>
> Brad
>
> On Jan 14, 2009, at 9:18 AM, Gaëtan Lehmann wrote:
>
>>
>> Hi,
>>
>> I'm fixing the bug uncovered by Julien Michel in  
>> ConnectedComponentImageFilter with RGB images as input, and want to  
>> add a test for it.
>> However, I can't succeed to build the modified test because  
>> itk::NumericTraits< RGBPixelType< unsigned char > >::max() is not  
>> defined.
>> Is it done on purpose?
>>
>> Also, some functions defined in those numeric traits look  
>> suspicious to me, like
>>
>>  typedef _TYPENAME_ NumericTraits<T>::RealType        
>> ElementRealType; \
>>  typedef RGBPixel<ElementRealType>         RealType; \
>>  static const RealType max( const Self & a ) \
>>    {  \
>>      RealType b(a.Size());  \
>>      b.Fill( NumericTraits< T >::max() ); \
>>      return b; \
>>    } \
>>
>> Why should max( const Self & a ) return a RealType? Why b inside  
>> the function is filled with the size of a (which is always 3), and  
>> then filled with zeros?
>> For the scalar types, that function simply return the value of max().
>>
>> Regards,
>>
>> Gaëtan
>>
>>
>> -- 
>> Gaëtan Lehmann
>> Biologie du Développement et de la Reproduction
>> INRA de Jouy-en-Josas (France)
>> tel: +33 1 34 65 29 66    fax: 01 34 65 29 09
>> http://voxel.jouy.inra.fr  http://www.mandriva.org
>> http://www.itk.org  http://www.clavier-dvorak.org
>>
>> _______________________________________________
>> Insight-developers mailing list
>> Insight-developers at itk.org
>> http://www.itk.org/mailman/listinfo/insight-developers
>
> ========================================================
> Bradley Lowekamp
> Lockheed Martin Contractor for
> Office of High Performance Computing and Communications
> National Library of Medicine
> blowekamp at mail.nih.gov
>
>
> _______________________________________________
> Insight-developers mailing list
> Insight-developers at itk.org
> http://www.itk.org/mailman/listinfo/insight-developers

========================================================
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/20090114/0be42ae1/attachment.htm>


More information about the Insight-developers mailing list