1 /*========================================================================= 2 * 3 * Copyright Insight Software Consortium 4 * 5 * Licensed under the Apache License, Version 2.0 (the "License"); 6 * you may not use this file except in compliance with the License. 7 * You may obtain a copy of the License at 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0.txt 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 * 17 *=========================================================================*/ 18 #ifndef itkKernelFunctionBase_h 19 #define itkKernelFunctionBase_h 20 21 #include "itkFunctionBase.h" 22 #include "itkConceptChecking.h" 23 #include "itkNumericTraits.h" 24 #include "itkMath.h" 25 26 namespace itk 27 { 28 /** \class KernelFunctionBase 29 * \brief Kernel used for density estimation and nonparameteric regression. 30 * 31 * This class encapsulates the smoothing kernel used for statistical density 32 * estimation and nonparameteric regression. The basic idea of the kernel 33 * approach is to weight observations by a smooth function (the kernel) 34 * to created a smoothed approximation. 35 * 36 * Reference: 37 * Silverman, B. W. (1986) Density Estimation. London: Chapman and Hall. 38 * 39 * \ingroup Functions 40 * \ingroup ITKCommon 41 */ 42 template< typename TRealValueType = double > 43 class KernelFunctionBase:public FunctionBase< TRealValueType, TRealValueType > 44 { 45 public: 46 /** Standard class type aliases. */ 47 using Self = KernelFunctionBase; 48 using Superclass = FunctionBase< TRealValueType, TRealValueType >; 49 using Pointer = SmartPointer< Self >; 50 using ConstPointer = SmartPointer< const Self >; 51 52 using RealType = TRealValueType; 53 54 /** Run-time type information (and related methods). */ 55 itkTypeMacro(KernelFunctionBase, FunctionBase); 56 57 /** Evaluate the function. Subclasses must implement this. */ 58 TRealValueType Evaluate(const TRealValueType & u) const override = 0; 59 60 #ifdef ITK_USE_CONCEPT_CHECKING 61 // Begin concept checking 62 itkConceptMacro( TRealValueTypeIsFloatingPointCheck, 63 ( Concept::IsFloatingPoint< TRealValueType > ) ); 64 // End concept checking 65 #endif 66 67 protected: 68 KernelFunctionBase() = default; 69 ~KernelFunctionBase() override = default; PrintSelf(std::ostream & os,Indent indent)70 void PrintSelf(std::ostream & os, Indent indent) const override 71 { Superclass::PrintSelf(os, indent); } 72 }; 73 } // end namespace itk 74 75 #endif // itkKernelFunctionBase_h 76