/*========================================================================= * * 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 * * https://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 itkMeanSquaresImageToImageMetricv4_h #define itkMeanSquaresImageToImageMetricv4_h #include "itkImageToImageMetricv4.h" #include "itkMeanSquaresImageToImageMetricv4GetValueAndDerivativeThreader.h" #include "itkDefaultImageToImageMetricTraitsv4.h" namespace itk { /** \class MeanSquaresImageToImageMetricv4 * * \brief Class implementing a mean squares metric. * * This class supports vector images of type VectorImage * and Image< VectorType, imageDimension >. * * See * MeanSquaresImageToImageMetricv4GetValueAndDerivativeThreader::ProcessPoint for algorithm implementation. * * \ingroup ITKMetricsv4 */ template > class ITK_TEMPLATE_EXPORT MeanSquaresImageToImageMetricv4 : public ImageToImageMetricv4 { public: ITK_DISALLOW_COPY_AND_MOVE(MeanSquaresImageToImageMetricv4); /** Standard class type aliases. */ using Self = MeanSquaresImageToImageMetricv4; using Superclass = ImageToImageMetricv4; using Pointer = SmartPointer; using ConstPointer = SmartPointer; /** Method for creation through the object factory. */ itkNewMacro(Self); /** \see LightObject::GetNameOfClass() */ itkOverrideGetNameOfClassMacro(MeanSquaresImageToImageMetricv4); using typename Superclass::DerivativeType; using typename Superclass::FixedImagePointType; using typename Superclass::FixedImagePixelType; using typename Superclass::FixedImageGradientType; using typename Superclass::MovingImagePointType; using typename Superclass::MovingImagePixelType; using typename Superclass::MovingImageGradientType; using typename Superclass::MovingTransformType; using typename Superclass::JacobianType; using VirtualImageType = typename Superclass::VirtualImageType; using typename Superclass::VirtualIndexType; using typename Superclass::VirtualPointType; using typename Superclass::VirtualPointSetType; /* Image dimension accessors */ static constexpr typename TVirtualImage::ImageDimensionType VirtualImageDimension = TVirtualImage::ImageDimension; static constexpr typename TFixedImage::ImageDimensionType FixedImageDimension = TFixedImage::ImageDimension; static constexpr typename TMovingImage::ImageDimensionType MovingImageDimension = TMovingImage::ImageDimension; protected: MeanSquaresImageToImageMetricv4(); ~MeanSquaresImageToImageMetricv4() override = default; friend class MeanSquaresImageToImageMetricv4GetValueAndDerivativeThreader< ThreadedImageRegionPartitioner, Superclass, Self>; friend class MeanSquaresImageToImageMetricv4GetValueAndDerivativeThreader; using MeanSquaresDenseGetValueAndDerivativeThreaderType = MeanSquaresImageToImageMetricv4GetValueAndDerivativeThreader< ThreadedImageRegionPartitioner, Superclass, Self>; using MeanSquaresSparseGetValueAndDerivativeThreaderType = MeanSquaresImageToImageMetricv4GetValueAndDerivativeThreader; void PrintSelf(std::ostream & os, Indent indent) const override; }; } // end namespace itk #ifndef ITK_MANUAL_INSTANTIATION # include "itkMeanSquaresImageToImageMetricv4.hxx" #endif #endif