]> Creatis software - clitk.git/blob - itk/clitkAddRelativePositionConstraintToLabelImageFilter.h
some small corrections
[clitk.git] / itk / clitkAddRelativePositionConstraintToLabelImageFilter.h
1 /*=========================================================================
2   Program:   vv                     http://www.creatis.insa-lyon.fr/rio/vv
3
4   Authors belong to: 
5   - University of LYON              http://www.universite-lyon.fr/
6   - Léon Bérard cancer center       http://oncora1.lyon.fnclcc.fr
7   - CREATIS CNRS laboratory         http://www.creatis.insa-lyon.fr
8
9   This software is distributed WITHOUT ANY WARRANTY; without even
10   the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
11   PURPOSE.  See the copyright notices for more information.
12
13   It is distributed under dual licence
14
15   - BSD        See included LICENSE.txt file
16   - CeCILL-B   http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
17   ======================================================================-====*/
18
19 #ifndef CLITKADDRELATIVEPOSITIONCONSTRAINTTOLABELIMAGEFILTER_H
20 #define CLITKADDRELATIVEPOSITIONCONSTRAINTTOLABELIMAGEFILTER_H
21
22 // clitk
23 #include "clitkFilterBase.h"
24
25 // itk
26 #include "itkPasteImageFilter.h"
27
28 // itk ENST
29 #include "RelativePositionPropImageFilter.h"
30
31 namespace clitk {
32   
33   //--------------------------------------------------------------------
34   /*
35     Let A be an initial label image.
36     Let B be a label image with an object. 
37     Let o be an orientation relatively to the B object (for example RightTo, AntTo, InferiorTo ...)
38
39     This filter removes (=set background) from A all points that are
40     not in the wanted o orientation. It uses downsampled version for
41     faster processing, and (try to) take into account discretization
42     problem. Uses [Bloch 1999].
43   */
44   //--------------------------------------------------------------------
45   
46   template <class ImageType>
47   class ITK_EXPORT AddRelativePositionConstraintToLabelImageFilter:
48     public clitk::FilterBase, 
49     public itk::ImageToImageFilter<ImageType, ImageType> 
50   {
51
52   public:
53     /** Standard class typedefs. */
54     typedef itk::ImageToImageFilter<ImageType, ImageType>      Superclass;
55     typedef AddRelativePositionConstraintToLabelImageFilter    Self;
56     typedef itk::SmartPointer<Self>                            Pointer;
57     typedef itk::SmartPointer<const Self>                      ConstPointer;
58        
59     /** Method for creation through the object factory. */
60     itkNewMacro(Self);
61     
62     /** Run-time type information (and related methods). */
63     itkTypeMacro(AddRelativePositionConstraintToLabelImageFilter, ImageToImageFilter);
64     FILTERBASE_INIT;
65
66     /** Some convenient typedefs. */
67     typedef typename ImageType::ConstPointer ImageConstPointer;
68     typedef typename ImageType::Pointer      ImagePointer;
69     typedef typename ImageType::RegionType   RegionType; 
70     typedef typename ImageType::PixelType    PixelType;
71     typedef typename ImageType::SpacingType  SpacingType;
72     typedef typename ImageType::SizeType     SizeType;
73     
74     /** ImageDimension constants */
75     itkStaticConstMacro(ImageDimension, unsigned int, ImageType::ImageDimension);
76     typedef itk::Image<float, ImageDimension> FloatImageType;
77
78     /** Orientation types */
79     typedef enum { RightTo = 0, LeftTo = 1,
80                    AntTo = 2,   PostTo = 3, 
81                    InfTo = 4,   SupTo = 5, Angle = 6
82     } OrientationTypeEnumeration;
83
84     /** Input : initial image and object */
85     void SetInput(const ImageType * image);
86     void SetInputObject(const ImageType * image);
87     
88     // Options
89     void SetOrientationType(OrientationTypeEnumeration orientation);
90     itkGetConstMacro(OrientationType, OrientationTypeEnumeration);
91
92     void SetAngle1(double a);
93     void SetAngle2(double a);
94     itkGetConstMacro(Angle1, double);
95     itkGetConstMacro(Angle2, double);
96
97     itkGetConstMacro(ResampleBeforeRelativePositionFilter, bool);
98     itkSetMacro(ResampleBeforeRelativePositionFilter, bool);
99     itkBooleanMacro(ResampleBeforeRelativePositionFilter);
100
101     itkGetConstMacro(IntermediateSpacing, double);
102     itkSetMacro(IntermediateSpacing, double);
103
104     itkGetConstMacro(FuzzyThreshold, double);
105     itkSetMacro(FuzzyThreshold, double);
106
107     itkGetConstMacro(BackgroundValue, PixelType);
108     itkSetMacro(BackgroundValue, PixelType);
109
110     itkGetConstMacro(ObjectBackgroundValue, PixelType);
111     itkSetMacro(ObjectBackgroundValue, PixelType);
112
113     itkGetConstMacro(AutoCrop, bool);
114     itkSetMacro(AutoCrop, bool);
115     itkBooleanMacro(AutoCrop);
116
117   protected:
118     AddRelativePositionConstraintToLabelImageFilter();
119     virtual ~AddRelativePositionConstraintToLabelImageFilter() {}
120     
121     OrientationTypeEnumeration m_OrientationType;
122     double m_IntermediateSpacing;
123     double m_FuzzyThreshold;
124     PixelType m_BackgroundValue;
125     PixelType m_ObjectBackgroundValue;
126     double m_Angle1;
127     double m_Angle2;
128     bool m_ResampleBeforeRelativePositionFilter;
129     bool m_AutoCrop;
130
131     virtual void GenerateOutputInformation();
132     virtual void GenerateInputRequestedRegion();
133     virtual void GenerateData();
134
135     typedef itk::PasteImageFilter<ImageType,ImageType> PadFilterType;
136     typename ImageType::Pointer working_image;
137     typename ImageType::Pointer object_resampled;
138     typename FloatImageType::Pointer relPos;
139     ImagePointer input;
140     ImagePointer object;
141
142   private:
143     AddRelativePositionConstraintToLabelImageFilter(const Self&); //purposely not implemented
144     void operator=(const Self&); //purposely not implemented
145     
146   }; // end class
147   //--------------------------------------------------------------------
148
149 } // end namespace clitk
150 //--------------------------------------------------------------------
151
152 #ifndef ITK_MANUAL_INSTANTIATION
153 #include "clitkAddRelativePositionConstraintToLabelImageFilter.txx"
154 #endif
155
156 #endif