Skip to content

Libs/Utils/EigenUtils.h

Namespaces

Name
shapeworks
User usage reporting (telemetry)

Classes

Name
class shapeworks::EigenUtils

Source code

```cpp

pragma once

include

include "Shapeworks.h"

namespace shapeworks {

// Returns a 4x4 Eigen (col-major) from the given 3x4 (left-hand) itk::Transform. Eigen::MatrixXd itkTransformToEigen(TransformPtr itk_xform);

// Returns a 3x4 itk::AffineTransform from the given (col-major) 4x4 Eigen::Matrix TransformPtr eigen44ToItkTransform(const Eigen::Matrix &eigen_mat);

// Returns a 4x4 Eigen (row-major) from the given vtkTransform4x4. Eigen::Matrix vtkTransformToEigen(MeshTransform vtk_xform);

// Returns a 4x4 vtkMatrix4x4 from the given (row-major) 4x4 Eigen::Matrix MeshTransform eigen44ToVtkTransform(const Eigen::Matrix &eigen_mat);

template using VnlMatrix = Eigen::Matrix;

template Eigen::Matrix itkToEigen(const itk::Matrix &itk_mat) { return Eigen::Matrix(itk_mat.GetVnlMatrix().data_block()); }

// With any luck, rvalue assignment will be used here (though it's explicit in the vxl code). template itk::Matrix eigenToItk(const Eigen::Matrix &eigen_mat) { return itk::Matrix(vnl_matrix_fixed(eigen_mat.data())); }

template Eigen::Map> vnlToEigen(const vnl_matrix &vnl_mat) { return Eigen::Map>(const_cast(vnl_mat.data_block()), vnl_mat.rows(), vnl_mat.cols()); }

template Eigen::Map> wrapDataWithEigen(T *data) { return Eigen::Map>(data); }

template Eigen::Map> wrapDataWithEigen(T *data, size_t nrows, size_t ncols) { return Eigen::Map>(data, nrows, ncols); }

template itk::Matrix wrapDataWithItk(T *data) { std::cerr << "WARNING: vnl cannot wrap data, so this just copies input array\n"; itk::Matrix itk_mat; vnl_matrix_fixed &vnl_mat = itk_mat.GetVnlMatrix(); vnl_mat.copy_in(data); return itk_mat; }

class EigenUtils { public: static std::pair compute_mean_and_stddev(const Eigen::MatrixXd &matrix, int row_index); };

} // namespace shapeworks ```


Updated on 2026-03-31 at 16:02:11 +0000