[Insight-users] histogram
Luis Ibanez
luis . ibanez at kitware . com
Wed, 10 Dec 2003 18:38:36 -0500
Hi David,
What image are you feeding to the ImageHistogram3 program ?
I'm testing this program with the image in
Insight/Examples/Data/VisibleWomanEyeSlice.png
and it is not producing zeros as in your case.
What's the file format of your image ?
Thanks
Luis
--------------------
David Llanos wrote:
> Why the program ImageHistogram3.cxx gives all the "bin" with frequency = 0?
>
> Is it maybe erroneous histograms?
>
> ----- Original Message -----
> From: "Luis Ibanez" <luis . ibanez at kitware . com>
> To: "David Llanos" <gva02 at elai . upm . es>
> Cc: <insight-users at itk . org>
> Sent: Monday, December 08, 2003 3:26 PM
> Subject: Re: [Insight-users] histogram
>
>
>
>>Hi David,
>>
>>
>>An example on how to compute the Histogram of an RGB image
>>has been commited to the CVS repository under:
>>
>>
>> Insight/Examples/Statistics/ImageHistogram3.cxx
>>
>>
>>This example loads a 2D RGB Image (dimension is irrelevant here)
>>and computes the histogram of its red channel, its blue channel,
>>and its green channel. Finally it computes the joint histogram
>>of the RGB values which results in a 3D histogram.
>>
>>This example uses the new helper class
>>
>> itk::ImageToHistogramGenerator
>>
>>that simplifies the setup of the ImageToListSample adaptor, since
>>you only have to connect the image and select what kind of histogram
>>you want to compute.
>>
>>
>>Please let us know if you find any problems,
>>
>>
>> Thanks
>>
>>
>> Luis
>>
>>
>>-----------------------
>>
>>David Llanos wrote:
>>
>>
>>>hi all,
>>>
>>>I have errors that I don't understand in the following algorithm that
>>>tries to make the histogram of the red channel of a RGB image:
>>>
>>>
>>>
>>>
>>>///////////////////////////////////////////BEGIN
>>>CODE///////////////////////////////////////////////////////
>>>
>>>
>>>
>>>#include "itkScalarImageToListAdaptor.h"
>>>
>>>#include "itkImage.h"
>>>
>>>#include "itkImageFileReader.h"
>>>
>>>#include "itkListSampleToHistogramGenerator.h"
>>>
>>>#include "itkImageAdaptor.h"
>>>
>>>#include "itkImageRegionIteratorWithIndex.h"
>>>
>>>#include "itkRescaleIntensityImageFilter.h"
>>>
>>>
>>>
>>>class RedChannelPixelAccessor
>>>
>>>{
>>>
>>>public:
>>>
>>> typedef itk::RGBPixel<float> InternalType;
>>>
>>> typedef float ExternalType;
>>>
>>>
>>>
>>> static ExternalType Get( const InternalType & input )
>>>
>>> {
>>>
>>> return static_cast<ExternalType>( input.GetRed() );
>>>
>>> }
>>>
>>>};
>>>
>>>
>>>
>>>int main( int argc, char * argv [] )
>>>
>>>{
>>>
>>>
>>>
>>> if( argc < 2 )
>>>
>>> {
>>>
>>> std::cerr << "Requiere los siguientes argumentos en la linea de
>>>comandos:" << std::endl;
>>>
>>> std::cerr << "Usage : HaloNucleo FicheroImagenEntrada " <<
>>>
>>>std::endl;
>>>
>>> return -1;
>>>
>>> }
>>>
>>>
>>>
>>> typedef unsigned char TipoPixel;
>>>
>>> const unsigned int Dimension = 2;
>>>
>>>
>>>
>>>
>>>
>>> //////////// LECTURA DE LA IMAGEN ///////////////////////
>>>
>>> typedef RedChannelPixelAccessor::InternalType InputPixelType;
>>>
>>> typedef itk::Image< InputPixelType, Dimension > ImageType;
>>>
>>> typedef itk::ImageAdaptor< ImageType,
>>>
>>> RedChannelPixelAccessor > ImageAdaptorType;
>>>
>>> ImageAdaptorType::Pointer adaptor = ImageAdaptorType::New();
>>>
>>> typedef itk::ImageFileReader< ImageType > ReaderType;
>>>
>>> ReaderType::Pointer reader = ReaderType::New();
>>>
>>> reader->SetFileName( argv[1] );
>>>
>>> reader->Update();
>>>
>>> adaptor->SetImage( reader->GetOutput() );
>>>
>>> typedef itk::Statistics::ScalarImageToListAdaptor<
>>>
>>> ImageType > TipoAdaptador;
>>>
>>> typedef itk::Image< unsigned char, Dimension > OutputImageType;
>>>
>>> typedef itk::RescaleIntensityImageFilter< ImageAdaptorType,
>>>
>>> OutputImageType
>>>
>>> > RescalerType;
>>>
>>> RescalerType::Pointer rescaler = RescalerType::New();
>>>
>>> rescaler->SetOutputMinimum( 0 );
>>>
>>> rescaler->SetOutputMaximum( 255 );
>>>
>>> rescaler->SetInput( adaptor );
>>>
>>>
>>>
>>>////////// GENERACION DEL HISTOGRAMA
>>>///////////////////
>>>
>>> typedef TipoPixel TipoMedidaHistograma;
>>>
>>> typedef itk::Statistics::ListSampleToHistogramGenerator<
>>>
>>> ImageAdaptorType,
>>>
>>> TipoMedidaHistograma
>>>
>>> > TipoGenerador;
>>>
>>> TipoGenerador::Pointer generator = TipoGenerador::New();
>>>
>>> typedef TipoGenerador::HistogramType Histograma;
>>>
>>> Histograma::SizeType size;
>>>
>>> size.Fill( 255 );
>>>
>>> generator->SetListSample( rescaler );
>>>
>>> generator->SetNumberOfBins( size );
>>>
>>> generator->SetMarginalScale( 10.0 );
>>>
>>> generator->Update();
>>>
>>> Histograma::Pointer histogram = generator->GetOutput();
>>>
>>> const unsigned int histogramSize = histogram->Size();
>>>
>>> std::cout << "Tamano del histograma" << histogramSize << std::endl;
>>>
>>> for( unsigned int bin=0; bin < histogramSize; bin++ )
>>>
>>> {
>>>
>>> std::cout << "bin = " << bin << " frecuencia = ";
>>>
>>> std::cout << histogram->GetFrequency( bin, 0 ) <<std::endl;
>>>
>>> }
>>>
>>> return 0;
>>>
>>>}
>>>
>>>/////////////////////// END CODE ///////////////////////////////////////
>>>
>>>
>>>
>>>
>>>
>>>some errors are the following ones:
>>>
>>>
>>>
>>>Compiling...
>>>halonucleo.cxx
>>>
>
> E:\Insight\Code\Numerics\Statistics\itkListSampleToHistogramGenerator.h(80)
>
>>>: error C2039: 'MeasurementVectorSize' : is not a member of
>>>'ImageAdaptor<class itk::Image<class itk::RGBPixel<float>,2>,class
>>>RedChannelPixelAccessor>'
>>> E:\C++\halonucleo.cxx(142) : see reference to class template
>>>instantiation 'itk::Statistics::ListSampleToHistogramGenerator<class
>>>itk::ImageAdaptor<class itk::Image<class itk::RGBPixel<float>,2>,class
>>>RedChannelPixelAccessor>,unsigned char,c
>>>lass itk::Statistics::DenseFrequencyContainer<float> >' being compiled
>>>
>>> ...
>>>
>>>halonucleo.obj - 7 error(s), 4 warning(s)
>>
>>--------------------------------------------------------------------------
>
> ----------------------------------------------------------------------------
> -----------------------------
>
>>>
>>>Would somebody know how to say I do to solve them?
>>>
>>>Thanks in advange and regards,
>>>
>>>David
>>>
>>>
>>
>>
>>
>>
>
>