ITK/Examples/Broken/Statistics/ImageToHistogramFilter: Difference between revisions

From KitwarePublic
< ITK‎ | Examples
Jump to navigationJump to search
mNo edit summary
No edit summary
Line 1: Line 1:
Iterator not increasing over the second two components?
Iterator not increasing over the second two components?
Output is
<source lang="text">
Index = [32.6719, 0, 0]Frequency = 0
Index = [98.0156, 0, 0]Frequency = 0
Index = [163.359, 0, 0]Frequency = 0
Index = [228.703, 0, 0]Frequency = 0
Index = [32.6719, 0, 0]Frequency = 0
Index = [98.0156, 0, 0]Frequency = 0
Index = [163.359, 0, 0]Frequency = 0
Index = [228.703, 0, 0]Frequency = 0
Index = [32.6719, 0, 0]Frequency = 0
Index = [98.0156, 0, 0]Frequency = 0
Index = [163.359, 0, 0]Frequency = 0
Index = [228.703, 0, 0]Frequency = 0
Index = [32.6719, 0, 0]Frequency = 0
Index = [98.0156, 0, 0]Frequency = 0
Index = [163.359, 0, 0]Frequency = 0
Index = [228.703, 0, 0]Frequency = 0
Index = [32.6719, 0, 0]Frequency = 0
Index = [98.0156, 0, 0]Frequency = 0
Index = [163.359, 0, 0]Frequency = 0
Index = [228.703, 0, 0]Frequency = 0
Index = [32.6719, 0, 0]Frequency = 0
Index = [98.0156, 0, 0]Frequency = 0
Index = [163.359, 0, 0]Frequency = 0
Index = [228.703, 0, 0]Frequency = 0
Index = [32.6719, 0, 0]Frequency = 0
Index = [98.0156, 0, 0]Frequency = 0
Index = [163.359, 0, 0]Frequency = 0
Index = [228.703, 0, 0]Frequency = 0
Index = [32.6719, 0, 0]Frequency = 0
Index = [98.0156, 0, 0]Frequency = 0
Index = [163.359, 0, 0]Frequency = 0
Index = [228.703, 0, 0]Frequency = 0
Index = [32.6719, 0, 0]Frequency = 0
Index = [98.0156, 0, 0]Frequency = 0
Index = [163.359, 0, 0]Frequency = 0
Index = [228.703, 0, 0]Frequency = 0
Index = [32.6719, 0, 0]Frequency = 0
Index = [98.0156, 0, 0]Frequency = 0
Index = [163.359, 0, 0]Frequency = 0
Index = [228.703, 0, 0]Frequency = 0
Index = [32.6719, 0, 0]Frequency = 0
Index = [98.0156, 0, 0]Frequency = 0
Index = [163.359, 0, 0]Frequency = 0
Index = [228.703, 0, 0]Frequency = 0
Index = [32.6719, 0, 0]Frequency = 0
Index = [98.0156, 0, 0]Frequency = 0
Index = [163.359, 0, 0]Frequency = 0
Index = [228.703, 0, 0]Frequency = 0
Index = [32.6719, 0, 0]Frequency = 0
Index = [98.0156, 0, 0]Frequency = 0
Index = [163.359, 0, 0]Frequency = 0
Index = [228.703, 0, 0]Frequency = 0
Index = [32.6719, 0, 0]Frequency = 0
Index = [98.0156, 0, 0]Frequency = 0
Index = [163.359, 0, 0]Frequency = 0
Index = [228.703, 0, 0]Frequency = 0
Index = [32.6719, 0, 0]Frequency = 0
Index = [98.0156, 0, 0]Frequency = 0
Index = [163.359, 0, 0]Frequency = 0
Index = [228.703, 0, 0]Frequency = 0
Index = [32.6719, 0, 0]Frequency = 0
Index = [98.0156, 0, 0]Frequency = 0
Index = [163.359, 0, 0]Frequency = 0
Index = [228.703, 0, 0]Frequency = 0
Frequency = 0
</source>


==ImageToHistogramFilter.cxx==
==ImageToHistogramFilter.cxx==
Line 33: Line 102:
   HistogramSizeType histogramSize( MeasurementVectorSize );
   HistogramSizeType histogramSize( MeasurementVectorSize );


   histogramSize[0] = 256;  // number of bins for the Red  channel
   histogramSize[0] = 4;  // number of bins for the Red  channel
   histogramSize[1] = 256;  // number of bins for the Green channel
   histogramSize[1] = 4;  // number of bins for the Green channel
   histogramSize[2] = 256;  // number of bins for the Blue  channel
   histogramSize[2] = 4;  // number of bins for the Blue  channel


  // Compute the bounds of the histrogram automatically
   filter->SetHistogramSize(histogramSize);
   filter->SetHistogramSize(histogramSize);
   filter->SetMarginalScale(10); // Required (could this be set in the filter?)
   filter->SetMarginalScale(10); // Required (could this be set in the filter?)
