/*========================================================================= * * 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 itkVectorImageToImageMetricTraitsv4_h #define itkVectorImageToImageMetricTraitsv4_h #include "itkImage.h" #include "itkCovariantVector.h" #include "itkObjectToObjectMetricBase.h" #include "itkDefaultConvertPixelTraits.h" #include "itkGradientRecursiveGaussianImageFilter.h" #include "itkCentralDifferenceImageFunction.h" namespace itk { /** \class VectorImageToImageMetricTraitsv4 * \brief A simple structure holding type information for ImageToImageMetricv4 classes * * This class provides type information for class members and methods * used in gradient calculation. This class is used for images with * vector pixel types, including VectorImage. For images with scalar pixel types, see * itkDefaultImageToImageMetricTraitsv4. * * \sa itkDefaultImageToImageMetricTraitsv4 * * \ingroup ITKMetricsv4 */ template class VectorImageToImageMetricTraitsv4 { public: /** Standard class type aliases. */ using Self = VectorImageToImageMetricTraitsv4; using FixedImageType = TFixedImageType; using MovingImageType = TMovingImageType; using VirtualImageType = TVirtualImageType; using FixedImagePixelType = typename FixedImageType::PixelType; using MovingImagePixelType = typename MovingImageType::PixelType; using CoordinateRepresentationType = TCoordRep; /* Image dimension accessors */ using ImageDimensionType = unsigned int; static constexpr ImageDimensionType FixedImageDimension = FixedImageType::ImageDimension; static constexpr ImageDimensionType MovingImageDimension = MovingImageType::ImageDimension; static constexpr ImageDimensionType VirtualImageDimension = VirtualImageType::ImageDimension; using FixedImageGradientType = Vector; using MovingImageGradientType = Vector; using VirtualImageGradientType = Vector; using FixedImageGradientConvertType = DefaultConvertPixelTraits; using MovingImageGradientConvertType = DefaultConvertPixelTraits; /** Type of the filter used to calculate the gradients. */ using FixedRealType = typename NumericTraits::RealType; using MovingRealType = typename NumericTraits::RealType; using FixedGradientPixelType = FixedImageGradientType; using MovingGradientPixelType = MovingImageGradientType; using FixedImageGradientImageType = Image; using FixedImageGradientFilterType = ImageToImageFilter; using MovingImageGradientImageType = Image; using MovingImageGradientFilterType = ImageToImageFilter; using FixedImageComponentGradientType = CovariantVector; using MovingImageComponentGradientType = CovariantVector; using VirtualImageComponentGradientType = CovariantVector; /** Default image gradient filter types */ using DefaultFixedImageGradientFilter = GradientRecursiveGaussianImageFilter; using DefaultMovingImageGradientFilter = GradientRecursiveGaussianImageFilter; /** Image gradient calculator types. The TOutput template parameter * is chosen to match that of CentralDifferenceImageFunction. */ using FixedImageGradientCalculatorType = ImageFunction; using MovingImageGradientCalculatorType = ImageFunction; using DefaultFixedImageGradientCalculator = CentralDifferenceImageFunction; using DefaultMovingImageGradientCalculator = CentralDifferenceImageFunction; }; } // end namespace itk #endif