日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

29 基于PCL的点云平面分割拟合算法技术路线(针对有噪声的点云数据)

發布時間:2025/7/14 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 29 基于PCL的点云平面分割拟合算法技术路线(针对有噪声的点云数据) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

0 引言

最近項目中用到了基于PCL開發的基于平面的點云和CAD模型的配準算法,點云平面提取采用的算法如下。

1 基于PCL的點云平面分割擬合算法

?2 參數及其意義介紹

(1)點云下采樣

  1. 參數:leafsize

  2. 意義:Voxel Grid的leafsize參數,物理意義是下采樣網格的大小,直接影響處理后點云密集程度,并對后期各種算法的處理速度產生直接影響。

  3. 值越大,點云密度越低,處理速度越快;值越小,點云密度越高,處理速度越慢。通常保持這個值,使得其他的與點數有關的參數可以比較穩定而不作大的改動。

  4. 對應的代碼:

PointCloudPtr cloud(new pointCloud); ParameterReader pd(ParameterFilePath); double leafsize = stod(pd.getData("leafsize")); pcl::VoxelGrid<PointT> sor; sor.setInputCloud(CRTP::cloud_org); sor.setLeafSize(leafsize, leafsize, leafsize); sor.filter(*cloud);

(2)點云法線估計

  1. 參數:Ksearch

  2. 意義:估計法線時鄰域內點的個數

  3. 值越小,對點云的輪廓描述越精細;值越大,對點云的輪廓描述越粗糙。

  4. 對應的代碼:

ParameterReader pd(ParameterFilePath); pcl::NormalEstimation<PointT, pcl::Normal> ne; pcl::PointCloud<pcl::Normal>::Ptr mynormals(new pcl::PointCloud<pcl::Normal>); pcl::search::KdTree<PointT>::Ptr tree(new pcl::search::KdTree<PointT>); tree->setInputCloud(cloud_filter); ne.setInputCloud(cloud_filter); ne.setSearchMethod(tree); ne.setKSearch(stoi(pd.getData("Ksearch"))); ne.compute(*mynormals);

?(3)RegionGrowing生長聚類算法對可能是平面的點云進行分割

 算法步驟:  

  1. 算法首先計算所有點的曲率值,并將曲率最小的點作為種子(seeds),開始進行生長?

  2.?以法線夾角閾值(Angle threshold)作為判斷標準,對鄰域內的點進行遍歷判斷?,符合條件則加入當前點集,不符合則reject,并加入reject點集

  3. 以曲率閾值(Curvature threshold)作為判斷標準,將鄰域內符合條件的點加入到種子隊列中?

  4. 移除當前種子?

  5. 如果當前種子隊列空了,表明當前子區域分割停止,遍歷其他種子區域,直到停止整個點云均被遍歷完為止生長

 參數分析:?

  1. 參數:MinClusterSize(最小聚類點云數目),MaxClusterSize(最大聚類點云數據)

  NumberOfNeighbours(尋找種子seed點最近的點判斷是否為同類),SmoothnessThreshold(聚類的法線夾角閾值)

? ? ? ?CurvatureThreshold(聚類的曲率閾值,可以直觀地將圓柱面等區別開)

  2. 對應的代碼

ParameterReader pd(ParameterFilePath); pcl::RegionGrowing<PointT, pcl::Normal> reg; pcl::search::KdTree<PointT>::Ptr tree(new pcl::search::KdTree<PointT>); reg.setMinClusterSize(stoi(pd.getData("MinClusterSize"))); reg.setMaxClusterSize(stoi(pd.getData("MaxClusterSize"))); reg.setSearchMethod(tree); reg.setNumberOfNeighbours(stoi(pd.getData("NumberOfNeighbours"))); reg.setInputCloud(CloudFilter); reg.setInputNormals(Normals); reg.setSmoothnessThreshold(stod(pd.getData("SmoothnessThreshold")) / 180.0 * M_PI); reg.setCurvatureThreshold(stod(pd.getData("CurvatureThreshold"))); std::vector <pcl::PointIndices> clusters; reg.extract(clusters); /* wk 添加: 可視化調試 */ pcl::PointCloud<pcl::PointXYZRGB>::Ptr cloud_segmented(new pcl::PointCloud<pcl::PointXYZRGB>()); cloud_segmented = reg.getColoredCloud(); pcl::visualization::CloudViewer viewer("Cluster viewer"); viewer.showCloud(cloud_segmented); while (!viewer.wasStopped()) { } /* wk 添加: 可視化調試 */

(4)SACSegmentation 利用RANSAC算法對平面點云進行分割并擬合

  1. 參數:MaxIterations(最大迭代次數),threshold(距離閾值,判斷點是否為當前擬合平面的內點,理論上該值越大平面越粗糙)

  2. 代碼

/*RanSAC擬合平面,并將平面內點分割出來*/pcl::SACSegmentation<PointT> seg; pcl::PointIndices::Ptr inliers(new pcl::PointIndices); pcl::ModelCoefficients::Ptr coefficients(new pcl::ModelCoefficients); seg.setOptimizeCoefficients(true); seg.setModelType(pcl::SACMODEL_PLANE); seg.setMethodType(pcl::SAC_RANSAC); seg.setMaxIterations(stoi(pd.getData("Maxci"))); seg.setDistanceThreshold(stod(pd.getData("threshold"))); seg.setInputCloud(cloud); seg.segment(*inliers, *coefficients);// 分割內點,另存 pcl::ExtractIndices<PointT> extract; PointCloudPtr cloud_plane(new pointCloud); extract.setInputCloud(cloud); extract.setIndices(inliers); extract.setNegative(false); extract.filter(*cloud_plane);

??3 部分效果圖展示

(1)原圖

?

(2)RegionGrowing分割效果圖

?4 算法的局限性

  區域生長算法分割平面步驟及問題分析:針對分辨率低、掃描質量比較差的點云,如圖所示,算法無法將破碎、扭曲的大塊區域識別為平面區域,只能將這部分點判斷為非平面點集舍棄掉。

        

  區域生長算法通常在分割細節處比較平滑的平面點云時,具有相當的優勢。但是在處理“波紋”狀點云時,就沒什么優勢了。而實際掃描點云的細節部位很多時候是如上圖所示的,為了將曲率較小的曲面區別開,而調低平滑及曲率閾值時,這類從大視角上看明顯是平面的點云會被rejected,從而導致分割失效。如下圖所示,RegionGrowing更適合處理接近理想點云的這類點云,而不適合處理波動起伏狀的、掃描精度較差的點云。

         

?

轉載于:https://www.cnblogs.com/ghjnwk/p/10178975.html

總結

以上是生活随笔為你收集整理的29 基于PCL的点云平面分割拟合算法技术路线(针对有噪声的点云数据)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。