[Insight-users] Create the histogram of an image
Miller, James V (Research)
millerjv at crd . ge . com
Fri, 20 Jun 2003 09:37:23 -0400
Jisung,
Should be an adaptor such that step #1 doesn't need to copy the image?
Should we have an encapsulation of these steps to make it easier on
the user? Something like a ImageToHistogramGenerator that would perform
the steps you outlined.
Jim
> -----Original Message-----
> From: Jisung Kim [mailto:bahrahm at yahoo . com]
> Sent: Thursday, June 19, 2003 9:44 PM
> To: SERIOT_Rimi________DEC/SPUA/LTEC; Insight-Users
> Subject: Re: [Insight-users] Create the histogram of an image
>
>
> 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_Remi________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]
> > > Envoye : mercredi 18 juin 2003 16:02
> > > A : SERIOT Remi 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 Remi 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
> > > >
> > > > Remi
> > > >
> > > >
> > > >>-----Message d'origine-----
> > > >>De : Joshua Cates [mailto:cates at sci . utah . edu]
> > > >>Envoye : vendredi 13 juin 2003 18:05
> > > >>A : SERIOT Remi DEC/SPUA/LTEC
> > > >>Cc : 'insight-users at public . kitware . com'
> > > >>Objet : RE: [Insight-users] How to create my own
> >
> > > >>NeighborhoodOperator ?
> > > >>
> > > >>
> > > >>Hi Remi,
> > > >>
> > > >>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
> _______________________________________________
> Insight-users mailing list
> Insight-users at itk . org
> http://www . itk . org/mailman/listinfo/insight-users
>