17#ifndef __registration_metric_robust_estimators_h__
18#define __registration_metric_robust_estimators_h__
24 template <
typename T>
inline int sgn(T val) {
25 return (T(0) < val) - (val < T(0));
28 namespace Registration
41 void operator() (
const Eigen::Matrix<default_type, Eigen::Dynamic, 1>& x,
42 Eigen::Matrix<default_type, Eigen::Dynamic, 1>& residual,
43 Eigen::Matrix<default_type, Eigen::Dynamic, 1>& slope) {
44 const ssize_t len = x.size();
45 residual = x.cwiseAbs();
47 for (ssize_t i = 0; i < len; ++i){
62 void operator() (
const Eigen::Matrix<default_type, Eigen::Dynamic, 1>& x,
63 Eigen::Matrix<default_type, Eigen::Dynamic, 1>& residual,
64 Eigen::Matrix<default_type, Eigen::Dynamic, 1>& slope) {
65 residual = x.cwiseAbs2();
79 residual = std::pow(
abs(x), power);
83 void operator() (
const Eigen::Matrix<default_type, Eigen::Dynamic, 1>& x,
84 Eigen::Matrix<default_type, Eigen::Dynamic, 1>& residual,
85 Eigen::Matrix<default_type, Eigen::Dynamic, 1>& slope) {
86 residual = x.cwiseAbs().array().pow(power);
87 slope = x.cwiseAbs().array().pow(power -1.0);
88 const ssize_t len = x.size();
89 for (ssize_t i = 0; i < len; ++i){
void operator()(const default_type &x, default_type &residual, default_type &slope)
void operator()(const default_type &x, default_type &residual, default_type &slope)
void operator()(const default_type &x, default_type &residual, default_type &slope)
double default_type
the default type used throughout MRtrix
constexpr std::enable_if< std::is_arithmetic< X >::value &&std::is_unsigned< X >::value, X >::type abs(X x)