/*========================================================================= Program: Insight Segmentation & Registration Toolkit Module: $RCSfile: itkOtsuThresholdImageCalculator.h,v $ Language: C++ Date: $Date: 2004/07/31 12:19:28 $ Version: $Revision: 1.6 $ Copyright (c) Insight Software Consortium. All rights reserved. See ITKCopyright.txt or http://www.itk.org/HTML/Copyright.htm for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. =========================================================================*/ #ifndef __itkOtsuThresholdImageCalculator_h #define __itkOtsuThresholdImageCalculator_h #include "itkObject.h" #include "itkObjectFactory.h" #include "itkNumericTraits.h" namespace itk { /** \class OtsuThresholdImageCalculator * \brief Computes the Otsu's threshold for an image. * * This calculator computes the Otsu's threshold which separates an image * into foreground and background components. The method relies on a * histogram of image intensities. The basic idea is to maximize the * between-class variance. * * This class is templated over the input image type. * * \warning This method assumes that the input image consists of scalar pixel * types. * * \ingroup Operators */ template class ITK_EXPORT OtsuThresholdImageCalculator : public Object { public: /** Standard class typedefs. */ typedef OtsuThresholdImageCalculator Self; typedef Object Superclass; typedef SmartPointer Pointer; typedef SmartPointer ConstPointer; /** Method for creation through the object factory. */ itkNewMacro(Self); /** Run-time type information (and related methods). */ itkTypeMacro(OtsuThresholdImageCalculator, Object); /** Type definition for the input image. */ typedef TInputImage ImageType; /** Pointer type for the image. */ typedef typename TInputImage::Pointer ImagePointer; /** Const Pointer type for the image. */ typedef typename TInputImage::ConstPointer ImageConstPointer; /** Type definition for the input image pixel type. */ typedef typename TInputImage::PixelType PixelType; /** Set the input image. */ itkSetConstObjectMacro(Image,ImageType); /** Compute the Otsu's threshold for the input image. */ void Compute(void); /** Return the Otsu's threshold value. */ itkGetMacro(Threshold,PixelType); /** Set/Get the number of histogram bins. Default is 128. */ itkSetClampMacro( NumberOfHistogramBins, unsigned long, 1, NumericTraits::max() ); itkGetMacro( NumberOfHistogramBins, unsigned long ); protected: OtsuThresholdImageCalculator(); virtual ~OtsuThresholdImageCalculator() {}; void PrintSelf(std::ostream& os, Indent indent) const; private: OtsuThresholdImageCalculator(const Self&); //purposely not implemented void operator=(const Self&); //purposely not implemented PixelType m_Threshold; unsigned long m_NumberOfHistogramBins; ImageConstPointer m_Image; }; } // end namespace itk #ifndef ITK_MANUAL_INSTANTIATION #include "itkOtsuThresholdImageCalculator.txx" #endif #endif