/*========================================================================= * * Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0.txt * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * *=========================================================================*/ #ifndef itkMeanSquaresImageToImageMetricv4GetValueAndDerivativeThreader_h #define itkMeanSquaresImageToImageMetricv4GetValueAndDerivativeThreader_h #include "itkImageToImageMetricv4GetValueAndDerivativeThreader.h" namespace itk { /** \class MeanSquaresImageToImageMetricv4GetValueAndDerivativeThreader * \brief Processes points for MeanSquaresImageToImageMetricv4 \c * GetValueAndDerivative. * * \ingroup ITKMetricsv4 */ template class ITK_TEMPLATE_EXPORT MeanSquaresImageToImageMetricv4GetValueAndDerivativeThreader : public ImageToImageMetricv4GetValueAndDerivativeThreader { public: ITK_DISALLOW_COPY_AND_MOVE(MeanSquaresImageToImageMetricv4GetValueAndDerivativeThreader); /** Standard class type aliases. */ using Self = MeanSquaresImageToImageMetricv4GetValueAndDerivativeThreader; using Superclass = ImageToImageMetricv4GetValueAndDerivativeThreader; using Pointer = SmartPointer; using ConstPointer = SmartPointer; itkTypeMacro(MeanSquaresImageToImageMetricv4GetValueAndDerivativeThreader, ImageToImageMetricv4GetValueAndDerivativeThreader); itkNewMacro(Self); using DomainType = typename Superclass::DomainType; using AssociateType = typename Superclass::AssociateType; using ImageToImageMetricv4Type = typename Superclass::ImageToImageMetricv4Type; using VirtualPointType = typename Superclass::VirtualPointType; using VirtualIndexType = typename Superclass::VirtualIndexType; using FixedImagePointType = typename Superclass::FixedImagePointType; using FixedImagePixelType = typename Superclass::FixedImagePixelType; using FixedImageGradientType = typename Superclass::FixedImageGradientType; using MovingImagePointType = typename Superclass::MovingImagePointType; using MovingImagePixelType = typename Superclass::MovingImagePixelType; using MovingImageGradientType = typename Superclass::MovingImageGradientType; using MeasureType = typename Superclass::MeasureType; using DerivativeType = typename Superclass::DerivativeType; using DerivativeValueType = typename Superclass::DerivativeValueType; using NumberOfParametersType = typename Superclass::NumberOfParametersType; protected: MeanSquaresImageToImageMetricv4GetValueAndDerivativeThreader() = default; /** This function computes the local voxel-wise contribution of * the metric to the global integral of the metric/derivative. */ bool ProcessPoint(const VirtualIndexType & virtualIndex, const VirtualPointType & virtualPoint, const FixedImagePointType & mappedFixedPoint, const FixedImagePixelType & fixedImageValue, const FixedImageGradientType & mappedFixedImageGradient, const MovingImagePointType & mappedMovingPoint, const MovingImagePixelType & movingImageValue, const MovingImageGradientType & movingImageGradient, MeasureType & metricValueReturn, DerivativeType & localDerivativeReturn, const ThreadIdType threadId) const override; }; } // end namespace itk #ifndef ITK_MANUAL_INSTANTIATION # include "itkMeanSquaresImageToImageMetricv4GetValueAndDerivativeThreader.hxx" #endif #endif