Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #if(_MSC_VER==1200)
00019 #include <itkFixedCenterOfRotationAffineTransform.h>
00020 #endif
00021
00022 #include "mitkHistogramGenerator.h"
00023 #include "mitkImageTimeSelector.h"
00024 #include "mitkImageAccessByItk.h"
00025
00026
00027
00028
00029
00030
00031
00032 #if !defined(ITK_USE_REVIEW_STATISTICS)
00033 #include "itkMITKScalarImageToHistogramGenerator.h"
00034 #else
00035 #include "itkScalarImageToHistogramGenerator.h"
00036 #endif
00037
00038 mitk::HistogramGenerator::HistogramGenerator() : m_Image(NULL), m_Size(256), m_Histogram(NULL)
00039 {
00040
00041 }
00042
00043 mitk::HistogramGenerator::~HistogramGenerator()
00044 {
00045 }
00046
00047 template < typename TPixel, unsigned int VImageDimension >
00048 void InternalCompute(itk::Image< TPixel, VImageDimension >* itkImage, const mitk::HistogramGenerator* mitkHistoGenerator, mitk::HistogramGenerator::HistogramType::ConstPointer& histogram)
00049 {
00050
00051 #if !defined(ITK_USE_REVIEW_STATISTICS)
00052 typedef itk::Statistics::MITKScalarImageToHistogramGenerator<
00053 itk::Image< TPixel, VImageDimension >,
00054 double > HistogramGeneratorType;
00055 #else
00056 typedef itk::Statistics::ScalarImageToHistogramGenerator< itk::Image< TPixel, VImageDimension > >
00057 HistogramGeneratorType;
00058
00059 #endif
00060 typename HistogramGeneratorType::Pointer histogramGenerator = HistogramGeneratorType::New();
00061
00062 histogramGenerator->SetInput( itkImage );
00063
00064 histogramGenerator->SetNumberOfBins( mitkHistoGenerator->GetSize() );
00065
00066 histogramGenerator->Compute();
00067
00068 histogram = histogramGenerator->GetOutput();
00069 }
00070
00071 void mitk::HistogramGenerator::ComputeHistogram()
00072 {
00073 if((m_Histogram.IsNull()) || (m_Histogram->GetMTime() < m_Image->GetMTime()))
00074 {
00075 const_cast<mitk::Image*>(m_Image.GetPointer())->SetRequestedRegionToLargestPossibleRegion();
00076 const_cast<mitk::Image*>(m_Image.GetPointer())->Update();
00077 mitk::ImageTimeSelector::Pointer timeSelector=mitk::ImageTimeSelector::New();
00078 timeSelector->SetInput(m_Image);
00079 timeSelector->SetTimeNr( 0 );
00080 timeSelector->UpdateLargestPossibleRegion();
00081 AccessByItk_2( timeSelector->GetOutput() , InternalCompute, this, m_Histogram);
00082 }
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106 }
00107
00108 float mitk::HistogramGenerator::GetMaximumFrequency() const {
00109 return CalculateMaximumFrequency(this->m_Histogram);
00110 };
00111
00112 float mitk::HistogramGenerator::CalculateMaximumFrequency(const HistogramType* histogram)
00113 {
00114 HistogramType::ConstIterator itr = histogram->Begin();
00115 HistogramType::ConstIterator end = histogram->End();
00116
00117 float maxFreq = 0;
00118 while( itr != end )
00119 {
00120 maxFreq = vnl_math_max(maxFreq,
00121
00122
00123 static_cast<float>(itr.GetFrequency()));
00124 ++itr;
00125 }
00126 return maxFreq;
00127 };