X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=itk%2FclitkExplosionControlledThresholdConnectedImageFilter.h;fp=itk%2FclitkExplosionControlledThresholdConnectedImageFilter.h;h=e325f375e8ec2e5edad7c0fc0b378d39dc47a8f8;hb=23e1206b38d3b26f254fd01ebb5e0f0b5bb193fa;hp=0000000000000000000000000000000000000000;hpb=0d181563607d9b97bc296cfab1ab5f2bb69c3db9;p=clitk.git diff --git a/itk/clitkExplosionControlledThresholdConnectedImageFilter.h b/itk/clitkExplosionControlledThresholdConnectedImageFilter.h new file mode 100644 index 0000000..e325f37 --- /dev/null +++ b/itk/clitkExplosionControlledThresholdConnectedImageFilter.h @@ -0,0 +1,182 @@ +#ifndef __clitkExplosionControlledThresholdConnectedImageFilter_h +#define __clitkExplosionControlledThresholdConnectedImageFilter_h + +#include "itkImage.h" +#include "itkImageToImageFilter.h" + +namespace clitk { + +/** \class ExplosionControlledThresholdConnectedImageFilter + * \brief Label pixels that are connected to a seed and lie within a neighborhood + * + * ExplosionControlledThresholdConnectedImageFilter labels pixels with ReplaceValue that + * are connected to an initial Seed AND whose neighbors all lie within a + * Lower and Upper threshold range. + * + * \ingroup RegionGrowingSegmentation + */ +template +class ITK_EXPORT ExplosionControlledThresholdConnectedImageFilter: + public itk::ImageToImageFilter +{ +public: + /** Standard class typedefs. */ + typedef ExplosionControlledThresholdConnectedImageFilter Self; + typedef itk::ImageToImageFilter Superclass; + typedef itk::SmartPointer Pointer; + typedef itk::SmartPointer ConstPointer; + + /** Method for creation through the object factory. */ + itkNewMacro(Self); + + /** Run-time type information (and related methods). */ + itkTypeMacro(ExplosionControlledThresholdConnectedImageFilter, + ImageToImageFilter); + + typedef TInputImage InputImageType; + typedef typename InputImageType::Pointer InputImagePointer; + typedef typename InputImageType::RegionType InputImageRegionType; + typedef typename InputImageType::PixelType InputImagePixelType; + typedef typename InputImageType::IndexType IndexType; + typedef typename InputImageType::SizeType InputImageSizeType; + + typedef TOutputImage OutputImageType; + typedef typename OutputImageType::Pointer OutputImagePointer; + typedef typename OutputImageType::RegionType OutputImageRegionType; + typedef typename OutputImageType::PixelType OutputImagePixelType; + + void PrintSelf ( std::ostream& os, itk::Indent indent ) const; + + /** Clear the seeds */ + void ClearSeeds(); + + /** Set seed point. */ + void SetSeed(const IndexType & seed); + + /** Add a seed point */ + void AddSeed ( const IndexType & seed ); + + // Set/Get the lower threshold. The default is 0. + itkSetMacro(Lower, InputImagePixelType); + itkGetConstMacro(Lower, InputImagePixelType); + + // Set/Get the upper threshold. The default is the largest possible value for the InputPixelType. + itkSetMacro(Upper, InputImagePixelType); + itkGetConstMacro(Upper, InputImagePixelType); + + /** Set/Get value to replace thresholded pixels. Pixels that lie * + * within Lower and Upper (inclusive) will be replaced with this + * value. The default is 1. */ + itkSetMacro(ReplaceValue, OutputImagePixelType); + itkGetConstMacro(ReplaceValue, OutputImagePixelType); + + // /** Set the radius of the neighborhood used for a mask. */ + // itkSetMacro(Radius, InputImageSizeType); + + // /** Get the radius of the neighborhood used to compute the median */ + // itkGetConstReferenceMacro(Radius, InputImageSizeType); + + /** ImageDimension constants */ + itkStaticConstMacro(InputImageDimension, unsigned int, + TInputImage::ImageDimension); + itkStaticConstMacro(OutputImageDimension, unsigned int, + TOutputImage::ImageDimension); + +#ifdef ITK_USE_CONCEPT_CHECKING + /** Begin concept checking */ + itkConceptMacro(InputEqualityComparableCheck, + (itk::Concept::EqualityComparable)); + itkConceptMacro(OutputEqualityComparableCheck, + (itk::Concept::EqualityComparable)); + itkConceptMacro(SameDimensionCheck, + (itk::Concept::SameDimension)); + itkConceptMacro(InputOStreamWritableCheck, + (itk::Concept::OStreamWritable)); + itkConceptMacro(OutputOStreamWritableCheck, + (itk::Concept::OStreamWritable)); + /** End concept checking */ +#endif + + // JV + itkBooleanMacro(Verbose); + itkSetMacro( Verbose, bool); + itkGetConstReferenceMacro( Verbose, bool); + + itkBooleanMacro(FullyConnected); + itkSetMacro( FullyConnected, bool); + itkGetConstReferenceMacro( FullyConnected, bool); + + itkSetMacro( FinalLower, InputImagePixelType); + itkGetConstMacro( FinalLower, InputImagePixelType); + + itkSetMacro( FinalUpper, InputImagePixelType); + itkGetConstMacro( FinalUpper, InputImagePixelType); + + itkBooleanMacro(AdaptLowerBorder); + itkSetMacro( AdaptLowerBorder, bool); + itkGetConstReferenceMacro( AdaptLowerBorder, bool); + + itkBooleanMacro(AdaptUpperBorder); + itkSetMacro( AdaptUpperBorder, bool); + itkGetConstReferenceMacro( AdaptUpperBorder, bool); + + itkSetMacro( Multiplier, double); + itkGetConstMacro( Multiplier, double); + + itkSetMacro( MaximumUpperThreshold, InputImagePixelType); + itkGetConstMacro( MaximumUpperThreshold, InputImagePixelType); + + itkSetMacro( MinimumLowerThreshold, InputImagePixelType); + itkGetConstMacro( MinimumLowerThreshold, InputImagePixelType); + + itkSetMacro(ThresholdStepSize, InputImagePixelType); + itkGetConstMacro( ThresholdStepSize, InputImagePixelType); + + itkSetMacro( MinimumThresholdStepSize, InputImagePixelType); + itkGetConstMacro( MinimumThresholdStepSize, InputImagePixelType); + + itkSetMacro( MinimumSize, unsigned int); + itkGetConstMacro( MinimumSize,unsigned int); + +protected: + ExplosionControlledThresholdConnectedImageFilter(); + ~ExplosionControlledThresholdConnectedImageFilter(){}; + std::vector m_Seeds; + InputImagePixelType m_Lower; + InputImagePixelType m_Upper; + OutputImagePixelType m_ReplaceValue; + + // JV + bool m_Verbose; + bool m_FullyConnected; + bool m_AdaptLowerBorder; + bool m_AdaptUpperBorder; + InputImagePixelType m_FinalLower; + InputImagePixelType m_FinalUpper; + double m_Multiplier; + InputImagePixelType m_MaximumUpperThreshold; + InputImagePixelType m_MinimumLowerThreshold; + InputImagePixelType m_MinimumThresholdStepSize; + InputImagePixelType m_ThresholdStepSize; + unsigned int m_MinimumSize; + + // Override since the filter needs all the data for the algorithm + void GenerateInputRequestedRegion(); + + // Override since the filter produces the entire dataset + void EnlargeOutputRequestedRegion(itk::DataObject *output); + void GenerateData(); + +private: + ExplosionControlledThresholdConnectedImageFilter(const Self&); //purposely not implemented + void operator=(const Self&); //purposely not implemented + +}; + +} // end namespace clitk + +#ifndef ITK_MANUAL_INSTANTIATION +#include "clitkExplosionControlledThresholdConnectedImageFilter.txx" +#endif + +#endif