ITK 6.0.0
Insight Toolkit
 
Loading...
Searching...
No Matches
itkPointSetToPointSetMetricv4.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 itkPointSetToPointSetMetricv4_h
19#define itkPointSetToPointSetMetricv4_h
20
22
23namespace itk
24{
64
65template <typename TFixedPointSet,
66 typename TMovingPointSet = TFixedPointSet,
67 class TInternalComputationValueType = double>
68class ITK_TEMPLATE_EXPORT PointSetToPointSetMetricv4
69 : public PointSetToPointSetMetricWithIndexv4<TFixedPointSet, TMovingPointSet, TInternalComputationValueType>
70{
71public:
72 ITK_DISALLOW_COPY_AND_MOVE(PointSetToPointSetMetricv4);
73
76 using Superclass =
80
82 itkOverrideGetNameOfClassMacro(PointSetToPointSetMetricv4);
83
85 using typename Superclass::MeasureType;
86
88 using typename Superclass::ParametersType;
91
93 using typename Superclass::DerivativeType;
94
96 using typename Superclass::FixedTransformType;
101
102 using typename Superclass::MovingTransformType;
107
108 using typename Superclass::JacobianType;
111
113
115 using typename Superclass::DimensionType;
116
118 using FixedPointSetType = TFixedPointSet;
119 using FixedPointType = typename TFixedPointSet::PointType;
120 using FixedPixelType = typename TFixedPointSet::PixelType;
121 using FixedPointsContainer = typename TFixedPointSet::PointsContainer;
122
124
126 using MovingPointSetType = TMovingPointSet;
127 using MovingPointType = typename TMovingPointSet::PointType;
128 using MovingPixelType = typename TMovingPointSet::PixelType;
129 using MovingPointsContainer = typename TMovingPointSet::PointsContainer;
130
132
140
141 using typename Superclass::PointType;
142 using typename Superclass::PixelType;
143 using CoordinateType = typename PointType::CoordinateType;
144#ifndef ITK_FUTURE_LEGACY_REMOVE
145 using CoordRepType ITK_FUTURE_DEPRECATED(
146 "ITK 6 discourages using `CoordRepType`. Please use `CoordinateType` instead!") = CoordinateType;
147#endif
149 using PointsConstIterator = typename PointsContainer::ConstIterator;
150 using typename Superclass::PointIdentifier;
151
153 using typename Superclass::PointsLocatorType;
155
158
159 using typename Superclass::DerivativeValueType;
160 using typename Superclass::LocalDerivativeType;
161
164 using typename Superclass::VirtualImagePointer;
165 using typename Superclass::VirtualPixelType;
166 using typename Superclass::VirtualRegionType;
167 using typename Superclass::VirtualSizeType;
168 using typename Superclass::VirtualSpacingType;
170 using typename Superclass::VirtualPointType;
173 using typename Superclass::VirtualIndexType;
174 using typename Superclass::VirtualPointSetType;
176
182 virtual MeasureType
183 GetLocalNeighborhoodValue(const PointType &, const PixelType & pixel) const = 0;
184
192 virtual LocalDerivativeType
194
199 virtual void
201 MeasureType &,
203 const PixelType & pixel) const = 0;
204
205
206protected:
208 ~PointSetToPointSetMetricv4() override = default;
209
210private:
213 const PointType & point,
214 const PixelType & pixel) const override
215 {
216 return this->GetLocalNeighborhoodValue(point, pixel);
217 }
218
219 LocalDerivativeType
221 const PointType & point,
222 const PixelType & pixel) const override
223 {
224 return this->GetLocalNeighborhoodDerivative(point, pixel);
225 }
226
227 void
229 const PointType & point,
230 MeasureType & measure,
231 LocalDerivativeType & derivative,
232 const PixelType & pixel) const override
233 {
234 this->GetLocalNeighborhoodValueAndDerivative(point, measure, derivative, pixel);
235 }
236};
237} // end namespace itk
238
239#ifndef ITK_MANUAL_INSTANTIATION
240# include "itkPointSetToPointSetMetricv4.hxx"
241#endif
242
243#endif
OptimizerParameters< TInternalComputationValueType > ParametersType
TInternalComputationValueType ParametersValueType
Transform< TInternalComputationValueType, Image< TInternalComputationValueType, TFixedPointSet::PointDimension >::ImageDimension, TMovingDimension > MovingTransformType
Transform< TInternalComputationValueType, Image< TInternalComputationValueType, TFixedPointSet::PointDimension >::ImageDimension, TFixedDimension > FixedTransformType
virtual LocalDerivativeType GetLocalNeighborhoodDerivative(const PointType &, const PixelType &pixel) const
virtual void GetLocalNeighborhoodValueAndDerivative(const PointType &, MeasureType &, LocalDerivativeType &, const PixelType &pixel) const =0
PointSetToPointSetMetricWithIndexv4< TFixedPointSet, TMovingPointSet, TInternalComputationValueType > Superclass
MeasureType GetLocalNeighborhoodValueWithIndex(const PointIdentifier &, const PointType &point, const PixelType &pixel) const override
~PointSetToPointSetMetricv4() override=default
virtual MeasureType GetLocalNeighborhoodValue(const PointType &, const PixelType &pixel) const =0
LocalDerivativeType GetLocalNeighborhoodDerivativeWithIndex(const PointIdentifier &, const PointType &point, const PixelType &pixel) const override
void GetLocalNeighborhoodValueAndDerivativeWithIndex(const PointIdentifier &, const PointType &point, MeasureType &measure, LocalDerivativeType &derivative, const PixelType &pixel) const override
typename TreeType::InstanceIdentifierVectorType NeighborsIdentifierType
Array< TInternalComputationValueType > DerivativeType
Implements transparent reference counting.
The "itk" namespace contains all Insight Segmentation and Registration Toolkit (ITK) classes....
*par Constraints *The filter image with at least two dimensions and a vector *length of at least The theory supports extension to scalar but *the implementation of the itk vector classes do not **The template parameter TRealType must be floating point(float or double) or *a user-defined "real" numerical type with arithmetic operations defined *sufficient to compute derivatives. **\par Performance *This filter will automatically multithread if run with *SetUsePrincipleComponents