多平面分割系统技术文档
一、数据结构定义
struct PlaneSegmentResult { pcl:: ModelCoefficients:: Ptr coefficients; PointCloudPtr cloud; Eigen:: Vector4f centroid; int plane_id;
} ;
二、核心算法实现
1. 多平面分割函数
vector< PlaneSegmentResult> multiPlaneSegmentation ( PointCloudPtr cloud, int max_iter= 100 , float thresh= 0.05f , int min_size= 60 )
{ vector< PlaneSegmentResult> results; while ( cloud-> size ( ) > min_size) { pcl:: SACSegmentation< PointT> seg; seg. setOptimizeCoefficients ( true ) ; seg. setModelType ( pcl:: SACMODEL_PLANE) ; seg. setMethodType ( pcl:: SAC_RANSAC) ; seg. setMaxIterations ( max_iter) ; seg. setDistanceThreshold ( thresh) ; pcl:: PointIndices:: Ptr inliers ( new pcl:: PointIndices ( ) ) ; pcl:: ModelCoefficients:: Ptr coefficients ( new pcl:: ModelCoefficients) ; seg. segment ( * inliers, * coefficients) ; if ( inliers-> indices. size ( ) < min_size) break ; PointCloudPtr plane_cloud ( new PointCloud) ; pcl:: ExtractIndices< PointT> extract; extract. setInputCloud ( cloud) ; extract. setIndices ( inliers) ; extract. filter ( * plane_cloud) ; PlaneSegmentResult result; result. coefficients = coe