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::ConstPointer InputImageConstPointer;
00064
00066 typedef Image<TOutputPixelType,2> OutputImageType;
00067 typedef typename OutputImageType::Pointer OutputImagePointer;
00068
00069
00071 typedef ImageToImageFilter< Image<TInputPixelType,2>
00072 , Image<TOutputPixelType,2> > Superclass;
00073
00075 typedef SmartPointer<Self> Pointer;
00076 typedef SmartPointer<const Self> ConstPointer;
00077
00079 typedef typename InputImageType::IndexType IndexType;
00080
00082 typedef typename InputImageType::PixelType PixelType;
00083
00085 typedef typename InputImageType::RegionType OutputImageRegionType;
00086
00088 typedef EllipseSpatialObject<2> CircleType;
00089 typedef typename CircleType::Pointer CirclePointer;
00090 typedef std::list<CirclePointer> CirclesListType;
00091
00093 itkTypeMacro( HoughTransform2DCirclesImageFilter, ImageToImageFilter );
00094
00096 itkNewMacro(Self);
00097
00099 void GenerateData();
00100
00102 void SetRadius(double radius);
00103
00105 itkSetMacro(MinimumRadius,double);
00106
00108 itkSetMacro(MaximumRadius,double);
00109
00112 itkSetMacro(Threshold,double);
00113
00115 itkGetMacro(Threshold,double);
00116
00118 itkGetObjectMacro(RadiusImage,OutputImageType);
00119
00121 itkSetMacro(SigmaGradient,double);
00122
00124 itkGetMacro(SigmaGradient,double);
00125
00127 CirclesListType & GetCircles(unsigned int n=0);
00128
00130 itkSetMacro(NumberOfCircles,unsigned int);
00131 itkGetMacro(NumberOfCircles,unsigned int);
00132
00135 itkSetMacro(DiscRadiusRatio,float);
00136 itkGetMacro(DiscRadiusRatio,float);
00137
00139 itkSetMacro(Variance,float);
00140 itkGetMacro(Variance,float);
00141
00143 itkSetMacro(SweepAngle,float);
00144 itkGetMacro(SweepAngle,float);
00145
00146 protected:
00147
00148 HoughTransform2DCirclesImageFilter();
00149 virtual ~HoughTransform2DCirclesImageFilter() {};
00150
00151 HoughTransform2DCirclesImageFilter(const Self&) {}
00152 void operator=(const Self&) {}
00153
00154 void PrintSelf(std::ostream& os, Indent indent) const;
00155
00156 private:
00157
00158 float m_SweepAngle;
00159 double m_MinimumRadius;
00160 double m_MaximumRadius;
00161 double m_Threshold;
00162 double m_SigmaGradient;
00163 OutputImagePointer m_RadiusImage;
00164 CirclesListType m_CirclesList;
00165 unsigned int m_NumberOfCircles;
00166 float m_DiscRadiusRatio;
00167 float m_Variance;
00168 unsigned long m_OldModifiedTime;
00169 unsigned long m_OldNumberOfCircles;
00170
00171 };
00172
00173 }
00174
00175 #ifndef ITK_MANUAL_INSTANTIATION
00176 #include "itkHoughTransform2DCirclesImageFilter.txx"
00177 #endif
00178
00179 #endif