]> Creatis software - clitk.git/blobdiff - itk/clitkRelativePositionAnalyzerFilter.h
Moved from repository clitk to clitk.private/tests_dav
[clitk.git] / itk / clitkRelativePositionAnalyzerFilter.h
index 2933958725e32c1e9dbe48ea811894699641348c..a41df8b859ead5e1ee7333c379e3b0650278092f 100644 (file)
 #define CLITKRELATIVEPOSITIONANALYZERFILTER_H
 
 // clitk
-#include "clitkCommon.h"
+#include "clitkFilterWithAnatomicalFeatureDatabaseManagement.h"
+#include "clitkFilterBase.h"
+#include "clitkSliceBySliceRelativePositionFilter.h"
+#include "clitkRelativePositionDataBase.h"
 
 // itk
 #include <itkImageToImageFilter.h>
+#include <itkLabelStatisticsImageFilter.h>
 
 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 ImageType>
-  class ITK_EXPORT RelativePositionAnalyzerFilter:
-    public itk::ImageToImageFilter<ImageType, ImageType> 
+  class RelativePositionAnalyzerFilter:
+    public itk::ImageToImageFilter<ImageType, ImageType>
   {
 
   public:
     /** Standard class typedefs. */
     typedef itk::ImageToImageFilter<ImageType, ImageType>      Superclass;
-    typedef RelativePositionAnalyzerFilter                     Self;
+    typedef RelativePositionAnalyzerFilter<ImageType>          Self;
     typedef itk::SmartPointer<Self>                            Pointer;
     typedef itk::SmartPointer<const Self>                      ConstPointer;
        
@@ -63,6 +71,7 @@ namespace clitk {
     
     /** ImageDimension constants */
     itkStaticConstMacro(ImageDimension, unsigned int, ImageType::ImageDimension);
+    FILTERBASE_INIT;
     typedef itk::Image<float, ImageDimension> 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