[Insight-developers] correct use of ImageToHistogramFilter

Bradley Lowekamp blowekamp at mail.nih.gov
Fri May 14 07:12:42 EDT 2010


This should be fixed in 3.18 with the explicit qualifier on the itk::Array constructor:
http://www.itk.org/cgi-bin/viewcvs.cgi/Code/Common/itkArray.h?root=Insight&r1=1.47&r2=1.48

Was this on 3.18 or a previous version?

Brad

On May 10, 2010, at 8:10 PM, Richard Beare wrote:

> Thankyou,
> 
> For anyone else looking at this, it turns out that the
> HistogramBinMinimum and HistogramBinMaximum need to be set using a
> similar approach.
> 
> On Mon, May 10, 2010 at 5:57 AM, Luis Ibanez <luis.ibanez at kitware.com> wrote:
>> Hi Richard
>> 
>> 
>> The variable:
>> 
>>              hsize
>> 
>> in your code, is ultimately of type
>> 
>>              itk::Array
>> 
>> Therefore, its number of component must be
>> set at construction time.
>> 
>> Instead of your current code:
>> 
>>>      typename HistGenType::HistogramSizeType hsize;
>> 
>> you should have
>> 
>>>      typename HistGenType::HistogramSizeType hsize( 1 );
>> 
>> 
>> ---
>> 
>> What you are observing with
>> 
>>             Hist->SetHistogramSize(100);
>> 
>> is an accidental promotion, by which the number 100 is
>> used as the constructor for a variable of type
>> 
>>             HistGenType::HistogramSizeType
>> 
>> which ends up being an itk::Array.
>> 
>> Contrary to what you may expect in that expression, the
>> automatic construction does not result in an array of one
>> element with that element having the value "100", but
>> in an array of 100 elements, all of them uninitialized.
>> 
>> Please don't use
>> 
>>            Hist->SetHistogramSize(100);
>> 
>> What you should use is
>> 
>>  typename HistGenType::HistogramSizeType hsize( 1 );
>>  hsize.Fill( 100 );
>>  Hist->SetHistogramSize( hsize );
>> 
>> 
>> 
>> 
>>    Regards,
>> 
>> 
>>            Luis
>> 
>> 
>> --------------------------------------------------------------------------------------------
>> On Wed, May 5, 2010 at 2:04 AM, Richard Beare <richard.beare at gmail.com> wrote:
>>> Hello,
>>> 
>>> I'm struggling getting this filter to work under ITK 3.16, and I
>>> suspect I'm missing something in the histogram terminology or getting
>>> mixed up in the decorator macros:
>>> 
>>>      typedef typename
>>> itk::Statistics::ImageToHistogramFilter<OutImType> HistGenType;
>>>      typedef typename HistGenType::HistogramType HistogramType;
>>>      typename HistGenType::Pointer Hist = HistGenType::New();
>>>      typename HistGenType::HistogramSizeType hsize;
>>>      typename HistGenType::HistogramMeasurementVectorType hmeas;
>>> 
>>>      hsize.Fill(100);
>>>      hmeas.Fill(0.1);
>>>      Hist->SetInput(Rescaler->GetOutput());
>>>      // one component histogram
>>> 
>>>      Hist->SetHistogramSize(hsize);
>>> 
>>>      typename HistGenType::HistogramMeasurementVectorType hmin, hmax;
>>>      hmin.Fill(CmdLineObj.hmin);
>>>      hmax.Fill(CmdLineObj.hmax);
>>> 
>>>      Hist->SetHistogramBinMinimum(hmin);
>>>      Hist->SetHistogramBinMaximum(hmax);
>>>      Hist->SetMarginalScale(0.1);
>>>      Hist->Update();
>>> 
>>> 
>>> I get the following error:
>>> 
>>> itk::ERROR: SampleToHistogramFilter(0x129ff2d0): Histogram number of
>>> components: 0 doesn't match Measurement Vector Size: 1
>>> 
>>> 
>>> if I change the call to
>>> 
>>> Hist->SetHistogramSize(100);
>>> 
>>> I get
>>> 
>>> terminate called after throwing an instance of 'itk::ExceptionObject'
>>>  what():  /usr/local/hpcmedsw/ITK/ITK-3.16/include/InsightToolkit/Review/Statistics/itkSampleToHistogramFilter.txx:185:
>>> itk::ERROR: SampleToHistogramFilter(0x1a5ba2d0): Histogram number of
>>> components: 100 doesn't match Measurement Vector Size: 1
>>> 
>>> 
>>> What am I doing wrong?
>>> _______________________________________________
>>> 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
>>> 
>> 
> _______________________________________________
> 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