Skip to content

Commit a7de21f

Browse files
blowekampdzenanz
authored andcommitted
ENH: Use AnatomicalOrientation in OrientImageFilter
Preserve compatibility with SpatialOrientation enums with implicit converstion. Additionally both the PositiveEnum and NegativeEnum are supported.
1 parent 5b121f4 commit a7de21f

3 files changed

Lines changed: 58 additions & 172 deletions

File tree

Modules/Filtering/ImageGrid/include/itkOrientImageFilter.h

Lines changed: 25 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020

2121
#include "itkPermuteAxesImageFilter.h"
2222
#include "itkFlipImageFilter.h"
23-
#include "itkSpatialOrientationAdapter.h"
23+
#include "itkAnatomicalOrientation.h"
2424
#include <map>
2525
#include <string>
2626

@@ -161,7 +161,7 @@ class ITK_TEMPLATE_EXPORT OrientImageFilter : public ImageToImageFilter<TInputIm
161161
using OutputImageConstPointer = typename OutputImageType::ConstPointer;
162162
using OutputImageRegionType = typename OutputImageType::RegionType;
163163
using OutputImagePixelType = typename OutputImageType::PixelType;
164-
using CoordinateOrientationCode = SpatialOrientationEnums::ValidCoordinateOrientations;
164+
using CoordinateOrientationCode = AnatomicalOrientation;
165165

166166
/** Axes permuter type. */
167167
using PermuterType = PermuteAxesImageFilter<TInputImage>;
@@ -189,7 +189,7 @@ class ITK_TEMPLATE_EXPORT OrientImageFilter : public ImageToImageFilter<TInputIm
189189
inline void
190190
SetGivenCoordinateDirection(const typename TInputImage::DirectionType & GivenDirection)
191191
{
192-
SetGivenCoordinateOrientation(itk::SpatialOrientationAdapter().FromDirectionCosines(GivenDirection));
192+
SetGivenCoordinateOrientation(AnatomicalOrientation(GivenDirection));
193193
}
194194

195195
itkGetEnumMacro(DesiredCoordinateOrientation, CoordinateOrientationCode);
@@ -199,7 +199,7 @@ class ITK_TEMPLATE_EXPORT OrientImageFilter : public ImageToImageFilter<TInputIm
199199
inline void
200200
SetDesiredCoordinateDirection(const typename TOutputImage::DirectionType & DesiredDirection)
201201
{
202-
SetDesiredCoordinateOrientation(itk::SpatialOrientationAdapter().FromDirectionCosines(DesiredDirection));
202+
SetDesiredCoordinateOrientation(AnatomicalOrientation(DesiredDirection));
203203
}
204204

205205
/** Controls how the GivenCoordinateOrientation is determined.
@@ -234,22 +234,25 @@ class ITK_TEMPLATE_EXPORT OrientImageFilter : public ImageToImageFilter<TInputIm
234234
void
235235
SetDesiredCoordinateOrientationToAxial()
236236
{
237-
this->SetDesiredCoordinateOrientation(
238-
SpatialOrientationEnums::ValidCoordinateOrientations::ITK_COORDINATE_ORIENTATION_RAI);
237+
this->SetDesiredCoordinateOrientation({ AnatomicalOrientation::CoordinateEnum::RightToLeft,
238+
AnatomicalOrientation::CoordinateEnum::AnteriorToPosterior,
239+
AnatomicalOrientation::CoordinateEnum::InferiorToSuperior });
239240
}
240241

241242
void
242243
SetDesiredCoordinateOrientationToCoronal()
243244
{
244-
this->SetDesiredCoordinateOrientation(
245-
SpatialOrientationEnums::ValidCoordinateOrientations::ITK_COORDINATE_ORIENTATION_RSA);
245+
this->SetDesiredCoordinateOrientation({ AnatomicalOrientation::CoordinateEnum::RightToLeft,
246+
AnatomicalOrientation::CoordinateEnum::SuperiorToInferior,
247+
AnatomicalOrientation::CoordinateEnum::AnteriorToPosterior });
246248
}
247249

248250
void
249251
SetDesiredCoordinateOrientationToSagittal()
250252
{
251-
this->SetDesiredCoordinateOrientation(
252-
SpatialOrientationEnums::ValidCoordinateOrientations::ITK_COORDINATE_ORIENTATION_ASL);
253+
this->SetDesiredCoordinateOrientation({ AnatomicalOrientation::CoordinateEnum::AnteriorToPosterior,
254+
AnatomicalOrientation::CoordinateEnum::SuperiorToInferior,
255+
AnatomicalOrientation::CoordinateEnum::LeftToRight });
253256
}
254257

255258
/** OrientImageFilter produces an image which is a different
@@ -286,10 +289,13 @@ class ITK_TEMPLATE_EXPORT OrientImageFilter : public ImageToImageFilter<TInputIm
286289
void
287290
EnlargeOutputRequestedRegion(DataObject * itkNotUsed(output)) override;
288291

292+
void
293+
VerifyPreconditions() const override;
294+
289295
/*** Member functions used by GenerateData: */
290296
void
291-
DeterminePermutationsAndFlips(const SpatialOrientationEnums::ValidCoordinateOrientations fixed_orient,
292-
const SpatialOrientationEnums::ValidCoordinateOrientations moving_orient);
297+
DeterminePermutationsAndFlips(const CoordinateOrientationCode fixed_orient,
298+
const CoordinateOrientationCode moving_orient);
293299

294300
/** Returns true if a permute is required. Returns false otherwise. */
295301
bool
@@ -305,22 +311,19 @@ class ITK_TEMPLATE_EXPORT OrientImageFilter : public ImageToImageFilter<TInputIm
305311
GenerateData() override;
306312

307313
private:
308-
std::string
309-
GetMajorAxisFromPatientRelativeDirectionCosine(double x, double y, double z);
310-
311-
CoordinateOrientationCode m_GivenCoordinateOrientation{
312-
SpatialOrientationEnums::ValidCoordinateOrientations::ITK_COORDINATE_ORIENTATION_RIP
313-
};
314+
CoordinateOrientationCode m_GivenCoordinateOrientation{ AnatomicalOrientation::CoordinateEnum::RightToLeft,
315+
AnatomicalOrientation::CoordinateEnum::InferiorToSuperior,
316+
AnatomicalOrientation::CoordinateEnum::PosteriorToAnterior };
314317
CoordinateOrientationCode m_DesiredCoordinateOrientation{
315-
SpatialOrientationEnums::ValidCoordinateOrientations::ITK_COORDINATE_ORIENTATION_RIP
318+
AnatomicalOrientation::CoordinateEnum::RightToLeft,
319+
AnatomicalOrientation::CoordinateEnum::InferiorToSuperior,
320+
AnatomicalOrientation::CoordinateEnum::PosteriorToAnterior
316321
};
317322
bool m_UseImageDirection{ false };
318323

319324
PermuteOrderArrayType m_PermuteOrder{};
320-
FlipAxesArrayType m_FlipAxes{};
325+
FlipAxesArrayType m_FlipAxes{ false };
321326

322-
std::map<std::string, CoordinateOrientationCode> m_StringToCode{};
323-
std::map<CoordinateOrientationCode, std::string> m_CodeToString{};
324327
}; // end of class
325328
} // end namespace itk
326329

0 commit comments

Comments
 (0)