[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