38 #ifndef PCL_COMMON_VECTOR_AVERAGE_IMPL_HPP_
39 #define PCL_COMMON_VECTOR_AVERAGE_IMPL_HPP_
43 template <
typename real,
int dimension>
45 noOfSamples_ (0), accumulatedWeight_ (0),
46 mean_ (Eigen::Matrix<real, dimension, 1>::Identity ()),
47 covariance_ (Eigen::Matrix<real, dimension, dimension>::Identity ())
52 template <
typename real,
int dimension>
56 accumulatedWeight_ = 0.0;
61 template <
typename real,
int dimension>
67 accumulatedWeight_ += weight;
68 real alpha = weight/accumulatedWeight_;
70 Eigen::Matrix<real, dimension, 1> diff = sample - mean_;
71 covariance_ = (covariance_ + (diff * diff.transpose())*alpha)*(1.0f-alpha);
73 mean_ += (diff)*alpha;
82 template <
typename real,
int dimension>
84 Eigen::Matrix<real, dimension, 1>& eigen_vector2, Eigen::Matrix<real, dimension, 1>& eigen_vector3)
const
97 Eigen::SelfAdjointEigenSolver<Eigen::Matrix<real, dimension, dimension> > ei_symm(covariance_);
98 eigen_values = ei_symm.eigenvalues();
99 Eigen::Matrix<real, dimension, dimension> eigen_vectors = ei_symm.eigenvectors();
101 eigen_vector1 = eigen_vectors.col(0);
102 eigen_vector2 = eigen_vectors.col(1);
103 eigen_vector3 = eigen_vectors.col(2);
106 template <
typename real,
int dimension>
115 Eigen::SelfAdjointEigenSolver<Eigen::Matrix<real, dimension, dimension> > ei_symm(covariance_,
false);
116 eigen_values = ei_symm.eigenvalues();
119 template <
typename real,
int dimension>
133 Eigen::SelfAdjointEigenSolver<Eigen::Matrix<real, dimension, dimension> > ei_symm(covariance_);
134 Eigen::Matrix<real, dimension, dimension> eigen_vectors = ei_symm.eigenvectors();
135 eigen_vector1 = eigen_vectors.col(0);
147 Eigen::Matrix<float, 3, 1>& eigen_vector2, Eigen::Matrix<float, 3, 1>& eigen_vector3)
const
150 Eigen::Matrix<float, 3, 3> eigen_vectors;
151 eigen33(covariance_, eigen_vectors, eigen_values);
152 eigen_vector1 = eigen_vectors.col(0);
153 eigen_vector2 = eigen_vectors.col(1);
154 eigen_vector3 = eigen_vectors.col(2);
166 Eigen::Vector3f::Scalar eigen_value;
167 Eigen::Vector3f eigen_vector;
168 eigen33(covariance_, eigen_value, eigen_vector);
169 eigen_vector1 = eigen_vector;
177 Eigen::Matrix<double, 3, 1>& eigen_vector2, Eigen::Matrix<double, 3, 1>& eigen_vector3)
const
180 Eigen::Matrix<double, 3, 3> eigen_vectors;
181 eigen33(covariance_, eigen_vectors, eigen_values);
182 eigen_vector1 = eigen_vectors.col(0);
183 eigen_vector2 = eigen_vectors.col(1);
184 eigen_vector3 = eigen_vectors.col(2);
196 Eigen::Vector3d::Scalar eigen_value;
197 Eigen::Vector3d eigen_vector;
198 eigen33(covariance_, eigen_value, eigen_vector);
199 eigen_vector1 = eigen_vector;