Line 44: Line 112:
   const HistogramType * histogram = filter->GetOutput();
   const HistogramType * histogram = filter->GetOutput();


   HistogramType::ConstIterator histogramItr = histogram->Begin();
   HistogramType::ConstIterator histogramIterator = histogram->Begin();


   std::string filename = "/home/doriad/histogram.txt";
   //std::string filename = "/home/doriad/histogram.txt";
   std::ofstream fout(filename.c_str());
   //std::ofstream fout(filename.c_str());


   while( histogramItr != histogram->End() )
   while( histogramIterator  != histogram->End() )
     {
     {
     //std::cout << "Index = " << histogram->GetIndex(histogramItr.GetMeasurementVector()) << "Frequency = " << histogramItr.GetFrequency() << std::endl;
     std::cout << "Index = " << histogramIterator.GetMeasurementVector() << "Frequency = " << histogramIterator.GetFrequency() << std::endl;
     fout << "Index = " << histogram->GetIndex(histogramItr.GetMeasurementVector()) << "Frequency = " << histogramItr.GetFrequency() << std::endl;
     //fout << "Index = " << histogram->GetIndex(histogramItr.GetMeasurementVector()) << "Frequency = " << histogramItr.GetFrequency() << std::endl;
     ++histogramItr;
     ++histogramIterator ;
     }
     }
   fout.close();
   //fout.close();
    
    
   HistogramType::MeasurementVectorType mv(3);
   HistogramType::MeasurementVectorType mv(3);

Revision as of 14:45, 16 November 2010

Iterator not increasing over the second two components?

Output is <source lang="text">

Index = [32.6719, 0, 0]Frequency = 0

Index = [98.0156, 0, 0]Frequency = 0 Index = [163.359, 0, 0]Frequency = 0 Index = [228.703, 0, 0]Frequency = 0 Index = [32.6719, 0, 0]Frequency = 0 Index = [98.0156, 0, 0]Frequency = 0 Index = [163.359, 0, 0]Frequency = 0 Index = [228.703, 0, 0]Frequency = 0 Index = [32.6719, 0, 0]Frequency = 0 Index = [98.0156, 0, 0]Frequency = 0 Index = [163.359, 0, 0]Frequency = 0 Index = [228.703, 0, 0]Frequency = 0 Index = [32.6719, 0, 0]Frequency = 0 Index = [98.0156, 0, 0]Frequency = 0 Index = [163.359, 0, 0]Frequency = 0 Index = [228.703, 0, 0]Frequency = 0 Index = [32.6719, 0, 0]Frequency = 0 Index = [98.0156, 0, 0]Frequency = 0 Index = [163.359, 0, 0]Frequency = 0 Index = [228.703, 0, 0]Frequency = 0 Index = [32.6719, 0, 0]Frequency = 0 Index = [98.0156, 0, 0]Frequency = 0 Index = [163.359, 0, 0]Frequency = 0 Index = [228.703, 0, 0]Frequency = 0 Index = [32.6719, 0, 0]Frequency = 0 Index = [98.0156, 0, 0]Frequency = 0 Index = [163.359, 0, 0]Frequency = 0 Index = [228.703, 0, 0]Frequency = 0 Index = [32.6719, 0, 0]Frequency = 0 Index = [98.0156, 0, 0]Frequency = 0 Index = [163.359, 0, 0]Frequency = 0 Index = [228.703, 0, 0]Frequency = 0 Index = [32.6719, 0, 0]Frequency = 0 Index = [98.0156, 0, 0]Frequency = 0 Index = [163.359, 0, 0]Frequency = 0 Index = [228.703, 0, 0]Frequency = 0 Index = [32.6719, 0, 0]Frequency = 0 Index = [98.0156, 0, 0]Frequency = 0 Index = [163.359, 0, 0]Frequency = 0 Index = [228.703, 0, 0]Frequency = 0 Index = [32.6719, 0, 0]Frequency = 0 Index = [98.0156, 0, 0]Frequency = 0 Index = [163.359, 0, 0]Frequency = 0 Index = [228.703, 0, 0]Frequency = 0 Index = [32.6719, 0, 0]Frequency = 0 Index = [98.0156, 0, 0]Frequency = 0 Index = [163.359, 0, 0]Frequency = 0 Index = [228.703, 0, 0]Frequency = 0 Index = [32.6719, 0, 0]Frequency = 0 Index = [98.0156, 0, 0]Frequency = 0 Index = [163.359, 0, 0]Frequency = 0 Index = [228.703, 0, 0]Frequency = 0 Index = [32.6719, 0, 0]Frequency = 0 Index = [98.0156, 0, 0]Frequency = 0 Index = [163.359, 0, 0]Frequency = 0 Index = [228.703, 0, 0]Frequency = 0 Index = [32.6719, 0, 0]Frequency = 0 Index = [98.0156, 0, 0]Frequency = 0 Index = [163.359, 0, 0]Frequency = 0 Index = [228.703, 0, 0]Frequency = 0 Index = [32.6719, 0, 0]Frequency = 0 Index = [98.0156, 0, 0]Frequency = 0 Index = [163.359, 0, 0]Frequency = 0 Index = [228.703, 0, 0]Frequency = 0 Frequency = 0 </source>

