Skip to content

Libs/Image/ImageRegistration.h

Namespaces

Name
shapeworks
User usage reporting (telemetry)

Classes

Name
class shapeworks::ImageRegistration

Source code

#pragma once

#include <itkCompositeTransform.h>

#include <memory>
#include <vector>

#include "Image.h"
#include "Shapeworks.h"

namespace shapeworks {

class ImageRegistration {
 public:
  enum class TransformType {
    Rigid,   
    Affine,  
    SyN      
  };

  using CompositeTransformType = itk::CompositeTransform<double, 3>;

  ImageRegistration();
  ~ImageRegistration();

  void set_transform_type(TransformType type);

  void set_gradient_step(double step);

  void set_update_field_variance(double variance);

  void set_total_field_variance(double variance);

  void set_iterations(const std::vector<unsigned int>& iterations);

  void set_shrink_factors(const std::vector<unsigned int>& shrink_factors);

  void set_smoothing_sigmas(const std::vector<double>& sigmas);

  void set_linear_iterations(const std::vector<unsigned int>& iterations);
  void set_linear_shrink_factors(const std::vector<unsigned int>& shrink_factors);
  void set_linear_smoothing_sigmas(const std::vector<double>& sigmas);

  void set_correlation_radius(unsigned int radius);

  void run(const Image& fixed, const Image& moving);

  std::vector<Point3> transform_points(const std::vector<Point3>& points) const;

  Image warped_moving() const;

  CompositeTransformType::Pointer get_transform() const;

  void save_transform(const std::string& filename) const;

  bool load_transform(const std::string& filename);

  static Image make_registration_image(const Image& dt, double band = 5.0);

 private:
  class Impl;
  std::unique_ptr<Impl> impl_;
};

}  // namespace shapeworks

Updated on 2026-08-09 at 22:28:04 +0000