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