ImageToHistogramFilter.cxx

<source lang="cpp">

  1. include "itkImageToHistogramFilter.h"
  2. include "itkImage.h"
  3. include "itkRGBPixel.h"
  4. include "itkImageRegionIteratorWithIndex.h"
  1. include <fstream>

typedef itk::RGBPixel<unsigned char> RGBPixelType; typedef itk::Image< RGBPixelType, 2> RGBImageType;

void CreateImage(RGBImageType::Pointer image);

int main(int, char *[]) {

 const unsigned int MeasurementVectorSize = 3; // RGB
 RGBImageType::Pointer image = RGBImageType::New();
 CreateImage(image);
 typedef itk::Statistics::ImageToHistogramFilter< RGBImageType >         HistogramFilterType;
 typedef HistogramFilterType::HistogramMeasurementVectorType             HistogramMeasurementVectorType;
 typedef HistogramFilterType::HistogramSizeType                          HistogramSizeType;
 typedef HistogramFilterType::HistogramType                              HistogramType;
 HistogramFilterType::Pointer filter = HistogramFilterType::New();
 filter->SetInput(image);
 filter->SetAutoMinimumMaximum(true);
 HistogramSizeType histogramSize( MeasurementVectorSize );
 histogramSize[0] = 4;  // number of bins for the Red   channel
 histogramSize[1] = 4;  // number of bins for the Green channel
 histogramSize[2] = 4;  // number of bins for the Blue  channel
 filter->SetHistogramSize(histogramSize);
 filter->SetMarginalScale(10); // Required (could this be set in the filter?)
 filter->Update();
 const HistogramType * histogram = filter->GetOutput();
 HistogramType::ConstIterator histogramIterator = histogram->Begin();
 //std::string filename = "/home/doriad/histogram.txt";
 //std::ofstream fout(filename.c_str());
 while( histogramIterator  != histogram->End() )
   {
   std::cout << "Index = " << histogramIterator.GetMeasurementVector() << "Frequency = " << histogramIterator.GetFrequency() << std::endl;
   //fout << "Index = " << histogram->GetIndex(histogramItr.GetMeasurementVector()) << "Frequency = " << histogramItr.GetFrequency() << std::endl;
   ++histogramIterator ;
   }
 //fout.close();
 
 HistogramType::MeasurementVectorType mv(3);
 mv[0] = 255;
 mv[1] = 0;
 mv[2] = 0;
 std::cout << "Frequency = " << histogram->GetFrequency(histogram->GetIndex(mv)) << std::endl;
 return EXIT_SUCCESS;

}

void CreateImage(RGBImageType::Pointer image) {

 // Create a black image with a red square and a green square.
 // This should produce a histogram with very strong spikes.
 RGBImageType::SizeType   size;
 size[0] = 3;
 size[1] = 3;
 RGBImageType::IndexType  start;
 start[0] = 0;
 start[1] = 0;
 RGBImageType::RegionType region;
 region.SetIndex(start);
 region.SetSize(size);
 image->SetRegions(region);
 image->Allocate();
 itk::ImageRegionIteratorWithIndex< RGBImageType > iterator( image, image->GetLargestPossibleRegion() );
 iterator.GoToBegin();
 RGBPixelType redPixel;
 redPixel.SetRed(255);
 redPixel.SetGreen(0);
 redPixel.SetBlue(0);
 RGBPixelType blackPixel;
 blackPixel.SetRed(0);
 blackPixel.SetGreen(0);
 blackPixel.SetBlue(0);
 itk::ImageRegionIterator<RGBImageType> imageIterator(image,region);
 while(!imageIterator.IsAtEnd())
   {
   imageIterator.Set(blackPixel);
   ++imageIterator;
   }
 RGBImageType::IndexType index;
 index[0] = 0; index[1] = 0;
 image->SetPixel(index, redPixel);
 index[0] = 1; index[1] = 0;
 image->SetPixel(index, redPixel);  

} </source>

CMakeLists.txt

<source lang="cmake"> cmake_minimum_required(VERSION 2.6)

PROJECT(ImageToHistogramFilter)

FIND_PACKAGE(ITK REQUIRED) INCLUDE(${ITK_USE_FILE})

ADD_EXECUTABLE(ImageToHistogramFilter ImageToHistogramFilter.cxx) TARGET_LINK_LIBRARIES(ImageToHistogramFilter ITKBasicFilters ITKCommon ITKIO ITKStatistics)

</source>