//数值需要自己填充
pcl::PointXYZ p1;
pcl::PointXYZ p2;
pcl::PointXYZ p3;
//计算平面参数
float a = (p2.y - p1.y) * (p3.z - p1.z) - (p2.z - p1.z) * (p3.y - p1.y);
float b = (p2.z - p1.z) * (p3.x - p1.x) - (p2.x - p1.x) * (p3.z - p1.z);
float c = (p2.x - p1.x) * (p3.y - p1.y) - (p2.y - p1.y) * (p3.x - p1.x);
float d = 0 - (a * p1.x + b * p1.y + c * p1.z);
//构造PCL平面参数
pcl::ModelCoefficients::Ptr plane_coeff(new pcl::ModelCoefficients());
plane_coeff->values.resize(4);
plane_coeff->values[0] =a;
plane_coeff->values[1] =b;
plane_coeff->values[2] =c;
plane_coeff->values[3] =d;
//计算无限大平面的缓冲区内的点
int buffer;
pcl::PointCloud<pcl::PointXYZ>::Ptr merge_cloud(new pcl::PointCloud<pcl::PointXYZ>);
pcl::PointCloud<pcl::PointXYZ>::Ptr planepc_init(new pcl::PointCloud<pcl::PointXYZ>);
pcl::ModelOutlierRemoval<pcl::PointXYZ> plane_filter;
plane_filter.setModelCoefficients(*plane_coeff);
plane_filter.setThreshold(buffer*100);
plane_filter.setModelType(pcl::SACMODEL_PLANE);
plane_filter.setInputCloud(merge_cloud);
plane_filter.filter(*planepc_init);
三点确定平面参数并使用PCL提取平面附近的点
最新推荐文章于 2024-09-13 22:07:57 发布