[Insight-developers] correct use of ImageToHistogramFilter

Richard Beare richard.beare at gmail.com
Mon May 10 20:10:59 EDT 2010


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
>>
>


More information about the Insight-developers mailing list