X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=itk%2FclitkRelativePositionAnalyzerFilter.h;h=a41df8b859ead5e1ee7333c379e3b0650278092f;hb=595624eb4297e747630105d45017de69733caef2;hp=2933958725e32c1e9dbe48ea811894699641348c;hpb=aeb947ddd800ab06cf4916c9371bca3832056b4f;p=clitk.git diff --git a/itk/clitkRelativePositionAnalyzerFilter.h b/itk/clitkRelativePositionAnalyzerFilter.h index 2933958..a41df8b 100644 --- a/itk/clitkRelativePositionAnalyzerFilter.h +++ b/itk/clitkRelativePositionAnalyzerFilter.h @@ -20,28 +20,36 @@ #define CLITKRELATIVEPOSITIONANALYZERFILTER_H // clitk -#include "clitkCommon.h" +#include "clitkFilterWithAnatomicalFeatureDatabaseManagement.h" +#include "clitkFilterBase.h" +#include "clitkSliceBySliceRelativePositionFilter.h" +#include "clitkRelativePositionDataBase.h" // itk #include +#include namespace clitk { //-------------------------------------------------------------------- /* - TODO + Analyze the relative position of a Target (mask image) according + to some Object (mask image), in a given Support (mask + image). Compute the optimal threshold allowing to remove the + maximal area from the Support without removing area belonging to + the Target. */ //-------------------------------------------------------------------- template - class ITK_EXPORT RelativePositionAnalyzerFilter: - public itk::ImageToImageFilter + class RelativePositionAnalyzerFilter: + public itk::ImageToImageFilter { public: /** Standard class typedefs. */ typedef itk::ImageToImageFilter Superclass; - typedef RelativePositionAnalyzerFilter Self; + typedef RelativePositionAnalyzerFilter Self; typedef itk::SmartPointer Pointer; typedef itk::SmartPointer ConstPointer; @@ -63,6 +71,7 @@ namespace clitk { /** ImageDimension constants */ itkStaticConstMacro(ImageDimension, unsigned int, ImageType::ImageDimension); + FILTERBASE_INIT; typedef itk::Image FloatImageType; /** Input : initial image and object */ @@ -70,33 +79,75 @@ namespace clitk { void SetInputObject(const ImageType * image); void SetInputTarget(const ImageType * image); + // Input + // supportname, objectname multiple targetname + // Options - itkSetMacro(VerboseFlag, bool); - itkGetConstMacro(VerboseFlag, bool); - itkBooleanMacro(VerboseFlag); - itkGetConstMacro(BackgroundValue, PixelType); itkSetMacro(BackgroundValue, PixelType); itkGetConstMacro(ForegroundValue, PixelType); itkSetMacro(ForegroundValue, PixelType); + clitk::RelativePositionDirectionType & GetDirection() { return m_Direction; } + void SetDirection(clitk::RelativePositionDirectionType & d) { m_Direction = d; } + + itkGetConstMacro(NumberOfBins, int); + itkSetMacro(NumberOfBins, int); + + itkGetConstMacro(AreaLossTolerance, double); + itkSetMacro(AreaLossTolerance, double); + + itkGetConstMacro(SupportSize, int); + itkGetConstMacro(TargetSize, int); + itkGetConstMacro(SizeWithThreshold, int); + itkGetConstMacro(SizeWithReverseThreshold, int); + + itkGetConstMacro(Info, clitk::RelativePositionInformationType); + itkGetConstMacro(InfoReverse, clitk::RelativePositionInformationType); + // For debug void PrintOptions(); + + // Print output + void Print(std::ostream & os=std::cout); - protected: + // I dont want to verify inputs information + virtual void VerifyInputInformation() { } + + protected: RelativePositionAnalyzerFilter(); virtual ~RelativePositionAnalyzerFilter() {} - bool m_VerboseFlag; + itkSetMacro(SupportSize, int); + itkSetMacro(TargetSize, int); + itkSetMacro(SizeWithThreshold, int); + itkSetMacro(SizeWithReverseThreshold, int); + PixelType m_BackgroundValue; PixelType m_ForegroundValue; ImagePointer m_Support; ImagePointer m_Object; ImagePointer m_Target; - + int m_NumberOfBins; + double m_AreaLossTolerance; + int m_SupportSize; + int m_TargetSize; + int m_SizeWithReverseThreshold; + int m_SizeWithThreshold; + clitk::RelativePositionDirectionType m_Direction; + clitk::RelativePositionInformationType m_Info; + clitk::RelativePositionInformationType m_InfoReverse; + + virtual void GenerateOutputInformation(); virtual void GenerateData(); + typename FloatImageType::Pointer + ComputeFuzzyMap(ImageType * object, ImageType * target, ImageType * support, double angle); + + void + ComputeOptimalThresholds(FloatImageType * map, ImageType * target, int bins, double tolerance, + double & threshold, double & reverseThreshold); private: RelativePositionAnalyzerFilter(const Self&); //purposely not implemented void operator=(const Self&); //purposely not implemented @@ -107,8 +158,6 @@ namespace clitk { } // end namespace clitk //-------------------------------------------------------------------- -#ifndef ITK_MANUAL_INSTANTIATION #include "clitkRelativePositionAnalyzerFilter.txx" -#endif #endif