PCL 1.8.1 最小二乘法拟合直线代码示例
// 提取y值小于索引号为61的点\n pcl::PointCloudpcl::PointXYZ::Ptr filtered_cloud(new pcl::PointCloudpcl::PointXYZ);\n for (int i = 0; i < 61; i++) {\n if (cloud->points[i].y < cloud->points[61].y) {\n filtered_cloud->push_back(cloud->points[i]);\n }\n }\n\n // 进行最小二乘法拟合直线\n Eigen::VectorXf coefficients;\n pcl::computePointNormal(*filtered_cloud, coefficients);\n pcl::ModelCoefficients::Ptr line_coefficients(new pcl::ModelCoefficients);\n line_coefficients->values.resize(6);\n line_coefficients->values[0] = coefficients[3]; // x方向向量\n line_coefficients->values[1] = coefficients[4]; // y方向向量\n line_coefficients->values[2] = coefficients[5]; // z方向向量\n line_coefficients->values[3] = 0.0; // 直线上一点的x坐标\n line_coefficients->values[4] = cloud->points[61].y; // 直线上一点的y坐标\n line_coefficients->values[5] = 0.0; // 直线上一点的z坐标\n\n // 将拟合出的直线保存为PLY文件\n pcl::PointCloudpcl::PointXYZ::Ptr line_cloud(new pcl::PointCloudpcl::PointXYZ);\n pcl::PointXYZ point1(0.0, line_coefficients->values[4], 0.0);\n pcl::PointXYZ point2(1.0, line_coefficients->values[4], 0.0);\n line_cloud->push_back(point1);\n line_cloud->push_back(point2);\n line_cloud->width = 2;\n line_cloud->height = 1;\n line_cloud->is_dense = true;\n pcl::io::savePLYFile("D:\DIANYUNWENJIANJIA\最小二乘法拟合直线_ply.ply", *line_cloud, true);
原文地址: https://www.cveoy.top/t/topic/pZE0 著作权归作者所有。请勿转载和采集!