[Insight-users] Create the histogram of an image

Jisung Kim bahrahm at yahoo . com
Thu, 19 Jun 2003 18:44:08 -0700 (PDT)


Hi.

You might want to look at the ImageToListAdaptor.cxx
and ListSampleToHistogramGenerator.cxx in the "insight
src dir"/Examples/Statistics.

In ImageToListAdaptor.cxx, you can find how to create
a ListSample from an image. In
ListSampleToHistogramGenerator.cxx, you will find a
way to create a equi-size bin histogram from a
ListSample.

The procedure would be:
1) cast the original image(scalar pixel type) to an
image with array pixel type. (use the
itk::ScalarToArrayCastImageFilter)
2) plug in the output image from the step 1) to the
itk::Statistics::ImageToListAdaptor.
3) create an equi-interval bin histogram using the
itk::Statistics::ListSampleToHistogramGenerator. (The
input for the generator is the ImageToListAdaptor
object from the step 2).

I hope this help.

Thanks,  
--- SERIOT_Rémi________DEC/SPUA/LTEC
<SERIOT at DRNCAD . CEA . FR> wrote:
> Hi Luis,
> 
> Thanks for your help, but do you have a simple way
> for create the histogram
> of an image ?
> 
> I found this code...may be you've got something more
> simple...
> 
> 
>
itk::MinimumMaximumImageCalculator<ImageType>::Pointer
> rangeCalculator = 
> 	
>
itk::MinimumMaximumImageCalculator<ImageType>::New();
> 	rangeCalculator->SetImage( m_image );
> 	rangeCalculator->Compute();
> 
> 	MinValue = rangeCalculator->GetMinimum();
> 	MaxValue = rangeCalculator->GetMaximum();
> 
> 	typedef itk::Statistics::Histogram<PixelType, 1>
> HistogramType;
> 	histogram = HistogramType::New();
> 
> 	HistogramType::SizeType size;
> 	size[0] = MaxValue;
> 	histogram->Initialize( size );
> 
> 	for ( int ibin = 0; ibin < MaxValue - 1; ibin++ ) {
> 		histogram->SetBinMin( 0, ibin, ibin );
> 		histogram->SetBinMax( 0, ibin, ( ibin + 1 ) );
>     }
> 	// put each image pixel into the histogram
> 	typedef itk::ImageRegionConstIterator<ImageType>
> ConstIterator;
> 	ConstIterator iter( m_image,
> m_image->GetBufferedRegion() );
> 
> 	while ( !iter.IsAtEnd() ) {
> 		
> 		PixelType value = iter.Get();
> 		
> 		if ( static_cast<double>(value) >= MinValue && 
> 			 static_cast<double>(value) <= MaxValue ) {
>       
> 			// add sample to histogram
> 
> 			HistogramType::IndexType index;
> 			HistogramType::InstanceIdentifier id;
> 			HistogramType::MeasurementVectorType measurement;
>   
> 			measurement[0] = value;
> 			index = histogram->GetIndex( measurement );
> 			id = histogram->GetInstanceIdentifier( index );
> 			histogram->IncreaseFrequency( id, 1 );
> 		}
> 		++iter;
> 	}
> 
> Thanks
> 
> Remi
> 
> > -----Message d'origine-----
> > De : Luis Ibanez [mailto:luis . ibanez at kitware . com]
> > Envoyé : mercredi 18 juin 2003 16:02
> > À : SERIOT Rémi DEC/SPUA/LTEC
> > Cc : 'Joshua Cates';
> 'insight-users at public . kitware . com'; Jisung Kim
> > Objet : Re: [Insight-users] Sorting watershed
> basins based on size
> > 
> > 
> > 
> > Hi Remi,
> > 
> > It sounds like you could simply compute the
> Histogram
> > of the labeled image.
> > 
> > The histogram will give you the number of pixels
> assigned
> > to each one of the labels, and since the labels
> are unique,
> > you will get the number of pixels on each watersed
> basin.
> > 
> > You will find details on the use of the ITK
> histogram
> > in the Statistics chapter of the SoftwareGuide.
> > 
> >    'insight-users at public . kitware . com'
> > 
> > Section 9.1.3, pdf-page 320
> > 
> > The associated example is available in
> > 
> >     Insight/Examples/Statistics/Histogram.cxx
> > 
> > In the same chapter you will find options for
> sorting.
> > 
> > 
> > 
> > Regards,
> > 
> > 
> >     Luis
> > 
> > 
> > -------------------------------
> > SERIOT Rémi DEC/SPUA/LTEC wrote:
> > > Hi,
> > > 
> > > I would like to sort watershed basins based on
> size, so I 
> > need to calculate
> > > the size of each basin from the labeled image. I
> need to do 
> > that and I don't
> > > wont to re-invent something already done.
> > > I think that I could use a simple ImageIterator
> and an 
> > accumulator for
> > > compute the number of pixels in each basin from
> the labeled 
> > image and then
> > > sort this list for keep only the most
> significant basins.
> > > 
> > > Could I speed it up this process with
> > > itk::watershed::Segmenter::flat_region_t
> information ?
> > > 
> > > Or there is another way to do the same thing ?
> > > 
> > > After that could I have to change the
> EquivalencyTable ?
> > > 
> > > Thanks for your help
> > >  
> > > Rémi
> > > 
> > > 
> > >>-----Message d'origine-----
> > >>De : Joshua Cates [mailto:cates at sci . utah . edu]
> > >>Envoyé : vendredi 13 juin 2003 18:05
> > >>À : SERIOT Rémi DEC/SPUA/LTEC
> > >>Cc : 'insight-users at public . kitware . com'
> > >>Objet : RE: [Insight-users] How to create my own
> 
> > >>NeighborhoodOperator ?
> > >>
> > >>
> > >>Hi Rémi,
> > >>
> > >>Glad to hear the NeighborhoodOperator is working
> out.
> > >>
> > >>In order to sort and merge watershed basins
> based on size you 
> > >>will have to
> > >>modify the itkWatershedSegmenter algorithm to
> keep track of 
> > >>basin sizes.  
> > >>The initial size would need to be computed in
> the gradient 
> > >>descent step of
> > >>itkWatershedSegmenter and then updated and
> maintained during 
> > >>basin merge
> > >>operations.
> > >>
> > >>An alternate approach of a one-time suppression
> of small 
> > basins in the
> > >>initial output might be interesting (but will
> result in a different
> > >>algorithm and I can't guarantee you won't get
> some 
> > >>undesirable grouping of
> > >>basins).  You could calculate the basin sizes
> from the the initial
> > >>segmentation (zero merge level output) of the 
> > >>WatershedSegmenter and then
> > >>use some of the existing code for basin merges
> (in
> > >>itkWatershedSegmentTreeGenerator, for example)
> to pre-merge 
> > >>the smaller
> > >>basins in the segment tree.
> > >>
> > >>Josh.
> > >>______________________________
> > >> Josh Cates			
> > >> School of Computer Science	
> > >> University of Utah
> > >> Email: cates at sci . utah . edu
> > >> Phone: (801) 587-7697
> > >> URL:   http://www . sci . utah . edu/~cates
> > >>
> 
=== message truncated ===


=====
Jisung Kim
bahrahm at yahoo . com
106 Mason Farm Rd.
129 Radiology Research Lab., CB# 7515
Univ. of North Carolina at Chapel Hill
Chapel Hill, NC 27599-7515

__________________________________
Do you Yahoo!?
SBC Yahoo! DSL - Now only $29.95 per month!
http://sbc . yahoo . com