ITK
4.1.0
Insight Segmentation and Registration Toolkit
|
00001 /*========================================================================= 00002 * 00003 * Copyright Insight Software Consortium 00004 * 00005 * Licensed under the Apache License, Version 2.0 (the "License"); 00006 * you may not use this file except in compliance with the License. 00007 * You may obtain a copy of the License at 00008 * 00009 * http://www.apache.org/licenses/LICENSE-2.0.txt 00010 * 00011 * Unless required by applicable law or agreed to in writing, software 00012 * distributed under the License is distributed on an "AS IS" BASIS, 00013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 00014 * See the License for the specific language governing permissions and 00015 * limitations under the License. 00016 * 00017 *=========================================================================*/ 00018 #ifndef __itkGaussianDerivativeOperator_h 00019 #define __itkGaussianDerivativeOperator_h 00020 00021 #include "itkGaussianOperator.h" 00022 #include "itkDerivativeOperator.h" 00023 00024 namespace itk 00025 { 00075 template< class TPixel, unsigned int VDimension = 2, 00076 class TAllocator = NeighborhoodAllocator< TPixel > > 00077 class ITK_EXPORT GaussianDerivativeOperator : 00078 public NeighborhoodOperator< TPixel, VDimension, TAllocator > 00079 { 00080 public: 00081 00083 typedef GaussianDerivativeOperator Self; 00084 typedef NeighborhoodOperator< TPixel, VDimension, TAllocator > Superclass; 00085 00087 typedef GaussianOperator< TPixel, VDimension, TAllocator > GaussianOperatorType; 00088 typedef DerivativeOperator< TPixel, VDimension, TAllocator > DerivativeOperatorType; 00089 00091 GaussianDerivativeOperator(); 00092 00094 GaussianDerivativeOperator(const Self & other); 00095 00097 Self & operator=(const Self & other); 00098 00099 00108 void SetNormalizeAcrossScale(bool flag) { m_NormalizeAcrossScale = flag; } 00109 bool GetNormalizeAcrossScale() const { return m_NormalizeAcrossScale; } 00110 itkBooleanMacro(NormalizeAcrossScale); 00112 00116 void SetVariance(const double variance) { m_Variance = variance; } 00117 double GetVariance() const { return m_Variance; } 00119 00121 void SetSpacing(const double spacing) { m_Spacing = spacing; } 00122 double GetSpacing() const { return m_Spacing; } 00124 00129 void SetMaximumError(const double maxerror) 00130 { 00131 const double Min = 0.00001; 00132 const double Max = 1.0 - Min; 00133 00134 m_MaximumError = std::max( Min, std::min( Max, maxerror ) ); 00135 } 00136 double GetMaximumError() { return m_MaximumError; } 00137 00142 void SetMaximumKernelWidth(unsigned int n) 00143 { 00144 m_MaximumKernelWidth = n; 00145 } 00146 00148 void SetOrder(const unsigned int order) { m_Order = order;} 00149 unsigned int GetOrder() const { return m_Order; } 00151 00153 virtual void PrintSelf(std::ostream & os, Indent i) const; 00154 00155 protected: 00156 00157 typedef typename Superclass::CoefficientVector CoefficientVector; 00158 00161 static double ModifiedBesselI0(double); 00162 00165 static double ModifiedBesselI1(double); 00166 00169 static double ModifiedBesselI(int, double); 00170 00172 CoefficientVector GenerateCoefficients(); 00173 00175 void Fill(const CoefficientVector & coeff) 00176 { this->FillCenteredDirectional(coeff); } 00177 private: 00178 00179 /* methods for generations of the coeeficients for a gaussian 00180 * operator of 0-order respecting the remaining parameters */ 00181 CoefficientVector GenerateGaussianCoefficients() const; 00182 00184 const char * GetNameOfClass() const 00185 { 00186 return "itkGaussianDerivativeOperator"; 00187 } 00188 00190 bool m_NormalizeAcrossScale; 00191 00193 double m_Variance; 00194 00197 double m_MaximumError; 00198 00202 unsigned int m_MaximumKernelWidth; 00203 00205 unsigned int m_Order; 00206 00208 double m_Spacing; 00209 }; 00210 } // namespace itk 00211 00212 #if 0 //HACK: Not yet implemented 00213 // Define instantiation macro for this template. 00214 #define ITK_TEMPLATE_GaussianDerivativeOperator(_, EXPORT, TypeX, TypeY) \ 00215 namespace itk \ 00216 { \ 00217 _( 2 ( class EXPORT GaussianDerivativeOperator< ITK_TEMPLATE_2 TypeX > ) ) \ 00218 namespace Templates \ 00219 { \ 00220 typedef GaussianDerivativeOperator< ITK_TEMPLATE_2 TypeX > \ 00221 GaussianDerivativeOperator##TypeY; \ 00222 } \ 00223 } 00224 00225 #if ITK_TEMPLATE_EXPLICIT 00226 #include "Templates/itkGaussianDerivativeOperator+-.h" 00227 #endif 00228 #endif 00229 00230 #if ITK_TEMPLATE_TXX 00231 #include "itkGaussianDerivativeOperator.hxx" 00232 #endif 00233 00234 #endif 00235