]> Creatis software - clitk.git/blobdiff - itk/clitkSliceBySliceRelativePositionFilter.h
In SliceBySliceSetBackgroundFromLineSeparation add keepIfEqual option
[clitk.git] / itk / clitkSliceBySliceRelativePositionFilter.h
index 01f9cd9c833578d802af33e96ba39d0c6cfa43f7..5989e20054c5229a0146543a5be06dba1d60444c 100644 (file)
@@ -21,6 +21,7 @@
 
 // clitk
 #include "clitkFilterBase.h"
+#include "clitkAddRelativePositionConstraintToLabelImageFilter.h"
 
 namespace clitk {
   
@@ -32,13 +33,12 @@ namespace clitk {
   
   template <class ImageType>
   class ITK_EXPORT SliceBySliceRelativePositionFilter:
-    public clitk::FilterBase, 
-    public itk::ImageToImageFilter<ImageType, ImageType> 
+    public AddRelativePositionConstraintToLabelImageFilter<ImageType>
   {
 
   public:
     /** Standard class typedefs. */
-    typedef itk::ImageToImageFilter<ImageType, ImageType> Superclass;
+    typedef AddRelativePositionConstraintToLabelImageFilter<ImageType>   Superclass;
     typedef SliceBySliceRelativePositionFilter              Self;
     typedef itk::SmartPointer<Self>                         Pointer;
     typedef itk::SmartPointer<const Self>                   ConstPointer;
@@ -50,6 +50,11 @@ namespace clitk {
     itkTypeMacro(SliceBySliceRelativePositionFilter, ImageToImageFilter);
     FILTERBASE_INIT;
 
+    /** ImageDimension constants */
+    itkStaticConstMacro(ImageDimension, unsigned int, ImageType::ImageDimension);
+    typedef itk::Image<float, ImageDimension> FloatImageType;
+    typedef itk::Image<float, ImageDimension-1> FloatSliceType;
+
     /** Some convenient typedefs. */
     typedef typename ImageType::ConstPointer ImageConstPointer;
     typedef typename ImageType::Pointer      ImagePointer;
@@ -57,28 +62,50 @@ namespace clitk {
     typedef typename ImageType::PixelType    PixelType;
     typedef typename ImageType::SpacingType  SpacingType;
     typedef typename ImageType::SizeType     SizeType;
+    typedef itk::Image<PixelType, ImageDimension-1> SliceType;
+    typedef clitk::AddRelativePositionConstraintToLabelImageFilter<SliceType> RelPosFilterType;
+    typedef typename RelPosFilterType::OrientationTypeEnumeration OrientationTypeEnumeration;
     
-    /** ImageDimension constants */
-    itkStaticConstMacro(ImageDimension, unsigned int, ImageType::ImageDimension);
-    typedef itk::Image<float, ImageDimension> FloatImageType;
-
     /** Input : initial image and object */
     void SetInput(const ImageType * image);
     void SetInputObject(const ImageType * image);
-    
+
     // Options
+    void PrintOptions(std::ostream & os = std::cout);
     itkGetConstMacro(Direction, int);
     itkSetMacro(Direction, int);
-    itkGetConstMacro(ObjectBackgroundValue, PixelType);
-    itkSetMacro(ObjectBackgroundValue, PixelType);
+
+    itkGetConstMacro(UniqueConnectedComponentBySliceFlag, bool);
+    itkSetMacro(UniqueConnectedComponentBySliceFlag, bool);
+    itkBooleanMacro(UniqueConnectedComponentBySliceFlag);
+
+    itkGetConstMacro(IgnoreEmptySliceObjectFlag, bool);
+    itkSetMacro(IgnoreEmptySliceObjectFlag, bool);
+    itkBooleanMacro(IgnoreEmptySliceObjectFlag);
+
+    itkGetConstMacro(UseTheLargestObjectCCLFlag, bool);
+    itkSetMacro(UseTheLargestObjectCCLFlag, bool);
+    itkBooleanMacro(UseTheLargestObjectCCLFlag);
+
+    itkGetConstMacro(ObjectCCLSelectionFlag, bool);
+    itkSetMacro(ObjectCCLSelectionFlag, bool);
+    itkBooleanMacro(ObjectCCLSelectionFlag);
+    itkGetConstMacro(ObjectCCLSelectionDimension, int);
+    itkSetMacro(ObjectCCLSelectionDimension, int);
+    itkGetConstMacro(ObjectCCLSelectionDirection, int);
+    itkSetMacro(ObjectCCLSelectionDirection, int);
+    itkGetConstMacro(ObjectCCLSelectionIgnoreSingleCCLFlag, bool);
+    itkSetMacro(ObjectCCLSelectionIgnoreSingleCCLFlag, bool);
+    itkBooleanMacro(ObjectCCLSelectionIgnoreSingleCCLFlag);
+
+    itkGetConstMacro(VerboseSlicesFlag, bool);
+    itkSetMacro(VerboseSlicesFlag, bool);
+    itkBooleanMacro(VerboseSlicesFlag);
 
   protected:
     SliceBySliceRelativePositionFilter();
     virtual ~SliceBySliceRelativePositionFilter() {}
     
-    int m_Direction;
-    PixelType m_ObjectBackgroundValue;
-
     virtual void GenerateOutputInformation();
     virtual void GenerateInputRequestedRegion();
     virtual void GenerateData();
@@ -87,6 +114,15 @@ namespace clitk {
     ImagePointer object;
     ImagePointer m_working_input;
     ImagePointer m_working_object;
+    bool         m_UniqueConnectedComponentBySliceFlag;
+    int          m_Direction;
+    bool         m_IgnoreEmptySliceObjectFlag;
+    bool         m_UseTheLargestObjectCCLFlag;
+    bool         m_ObjectCCLSelectionFlag;
+    int          m_ObjectCCLSelectionDimension;
+    int          m_ObjectCCLSelectionDirection;
+    bool         m_ObjectCCLSelectionIgnoreSingleCCLFlag;
+    bool         m_VerboseSlicesFlag;
 
   private:
     SliceBySliceRelativePositionFilter(const Self&); //purposely not implemented
@@ -102,4 +138,8 @@ namespace clitk {
 #include "clitkSliceBySliceRelativePositionFilter.txx"
 #endif
 
+typedef unsigned char                    PixelType_uchar;
+typedef itk::Image<PixelType_uchar, 3>   ImageType_uchar;    
+extern template class clitk::SliceBySliceRelativePositionFilter<ImageType_uchar>;
+
 #endif