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