[Insight-developers] Re: [Insight-users] Histogram bug with
maximum possible value ?
Gaetan Lehmann
gaetan.lehmann at jouy.inra.fr
Thu Jun 8 08:13:46 EDT 2006
Hi Luis,
So it explain the observed behavior :-)
However, a naive user (let say me) would think the following code (stollen
from itkOtsuMultipleThresholdsImageFilter.txx to implement my own filter)
will return an histogram with all the values:
// Create a histogram of the image intensities
typename HistogramGeneratorType::Pointer histogramGenerator =
HistogramGeneratorType::New();
histogramGenerator->SetInput( this->GetInput() );
histogramGenerator->SetNumberOfBins( m_NumberOfHistogramBins );
histogramGenerator->Compute();
By the way, does it mean that OtsuMultipleThresholdsImageFilter code is
broken ?
Perhaps the class ScalarImageToHistogramGenerator should be modified to
set the min and max values to include all the values ?
Gaetan
On Thu, 08 Jun 2006 14:00:25 +0200, Luis Ibanez <luis.ibanez at kitware.com>
wrote:
>
> For mor details, you may want to look at the Examples:
>
>
> Insight/
> Examples/
> Statistics/
> ImageHistogram1.cxx
> ImageHistogram2.cxx
>
> in particular to the call for the methods:
>
> SetHistogramMin()
> SetHistogramMax()
>
>
> Note again that the min and max values of the histogram
> refer here to the values of the bin bounds, not the the
> values to be accepted in the bins.
>
> For an image of integer pixel type, the bounds of the
> bins must be of the type K-0.5,K+0.5, so that the bin
> accepts the value K (where K is an integer).
>
>
> Luis
>
>
> ---------------------
> Luis Ibanez wrote:
>> This is a known behavior of the Histogram.
>> The correct way to use the histogram class for an image of 8-bits
>> is to set the minimum and maximum to values such as -0.5 and 255.5
>> Note that the types for setting min and max are not the image pixel
>> type but its RealType.
>> The reason is that the min and max that we pass to the histogram
>> class are the values for the min of the first bin and the max of
>> the last bin.
>> If you want to include all the samples, the min value of the bin
>> bounds must be lower that the actual minimum value expected in the
>> population, and the max value of the bin bounds must be larger
>> than the minimum value expected in the population. This is standard
>> for computing histogram.
>> The unfortunate fact is that there are too many bad habits acquired
>> for people that got used to work only with 8-bit images, and expect
>> the min and max of the histogram to be 0 and 255. Those are actually
>> the mid-values of the bins, not the bounds of the bins.
>> It may be convenient to have a helper initializer class to set the
>> min and max values for images of (char) and (unsigned char) so that
>> user's do not have to think about these details.
>> Luis
>> =========================
>> Karthik Krishnan wrote:
>>
>>> The histogram class is a widely used class. Please file a bug report
>>> and assign it to me with a high priority.
>>>
>>> -----
>>>
>>> That said, I am surprised, it does not handle pixels with intensity
>>> 255. See lines 90-102 of
>>> http://www.itk.org/cgi-bin/viewcvs.cgi/Code/Numerics/Statistics/itkListSampleToHistogramGenerator.txx?annotate=1.14&root=Insight
>>> h_upper[i] = ((THistogramMeasurement) upper[i]) +
>>> NumericTraits< THistogramMeasurement >::One ;
>>> if(h_upper[i] <= upper[i])
>>> {
>>> // an overflow has occurred therefore set upper to upper
>>> h_upper[i] = upper[i];
>>> // Histogram measurement type would force the clipping the
>>> max value.
>>> // Therefore we must call the following to include the max
>>> value:
>>> m_Histogram->SetClipBinsAtEnds(false);
>>> }
>>>
>>> If pixel type is UCHAR, it should go into that if block and do the
>>> SetClipBinsAtEnds(false) thing. That would mean that the bins at the
>>> edges of the histogram extend to infinity, so really 255 should be
>>> considered. [ In the default case, the ends are clipped, See
>>> constructor of itk::Histogram with sets ClipBinsAtEnds to true (so 255
>>> won't be considered), but that's not the case with you since you are
>>> using the ScalarImageToHistogramGenerator. ]
>>>
>>>
>>> Thanks for reporting this.
>>> -karthik
>>>
>>>
>>> Gaetan Lehmann wrote:
>>>
>>>>
>>>> Hi,
>>>>
>>>> I am the only one to have this problem ?
>>>> Should I file a bug report ?
>>>>
>>>> Gaetan
>>>>
>>>>
>>>> On Fri, 02 Jun 2006 17:11:45 +0200, Gaetan Lehmann
>>>> <gaetan.lehmann at jouy.inra.fr> wrote:
>>>>
>>>>>
>>>>> I forgot to say I'm using ITK 2.6.0 with gcc 4.0
>>>>>
>>>>> On Fri, 02 Jun 2006 16:23:25 +0200, Gaetan Lehmann
>>>>> <gaetan.lehmann at jouy.inra.fr> wrote:
>>>>>
>>>>>>
>>>>>> Hi,
>>>>>>
>>>>>> I'm trying to manipulate histograms, with itk::Histogram. I'm
>>>>>> generating
>>>>>> the histogram from an image with the ScalarImageToHistogramGenerator
>>>>>> class. The pixel type of the input image is unsigned char.
>>>>>> Everything seems to work, as long as there is no pixel value = 255
>>>>>> in the
>>>>>> image.
>>>>>> All the pixels with an intensity of 255 are not counted in the
>>>>>> histogram.
>>>>>> For example, the attached image (a 10x10 black image with 4 white
>>>>>> (255)
>>>>>> pixels) produce an histogram with 96 pixels according to the
>>>>>> GetTotalFrequency() result.
>>>>>>
>>>>>> Is it a bug ?
>>>>>> Or I have missed something ?
>>>>>>
>>>>>> Regards,
>>>>>>
>>>>>> Gaetan
>>>>>>
>>>>>
>>>>>
>>>>>
>>>>
>>>>
>>>>
>>> _______________________________________________
>>> Insight-users mailing list
>>> Insight-users at itk.org
>>> http://www.itk.org/mailman/listinfo/insight-users
>>>
>>>
>> _______________________________________________
>> Insight-developers mailing list
>> Insight-developers at itk.org
>> http://www.itk.org/mailman/listinfo/insight-developers
>>
>
>
> _______________________________________________
> Insight-users mailing list
> Insight-users at itk.org
> http://www.itk.org/mailman/listinfo/insight-users
--
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
More information about the Insight-users
mailing list