33 #ifndef _SAMPLE_CONSENSUS_SACMODELLINE_H_
34 #define _SAMPLE_CONSENSUS_SACMODELLINE_H_
40 #define MAX_ITERATIONS_UNIQUE 1000
57 virtual void getSamples (
int &iterations, std::vector<int> &samples);
68 virtual void refitModel (
const std::vector<int> &inliers, std::vector<double> &refit_coefficients);
69 virtual void getDistancesToModel (
const std::vector<double> &model_coefficients, std::vector<double> &distances);
70 virtual void selectWithinDistance (
const std::vector<double> &model_coefficients,
double threshold, std::vector<int> &inliers);
72 virtual void projectPoints (
const std::vector<int> &inliers,
const std::vector<double> &model_coefficients,
PointCloud &projected_points);
74 virtual void projectPointsInPlace (
const std::vector<int> &inliers,
const std::vector<double> &model_coefficients);
87 cross (
const pcl::PointXYZ &p1,
const pcl::PointXYZ &p2)
90 r.x = p1.y * p2.z - p1.z * p2.y;
91 r.y = p1.z * p2.x - p1.x * p2.z;
92 r.z = p1.x * p2.y - p1.y * p2.x;
105 centroid.x = centroid.y = centroid.z = 0;
107 for (
unsigned int i = 0; i < indices.size (); i++)
109 centroid.x += points.points.at (indices.at (i)).x;
110 centroid.y += points.points.at (indices.at (i)).y;
111 centroid.z += points.points.at (indices.at (i)).z;
114 centroid.x /= indices.size ();
115 centroid.y /= indices.size ();
116 centroid.z /= indices.size ();
134 covariance_matrix = Eigen::Matrix3d::Zero ();
136 for (
unsigned int j = 0; j < indices.size (); j++)
138 covariance_matrix (0, 0) += (points.points[indices.at (j)].x - centroid.x) * (points.points[indices.at (j)].x - centroid.x);
139 covariance_matrix (0, 1) += (points.points[indices.at (j)].x - centroid.x) * (points.points[indices.at (j)].y - centroid.y);
140 covariance_matrix (0, 2) += (points.points[indices.at (j)].x - centroid.x) * (points.points[indices.at (j)].z - centroid.z);
142 covariance_matrix (1, 0) += (points.points[indices.at (j)].y - centroid.y) * (points.points[indices.at (j)].x - centroid.x);
143 covariance_matrix (1, 1) += (points.points[indices.at (j)].y - centroid.y) * (points.points[indices.at (j)].y - centroid.y);
144 covariance_matrix (1, 2) += (points.points[indices.at (j)].y - centroid.y) * (points.points[indices.at (j)].z - centroid.z);
146 covariance_matrix (2, 0) += (points.points[indices.at (j)].z - centroid.z) * (points.points[indices.at (j)].x - centroid.x);
147 covariance_matrix (2, 1) += (points.points[indices.at (j)].z - centroid.z) * (points.points[indices.at (j)].y - centroid.y);
148 covariance_matrix (2, 2) += (points.points[indices.at (j)].z - centroid.z) * (points.points[indices.at (j)].z - centroid.z);