@@ -456,52 +456,60 @@ Transform<TParametersValueType, VInputDimension, VOutputDimension>::TransformSym
456456}
457457
458458template <typename TParametersValueType, unsigned int VInputDimension, unsigned int VOutputDimension>
459- template < typename TImage>
460- std:: enable_if_t <TImage::ImageDimension == VInputDimension && TImage::ImageDimension == VOutputDimension, void >
461- Transform<TParametersValueType, VInputDimension, VOutputDimension>::ApplyToImageMetadata(TImage * image) const
459+ void
460+ Transform<TParametersValueType, VInputDimension, VOutputDimension>::ApplyToImageMetadataInternal(
461+ ImageBase<VInputDimension> * image) const
462462{
463- using ImageType = TImage;
464-
465- if (!this ->IsLinear ())
463+ if constexpr (VInputDimension == VOutputDimension)
466464 {
467- itkWarningMacro (" ApplyToImageMetadata was invoked with non-linear transform of type: "
468- << this ->GetNameOfClass () << " . This might produce unexpected results." );
469- }
465+ using ImageType = ImageBase<VInputDimension>;
470466
471- const typename Self::Pointer inverse = this ->GetInverseTransform ();
472- if (inverse.IsNull ())
473- {
474- itkExceptionMacro (
475- " ApplyToImageMetadata was invoked with non-invertible transform of type: " << this ->GetNameOfClass ());
476- }
477-
478- // transform origin
479- typename ImageType::PointType origin = image->GetOrigin ();
480- origin = inverse->TransformPoint (origin);
481- image->SetOrigin (origin);
467+ if (!this ->IsLinear ())
468+ {
469+ itkWarningMacro (" ApplyToImageMetadata was invoked with non-linear transform of type: "
470+ << this ->GetNameOfClass () << " . This might produce unexpected results." );
471+ }
482472
483- typename ImageType::SpacingType spacing = image->GetSpacing ();
484- typename ImageType::DirectionType direction = image->GetDirection ();
485- // transform direction cosines and compute new spacing
486- for (unsigned int i = 0 ; i < ImageType::ImageDimension; ++i)
487- {
488- Vector<typename Self::ParametersValueType, ImageType::ImageDimension> dirVector;
489- for (unsigned int k = 0 ; k < ImageType::ImageDimension; ++k)
473+ const typename Self::Pointer inverse = this ->GetInverseTransform ();
474+ if (inverse.IsNull ())
490475 {
491- dirVector[k] = direction[k][i];
476+ itkExceptionMacro (
477+ " ApplyToImageMetadata was invoked with non-invertible transform of type: " << this ->GetNameOfClass ());
492478 }
493479
494- dirVector *= spacing[i];
495- dirVector = inverse->TransformVector (dirVector);
496- spacing[i] = dirVector.Normalize ();
480+ // transform origin
481+ typename ImageType::PointType origin = image->GetOrigin ();
482+ origin = inverse->TransformPoint (origin);
483+ image->SetOrigin (origin);
497484
498- for (unsigned int k = 0 ; k < ImageType::ImageDimension; ++k)
485+ typename ImageType::SpacingType spacing = image->GetSpacing ();
486+ typename ImageType::DirectionType direction = image->GetDirection ();
487+ // transform direction cosines and compute new spacing
488+ for (unsigned int i = 0 ; i < ImageType::ImageDimension; ++i)
499489 {
500- direction[k][i] = dirVector[k];
490+ Vector<typename Self::ParametersValueType, ImageType::ImageDimension> dirVector;
491+ for (unsigned int k = 0 ; k < ImageType::ImageDimension; ++k)
492+ {
493+ dirVector[k] = direction[k][i];
494+ }
495+
496+ dirVector *= spacing[i];
497+ dirVector = inverse->TransformVector (dirVector);
498+ spacing[i] = dirVector.Normalize ();
499+
500+ for (unsigned int k = 0 ; k < ImageType::ImageDimension; ++k)
501+ {
502+ direction[k][i] = dirVector[k];
503+ }
501504 }
505+ image->SetDirection (direction);
506+ image->SetSpacing (spacing);
507+ }
508+ else
509+ {
510+ itkExceptionMacro (" ApplyToImageMetadata was invoked with transform of type: "
511+ << this ->GetNameOfClass () << " that has different input and output dimensions." );
502512 }
503- image->SetDirection (direction);
504- image->SetSpacing (spacing);
505513}
506514
507515
0 commit comments