ITK/Examples/Broken/Statistics/ImageToHistogramFilter: Difference between revisions
Daviddoria (talk | contribs) mNo edit summary |
Daviddoria (talk | contribs) 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] = | histogramSize[0] = 4; // number of bins for the Red channel | ||
histogramSize[1] = | histogramSize[1] = 4; // number of bins for the Green channel | ||
histogramSize[2] = | histogramSize[2] = 4; // number of bins for the Blue channel | ||
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 | 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( | 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; | //fout << "Index = " << histogram->GetIndex(histogramItr.GetMeasurementVector()) << "Frequency = " << histogramItr.GetFrequency() << std::endl; | ||
++ | ++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">
- include "itkImageToHistogramFilter.h"
- include "itkImage.h"
- include "itkRGBPixel.h"
- include "itkImageRegionIteratorWithIndex.h"
- 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>