00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef __itkHoughTransform2DLinesImageFilter_h
00018 #define __itkHoughTransform2DLinesImageFilter_h
00019
00020 #ifdef _MSC_VER
00021 #pragma warning ( disable : 4786 )
00022 #endif
00023
00024 #include "itkImageToImageFilter.h"
00025 #include "itkImage.h"
00026 #include "itkLineSpatialObject.h"
00027
00028 namespace itk
00029 {
00030
00060 template<typename TInputPixelType, typename TOutputPixelType>
00061 class ITK_EXPORT HoughTransform2DLinesImageFilter :
00062 public ImageToImageFilter< Image<TInputPixelType,2>, Image<TOutputPixelType,2> >
00063 {
00064 public:
00065
00067 typedef HoughTransform2DLinesImageFilter Self;
00068
00070 typedef Image<TInputPixelType,2> InputImageType;
00071 typedef typename InputImageType::ConstPointer InputImageConstPointer;
00072
00074 typedef Image<TOutputPixelType,2> OutputImageType;
00075 typedef typename OutputImageType::Pointer OutputImagePointer;
00076
00078 typedef SmartPointer<Self> Pointer;
00079 typedef SmartPointer<const Self> ConstPointer;
00080
00082 typedef LineSpatialObject<2> LineType;
00083 typedef typename LineType::Pointer LinePointer;
00084 typedef std::list<LinePointer> LinesListType;
00085 typedef LineType::LinePointType LinePointType;
00086
00088 typedef ImageToImageFilter<InputImageType, OutputImageType> Superclass;
00089
00091 typedef typename InputImageType::IndexType IndexType;
00092
00094 typedef typename InputImageType::PixelType PixelType;
00095
00097 typedef typename InputImageType::RegionType OutputImageRegionType;
00098
00100 itkTypeMacro( HoughTransform2DLinesImageFilter, ImageToImageFilter );
00101
00103 itkNewMacro(Self);
00104
00106 void GenerateData();
00107
00110 itkSetMacro(Threshold,float);
00111
00113 itkGetMacro(Threshold,float);
00114
00118 itkSetMacro(AngleResolution,float);
00119
00121 itkGetMacro(AngleResolution,float);
00122
00125 itkSetMacro(AngleAxisSize,unsigned int);
00126
00128 itkGetMacro(AngleAxisSize,float);
00129
00131 void Simplify(void);
00132
00134 itkGetObjectMacro(SimplifyAccumulator,OutputImageType);
00135
00137 LinesListType & GetLines(unsigned int n=0);
00138
00140 itkSetMacro(NumberOfLines,unsigned int);
00141 itkGetMacro(NumberOfLines,unsigned int);
00142
00145 itkSetMacro(DiscRadius,float);
00146 itkGetMacro(DiscRadius,float);
00147
00149 itkSetMacro(Variance,float);
00150 itkGetMacro(Variance,float);
00151
00152 protected:
00153
00154 HoughTransform2DLinesImageFilter();
00155 virtual ~HoughTransform2DLinesImageFilter() {};
00156
00157 HoughTransform2DLinesImageFilter(const Self&) {}
00158 void operator=(const Self&) {}
00159
00160 void PrintSelf(std::ostream& os, Indent indent) const;
00161
00162 private:
00163
00164 float m_AngleResolution;
00165 float m_Threshold;
00166 float m_AngleAxisSize;
00167 OutputImagePointer m_SimplifyAccumulator;
00168 LinesListType m_LinesList;
00169 unsigned int m_NumberOfLines;
00170 float m_DiscRadius;
00171 float m_Variance;
00172 unsigned long m_OldModifiedTime;
00173 unsigned long m_OldNumberOfLines;
00174 };
00175
00176 }
00177
00178 #ifndef ITK_MANUAL_INSTANTIATION
00179 #include "itkHoughTransform2DLinesImageFilter.txx"
00180 #endif
00181
00182 #endif