00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef __itkHoughTransform2DCirclesImageFilter_h
00018 #define __itkHoughTransform2DCirclesImageFilter_h
00019
00020 #ifdef _MSC_VER
00021 #pragma warning ( disable : 4786 )
00022 #endif
00023
00024 #include "itkImageToImageFilter.h"
00025 #include "itkImage.h"
00026 #include "itkEllipseSpatialObject.h"
00027
00028 namespace itk
00029 {
00030
00052 template<typename TInputPixelType, typename TOutputPixelType>
00053 class ITK_EXPORT HoughTransform2DCirclesImageFilter :
00054 public ImageToImageFilter< Image<TInputPixelType,2>, Image<TOutputPixelType,2> >
00055 {
00056 public:
00057
00059 typedef HoughTransform2DCirclesImageFilter Self;
00060
00062 typedef Image<TInputPixelType,2> InputImageType;
00063 typedef typename InputImageType::Pointer InputImagePointer;
00064 typedef typename InputImageType::ConstPointer InputImageConstPointer;
00065
00067 typedef Image<TOutputPixelType,2> OutputImageType;
00068 typedef typename OutputImageType::Pointer OutputImagePointer;
00069
00070
00072 typedef ImageToImageFilter< Image<TInputPixelType,2>
00073 , Image<TOutputPixelType,2> > Superclass;
00074
00076 typedef SmartPointer<Self> Pointer;
00077 typedef SmartPointer<const Self> ConstPointer;
00078
00080 typedef typename InputImageType::IndexType IndexType;
00081
00083 typedef typename InputImageType::PixelType PixelType;
00084
00086 typedef typename InputImageType::RegionType OutputImageRegionType;
00087
00089 typedef EllipseSpatialObject<2> CircleType;
00090 typedef typename CircleType::Pointer CirclePointer;
00091 typedef std::list<CirclePointer> CirclesListType;
00092
00094 itkTypeMacro( HoughTransform2DCirclesImageFilter, ImageToImageFilter );
00095
00097 itkNewMacro(Self);
00098
00100 void GenerateData();
00101
00103 void SetRadius(double radius);
00104
00106 itkSetMacro(MinimumRadius,double);
00107
00109 itkSetMacro(MaximumRadius,double);
00110
00113 itkSetMacro(Threshold,double);
00114
00116 itkGetMacro(Threshold,double);
00117
00119 itkGetObjectMacro(RadiusImage,OutputImageType);
00120
00122 itkSetMacro(SigmaGradient,double);
00123
00125 itkGetMacro(SigmaGradient,double);
00126
00128 CirclesListType & GetCircles(unsigned int n=0);
00129
00131 itkSetMacro(NumberOfCircles,unsigned int);
00132 itkGetMacro(NumberOfCircles,unsigned int);
00133
00136 itkSetMacro(DiscRadiusRatio,float);
00137 itkGetMacro(DiscRadiusRatio,float);
00138
00140 itkSetMacro(Variance,float);
00141 itkGetMacro(Variance,float);
00142
00144 itkSetMacro(SweepAngle,float);
00145 itkGetMacro(SweepAngle,float);
00146
00147 protected:
00148
00149 HoughTransform2DCirclesImageFilter();
00150 virtual ~HoughTransform2DCirclesImageFilter() {};
00151
00152 HoughTransform2DCirclesImageFilter(const Self&) {}
00153 void operator=(const Self&) {}
00154
00155 void PrintSelf(std::ostream& os, Indent indent) const;
00156
00160 void GenerateInputRequestedRegion();
00161
00166 void EnlargeOutputRequestedRegion(DataObject *itkNotUsed(output));
00167
00168 private:
00169
00170 float m_SweepAngle;
00171 double m_MinimumRadius;
00172 double m_MaximumRadius;
00173 double m_Threshold;
00174 double m_SigmaGradient;
00175 OutputImagePointer m_RadiusImage;
00176 CirclesListType m_CirclesList;
00177 unsigned int m_NumberOfCircles;
00178 float m_DiscRadiusRatio;
00179 float m_Variance;
00180 unsigned long m_OldModifiedTime;
00181 unsigned long m_OldNumberOfCircles;
00182
00183 };
00184
00185 }
00186
00187 #ifndef ITK_MANUAL_INSTANTIATION
00188 #include "itkHoughTransform2DCirclesImageFilter.txx"
00189 #endif
00190
00191 #endif