18#ifndef itkDirectionAlgorithm_h
19#define itkDirectionAlgorithm_h
24#include "ITKCommonExport.h"
26#include ITK_EIGEN(Core)
58extern ITKCommon_EXPORT std::ostream &
84 template <
unsigned int VOutputDimension,
typename TValue,
unsigned int VInputDimension>
90 const Eigen::Map<const RowMajorMatrix<TValue>> directionView(
91 direction.
GetVnlMatrix().data_block(), VInputDimension, VInputDimension);
92 const Eigen::Map<const FlagArray> collapseView(collapseDimensions.
data(), VInputDimension);
94 Eigen::Map<RowMajorMatrix<TValue>> resultView(
95 result.
GetVnlMatrix().data_block(), VOutputDimension, VOutputDimension);
102 template <
unsigned int VOutputDimension,
typename TValue =
double>
105 const std::vector<bool> & collapseDimensions,
109 const Eigen::Map<const RowMajorMatrix<double>> directionView(
110 vnlDirection.data_block(), vnlDirection.rows(), vnlDirection.cols());
111 FlagArray collapseFlags(collapseDimensions.size());
112 for (
size_t i = 0; i < collapseDimensions.size(); ++i)
114 collapseFlags[i] = collapseDimensions[i];
117 Eigen::Map<RowMajorMatrix<TValue>> resultView(
118 result.
GetVnlMatrix().data_block(), VOutputDimension, VOutputDimension);
124 template <
typename TValue>
125 using RowMajorMatrix = Eigen::Matrix<TValue, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor>;
126 using FlagArray = Eigen::Array<bool, Eigen::Dynamic, 1>;
130 const Eigen::Ref<const FlagArray> & collapseDimensions,
135 const Eigen::Ref<const FlagArray> & collapseDimensions,
Simulate a standard C array with copy semantics.
A templated class holding a M x N size Matrix.
InternalMatrixType & GetVnlMatrix()
A templated class holding a M x N size Matrix.
InternalMatrixType & GetVnlMatrix()
DirectionCollapseStrategy
@ DIRECTIONCOLLAPSETOUNKOWN
@ DIRECTIONCOLLAPSETOIDENTITY
@ DIRECTIONCOLLAPSETOSUBMATRIX
@ DIRECTIONCOLLAPSETOGUESS
The "itk" namespace contains all Insight Segmentation and Registration Toolkit (ITK) classes....
ITKCommon_EXPORT std::ostream & operator<<(std::ostream &out, AnatomicalOrientation::CoordinateEnum value)
Functions that operate on image direction matrices.
static Matrix< TValue, VOutputDimension, VOutputDimension > CollapseDirection(const VariableSizeMatrix< double > &direction, const std::vector< bool > &collapseDimensions, const CollapseStrategyEnum strategy)
Eigen::Array< bool, Eigen::Dynamic, 1 > FlagArray
static void CollapseDirectionInternal(const Eigen::Ref< const RowMajorMatrix< double > > &direction, const Eigen::Ref< const FlagArray > &collapseDimensions, CollapseStrategyEnum strategy, Eigen::Ref< RowMajorMatrix< double > > result)
ExtractImageFilterEnums::DirectionCollapseStrategy CollapseStrategyEnum
Eigen::Matrix< TValue, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor > RowMajorMatrix
static void CollapseDirectionInternal(const Eigen::Ref< const RowMajorMatrix< double > > &direction, const Eigen::Ref< const FlagArray > &collapseDimensions, CollapseStrategyEnum strategy, Eigen::Ref< RowMajorMatrix< float > > result)
static Matrix< TValue, VOutputDimension, VOutputDimension > CollapseDirection(const Matrix< TValue, VInputDimension, VInputDimension > &direction, const FixedArray< bool, VInputDimension > &collapseDimensions, const CollapseStrategyEnum strategy)