ITK  6.0.0
Insight Toolkit
itkVectorCurvatureNDAnisotropicDiffusionFunction.h
Go to the documentation of this file.
1/*=========================================================================
2 *
3 * Copyright NumFOCUS
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 * https://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 itkVectorCurvatureNDAnisotropicDiffusionFunction_h
19#define itkVectorCurvatureNDAnisotropicDiffusionFunction_h
20
25
26namespace itk
27{
43template <typename TImage>
46{
47public:
48 ITK_DISALLOW_COPY_AND_MOVE(VectorCurvatureNDAnisotropicDiffusionFunction);
49
55
57 itkNewMacro(Self);
58
60 itkOverrideGetNameOfClassMacro(VectorCurvatureNDAnisotropicDiffusionFunction);
61
63 using typename Superclass::ImageType;
64 using typename Superclass::PixelType;
65 using typename Superclass::TimeStepType;
66 using typename Superclass::RadiusType;
67 using typename Superclass::NeighborhoodType;
68 using typename Superclass::FloatOffsetType;
69 using ScalarValueType = typename PixelType::ValueType;
70
72 static constexpr unsigned int ImageDimension = Superclass::ImageDimension;
73 static constexpr unsigned int VectorDimension = Superclass::VectorDimension;
74
78 void * globalData,
79 const FloatOffsetType & offset = FloatOffsetType(0.0)) override;
80
82 void
84 {
85 m_K = this->GetAverageGradientMagnitudeSquared() * this->GetConductanceParameter() *
86 this->GetConductanceParameter() * -2.0f;
87 }
88
89protected:
92 void
93 PrintSelf(std::ostream & os, Indent indent) const override
94 {
95 Superclass::PrintSelf(os, indent);
96 }
97
98private:
101
103 std::slice x_slice[ImageDimension];
104 std::slice xa_slice[ImageDimension][ImageDimension];
105 std::slice xd_slice[ImageDimension][ImageDimension];
106
109
111 double m_K{ 0.0 };
112
113 static double m_MIN_NORM;
114 SizeValueType m_Center{};
115 SizeValueType m_Stride[ImageDimension]{};
116};
117} // end namespace itk
118
119#ifndef ITK_MANUAL_INSTANTIATION
120# include "itkVectorCurvatureNDAnisotropicDiffusionFunction.hxx"
121#endif
122
123#endif
Const version of NeighborhoodIterator, defining iteration of a local N-dimensional neighborhood of pi...
typename ConstNeighborhoodIterator< TImage >::RadiusType RadiusType
Control indentation during Print() invocation.
Definition: itkIndent.h:50
Light weight base class for most itk classes.
PixelType ComputeUpdate(const NeighborhoodType &it, void *globalData, const FloatOffsetType &offset=FloatOffsetType(0.0)) override
A templated class holding a n-Dimensional vector.
Definition: itkVector.h:63
The "itk" namespace contains all Insight Segmentation and Registration Toolkit (ITK) classes....
unsigned long SizeValueType
Definition: itkIntTypes.h:86