00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef __itkHessianRecursiveGaussianImageFilter_h
00018 #define __itkHessianRecursiveGaussianImageFilter_h
00019
00020 #include "itkRecursiveGaussianImageFilter.h"
00021 #include "itkNthElementImageAdaptor.h"
00022 #include "itkImage.h"
00023 #include "itkSymmetricSecondRankTensor.h"
00024 #include "itkPixelTraits.h"
00025 #include "itkCommand.h"
00026
00027
00028 namespace itk
00029 {
00030
00042
00043
00044
00045 template <typename TInputImage,
00046 typename TOutputImage= Image< SymmetricSecondRankTensor<
00047 ITK_TYPENAME NumericTraits< ITK_TYPENAME TInputImage::PixelType>::RealType,
00048 ::itk::GetImageDimension<TInputImage>::ImageDimension >,
00049 ::itk::GetImageDimension<TInputImage>::ImageDimension > >
00050 class ITK_EXPORT HessianRecursiveGaussianImageFilter:
00051 public ImageToImageFilter<TInputImage,TOutputImage>
00052 {
00053 public:
00055 typedef HessianRecursiveGaussianImageFilter Self;
00056 typedef ImageToImageFilter<TInputImage,TOutputImage> Superclass;
00057 typedef SmartPointer<Self> Pointer;
00058 typedef SmartPointer<const Self> ConstPointer;
00059
00060
00062 typedef TInputImage InputImageType;
00063 typedef typename TInputImage::PixelType PixelType;
00064 typedef typename NumericTraits<PixelType>::RealType RealType;
00065
00066
00068 itkStaticConstMacro(ImageDimension, unsigned int,
00069 ::itk::GetImageDimension<TInputImage>::ImageDimension);
00070
00072 itkStaticConstMacro(NumberOfSmoothingFilters, unsigned int,
00073 ::itk::GetImageDimension<TInputImage>::ImageDimension-2);
00074
00079 typedef float InternalRealType;
00080 typedef Image<InternalRealType,
00081 ::itk::GetImageDimension<TInputImage>::ImageDimension > RealImageType;
00082
00083
00084
00085
00090 typedef NthElementImageAdaptor< TOutputImage,
00091 InternalRealType > OutputImageAdaptorType;
00092 typedef typename OutputImageAdaptorType::Pointer OutputImageAdaptorPointer;
00093
00095 typedef RecursiveGaussianImageFilter<
00096 RealImageType,
00097 RealImageType
00098 > GaussianFilterType;
00099
00101 typedef RecursiveGaussianImageFilter<
00102 InputImageType,
00103 RealImageType
00104 > DerivativeFilterAType;
00105
00106 typedef RecursiveGaussianImageFilter<
00107 RealImageType,
00108 RealImageType
00109 > DerivativeFilterBType;
00110
00112 typedef typename GaussianFilterType::Pointer GaussianFilterPointer;
00113 typedef std::vector< GaussianFilterPointer > GaussianFiltersArray;
00114
00116 typedef typename DerivativeFilterAType::Pointer DerivativeFilterAPointer;
00117 typedef typename DerivativeFilterBType::Pointer DerivativeFilterBPointer;
00118
00120 typedef typename TOutputImage::Pointer OutputImagePointer;
00121
00122
00124 typedef TOutputImage OutputImageType;
00125 typedef typename OutputImageType::PixelType OutputPixelType;
00126 typedef typename PixelTraits<OutputPixelType>::ValueType OutputComponentType;
00127
00129 itkNewMacro(Self);
00130
00132 void SetSigma( RealType sigma );
00133
00135 void SetNormalizeAcrossScale( bool normalizeInScaleSpace );
00136 itkGetMacro( NormalizeAcrossScale, bool );
00138
00144 virtual void GenerateInputRequestedRegion() throw(InvalidRequestedRegionError);
00145
00146 #ifdef ITK_USE_CONCEPT_CHECKING
00147
00148 itkConceptMacro(InputHasNumericTraitsCheck,
00149 (Concept::HasNumericTraits<PixelType>));
00150 itkConceptMacro(OutputHasPixelTraitsCheck,
00151 (Concept::HasPixelTraits<OutputPixelType>));
00152
00154 #endif
00155
00156 protected:
00157
00158 HessianRecursiveGaussianImageFilter();
00159 virtual ~HessianRecursiveGaussianImageFilter() {};
00160 void PrintSelf(std::ostream& os, Indent indent) const;
00161
00163 void GenerateData( void );
00164
00165
00166 void EnlargeOutputRequestedRegion(DataObject *output);
00167
00168
00169 private:
00170
00171 HessianRecursiveGaussianImageFilter(const Self&);
00172 void operator=(const Self&);
00173
00174 GaussianFiltersArray m_SmoothingFilters;
00175 DerivativeFilterAPointer m_DerivativeFilterA;
00176 DerivativeFilterBPointer m_DerivativeFilterB;
00177 OutputImageAdaptorPointer m_ImageAdaptor;
00178
00180 bool m_NormalizeAcrossScale;
00181
00182 };
00183
00184 }
00185
00186 #ifndef ITK_MANUAL_INSTANTIATION
00187 #include "itkHessianRecursiveGaussianImageFilter.txx"
00188 #endif
00189
00190 #endif
00191
00192
00193
00194
00195