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>
61 template <
typename real,
int dimension>
70 Eigen::Matrix<real, dimension, 1> diff = sample -
mean_;
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;
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;
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;
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;
199 eigen_vector1 = eigen_vector;
void getEigenVector1(Eigen::Matrix< real, dimension, 1 > &eigen_vector1) const
Get the eigenvector corresponding to the smallest eigenvalue.
void reset()
Reset the object to work with a new data set.
void computeRoots(const Matrix &m, Roots &roots)
computes the roots of the characteristic polynomial of the input matrix m, which are the eigenvalues ...
VectorAverage()
Constructor - dimension gives the size of the vectors to work with.
void add(const Eigen::Matrix< real, dimension, 1 > &sample, real weight=1.0)
Add a new sample.
void doPCA(Eigen::Matrix< real, dimension, 1 > &eigen_values, Eigen::Matrix< real, dimension, 1 > &eigen_vector1, Eigen::Matrix< real, dimension, 1 > &eigen_vector2, Eigen::Matrix< real, dimension, 1 > &eigen_vector3) const
Do Principal component analysis.
Eigen::Matrix< real, dimension, 1 > mean_
Eigen::Matrix< real, dimension, dimension > covariance_
void eigen33(const Matrix &mat, typename Matrix::Scalar &eigenvalue, Vector &eigenvector)
determines the eigenvector and eigenvalue of the smallest eigenvalue of the symmetric positive semi d...
unsigned int noOfSamples_