基于PCL的RANSAC(隨機采樣一致)算法簡介與示例


前言

RANSAC(Random sample consensus,隨機采樣一致)是3D點云擬合的一種重要的手段,可以對直線、圓、平面,圓球、圓柱等形狀的點云進行擬合,其優點在于可以最大程度上減少噪聲點對擬合效果的影響。


一、RANSAC

RANSAC各種類型擬合的計算原理基本類似。
1,進行隨機抽樣,如直線,就隨機找到兩個點;如平面,就隨機找到三個點來創建一個平面。
2,計算除去采樣點的其余點與采樣點組成的模型之間的距離,設定閾值,將符合閾值標準的點標記為內點,記錄內點個數。
3,重復前面的步驟進行迭代計算,直到達到迭代終止條件,選擇內點個數最多的模型計算最佳擬合參數。
其去除噪聲影響效果好壞的關鍵在于內點閾值的選擇和迭代次數。
PCL中有專門的一個類RandomSampleConsensus來實現其算法。
簡單分析下其計算部分。

const double log_probability  = std::log (1.0 - probability_);

源碼中probability_表示從數據集中選取采樣點N均為局內點的概率。

// Better match ?if (n_inliers_count > n_best_inliers_count){n_best_inliers_count = n_inliers_count; // This write and the previous read of n_best_inliers_count must be consecutive and must not be interrupted!n_best_inliers_count_tmp = n_best_inliers_count;// Save the current model/inlier/coefficients selection as being the best so farmodel_              = selection;model_coefficients_ = model_coefficients;// Compute the k parameter (k=std::log(z)/std::log(1-w^n))const double w = static_cast<double> (n_best_inliers_count) * one_over_indices;double p_no_outliers = 1.0 - std::pow (w, static_cast<double> (selection.size ()));p_no_outliers = (std::max) (std::numeric_limits<double>::epsilon (), p_no_outliers);       // Avoid division by -Infp_no_outliers = (std::min) (1.0 - std::numeric_limits<double>::epsilon (), p_no_outliers);   // Avoid division by 0.k = log_probability / std::log (p_no_outliers);}

以上為尋找最佳模型的代碼。
w的值為從數據集中選取一個采樣點為局內點的概率。
p_no_outliers:顧名思義,意思為非局外點的概率。
k表示估計的迭代采樣次數。

二、應用示例

1.擬合直線

PCL中采樣一致直線模型的類為SampleConsensusModelLine
通過這個類將輸入的點云轉化為采樣一致模型。

pcl::SampleConsensusModelLine<pcl::PointXYZ>::Ptr line(new pcl::SampleConsensusModelLine<pcl::PointXYZ>(cloud));
pcl::RandomSampleConsensus<pcl::PointXYZ> ransac(line);
ransac.setDistanceThreshold(0.01);
ransac.setMaxIterations(1000);
ransac.computeModel();vector<int> inliers;
ransac.getInliers(inliers);pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_line(new pcl::PointCloud<pcl::PointXYZ>);
pcl::copyPointCloud<pcl::PointXYZ>(*cloud, inliers, *cloud_line);Eigen::VectorXf coefficient;
ransac.getModelCoefficients(coefficient);

在這里插入圖片描述

2.擬合平面

同樣,SampleConsensusModelPlane表示采樣一致平面的模型。

pcl::SampleConsensusModelPlane<pcl::PointXYZ>::Ptr plane(new pcl::SampleConsensusModelPlane<pcl::PointXYZ>(cloud));pcl::RandomSampleConsensus<pcl::PointXYZ> ransac(plane);
ransac.setDistanceThreshold(0.1);
ransac.setMaxIterations(500);
ransac.setProbability(0.99);
ransac.computeModel();
vector<int> inliers; 
ransac.getInliers(inliers);       Eigen::VectorXf coefficient;
ransac.getModelCoefficients(coefficient); 

在這里插入圖片描述

3.擬合球

SampleConsensusModelSphere表示采樣一致平面的模型。

pcl::SampleConsensusModelSphere<pcl::PointXYZ>::Ptr	sphere(new pcl::SampleConsensusModelSphere<pcl::PointXYZ>(cloud));pcl::RandomSampleConsensus<pcl::PointXYZ> ransac(sphere);
ransac.setDistanceThreshold(0.1);
ransac.setMaxIterations(1000);
ransac.setProbability(0.99);
ransac.computeModel();Eigen::VectorXf coeff;
ransac.getModelCoefficients(coeff);pcl::IndicesPtr inliers(new vector <int>());
ransac.getInliers(*inliers);

在這里插入圖片描述

總結

優點:避免噪聲點對擬合結果的干擾。
缺點:由于計算結果的不確定性,迭代次數可能過高,對于密集點云來講,計算時間過長,需要進行預處理后再進行擬合過程,但同樣會損失時間。
原理部分參考:
隨機抽樣一致算法(Random sample consensus,RANSAC)詳解,保姆級教程
PCL函數庫摘要——采樣一致性

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/256067.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/256067.shtml
英文地址,請注明出處:http://en.pswp.cn/news/256067.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MATLAB調用Python自定義函數(類、函數等) Python調用MATLAB

一、MATLAB調用Python函數 參考鏈接&#xff1a;https://blog.csdn.net/qq_27280237/article/details/84644900 知乎鏈接&#xff1a;https://zhuanlan.zhihu.com/p/92081119 知乎上這位說的更加的詳細&#xff0c;感謝 二、Python調用MATLAB-API 知乎鏈接&#xff1a;htt…

Testin云測與ARM 戰略合作:推動全球移動應用加速進入中國市場

Testin云測與ARM 戰略合作&#xff1a;推動全球移動應用加速進入中國市場 2014/10/14 Testin 業界資訊&#xff08;中國北京–2014年10月14日 &#xff09;全球最大的移動游戲、應用真機和用戶云測試平臺Testin云測今日宣布與ARM建立戰略伙伴合作關系&#xff0c;設立“ARM應…

iOS:真機調試

真機調試現在發生了改變&#xff0c;在Xcode7以前進行真機調試是需要證書的&#xff0c;正是由于這個原因&#xff0c;這個過程比較麻煩&#xff1b;在Xcode7以后是免證書的&#xff0c;使用起來就簡單很多了。 Xcode7以前的步驟如下&#xff1a; 原鏈接地址為&#xff1a;http…

正則表達式快速入門,轉載

正則表達式快速入門 首先簡單介紹下正則表達式&#xff1a; 在編寫處理字符串的程序或網頁時&#xff0c;經常會有查找符合某些復雜規則的字符串的需要。正則表達式就是用于描述這些規則的工具。換句話說&#xff0c;正則表達式就是記錄文本規則的代碼。 下面就看看正則表達式里…

C++總結筆記(十三)—— 類型轉換

文章目錄一、類型轉換簡介二、示例1.隱式類型轉換2.強制類型轉換一、類型轉換簡介 C中類型轉換從形式上可分為顯式和隱式兩種。 隱式類型轉換則是由編譯器自動完成類型轉換過程&#xff0c;可以分為內置數據類型轉換和自定義數據類型轉換。 顯式的類型轉換通常使用強制類型轉…

【pyqt5】配置Qt Designer之【designer.exe的保存位置及ui文件轉py文件及no Qt platform plugin could be initialized 問題解決】

目錄 一、尋找designer.exe 二、no Qt platform plugin could be initialized 問題解決 三、ui文件轉換為py文件 四、pyqt5的使用教程 一、尋找designer.exe 頭疼&#xff0c;找了一上午都沒有找到這個的路徑&#xff0c;最后還是在評論區看到的&#xff0c;這也不能怪人家…

mysql語句大全

1、說明&#xff1a;創建數據庫CREATE DATABASE database-name2、說明&#xff1a;刪除數據庫drop database dbname3、說明&#xff1a;備份sql server--- 創建 備份數據的 deviceUSE masterEXEC sp_addumpdevice disk, testBack, c:\mssql7backup\MyNwind_1.dat--- 開始 備份B…

【翻譯】在Ext JS和Sencha Touch中創建自己定義布局

原文&#xff1a;Creating Custom Layouts in Ext JS and Sencha Touch布局系統是Sencha框架中最強大和最獨特的一部分。布局會處理應用程序中每個組件的大小和位置&#xff0c;因而&#xff0c;不須要手動去管理那些碎片。Ext JS與Sencha Touch的布局類有很多類似之處。近期在…

PCL中GreedyProjection三角化算法簡介與示例

文章目錄前言一、PCL點云三角化1.1 Delaunay三角剖分1.2 貪婪三角化二、程序示例總結前言 Delaunay三角剖分最初應用于2維領域&#xff0c;而與Greedy三角化算法的結合&#xff0c;使之成為目前在三維重建領域最為基礎的算法原理之一&#xff0c;很多學者針對其原理進行改進用…

[設計模式]中介者模式之Events消息傳遞實現

這篇文章比較短,修改自 寫給大家看的設計模式之中介者中的例子中介者模式的定義和目的自不必說, 參考上文即可. 本文針對實現方式做一個補充. 中介者模式增加了一個第三方對象(中介者)來控制兩個對象(同事)間的交互. 有助于對彼此通信的解耦, 畢竟他們并不需要關心對方的實現細…

【pyqt5】 讀取numpy arrray 顯示圖片

目錄 1、GUI界面&#xff08;QT designer設計&#xff09; 2、邏輯函數&#xff08;回調等&#xff09; 3、顯示圖片在label上 0&#xff09;直接利用QPixmap顯示圖像 1&#xff09;顯示彩色圖 彩色圖顯示色調不正常——opencv&#xff08;BGR&#xff09;QT(RGB)需要進行…

[Django]SE項目回憶錄(二)-注冊/登錄功能的實現及細節

該項目中提供了注冊和登錄兩部分功能&#xff0c;功能描述如下&#xff1a; 注冊&#xff1a; 允許任何用戶進行學生身份的注冊。 教師用戶預先已經保存在數據庫中&#xff0c;不允許以游客身份注冊新的教師用戶。 注冊時需要填寫的信息包括&#xff1a; - 用戶名 - 密碼(…

Zip4j開源jar包的簡單使用

因為對項目突然要發送壓縮加密的郵件附件&#xff0c;所以從網上看了一些資料說Zip4j開源框架比較好使&#xff0c;對中文的支持也比較好&#xff0c;所以從網上找了一個代碼案例&#xff01;自己寫了一寫&#xff0c;現在貼出來&#xff0c;方便以后想用的時候好找 1、 1 pack…

【pyqt5】——入門級模板(ui文件+ui轉py文件+邏輯py文件)(消息提示框)

目錄 1、ui文件 2、ui轉py文件 3、邏輯py文件 4、實例 1&#xff09;ui文件——demo.ui 2&#xff09;ui轉py文件——demo.py 3)邏輯py文件——demoLogic.py 4)運行結果 1、ui文件 這個文件是直接通過pyqt5 designer進行設計的&#xff0c;相關配置可見《配置Qt Design…

PCL中點特征描述子PFH、FPFH和VFH簡述和示例

文章目錄前言一、點特征直方圖1.1 PFH1.1.1 法線估計1.1.2 特征計算1.2 FPFH1.3 VFH二、示例2.1 PFH計算2.2 FPFH2.3 VFH前言 點特征直方圖是PCL中非常重要的特征描述子&#xff0c;在點云匹配、分割、重建等任務中起到關鍵作用&#xff0c;可以對剛體變換、點云密度和噪聲均有…

BZOJ 1005: [HNOI2008]明明的煩惱

BZOJ 1005: [HNOI2008]明明的煩惱 Description 自從明明學了樹的結構,就對奇怪的樹產生了興趣......給出標號為1到N的點,以及某些點最終的度數,允許在 任意兩點間連線,可產生多少棵度數滿足要求的樹? Input 第一行為N(0 < N < 1000), 接下來N行,第i1行給出第i個節點的度…

Apache Directory 指令

<Directory> 指令 語法&#xff1a;<Directory directory-path> ... </Directory> <Directory>和</Directory>用于封裝一組指令&#xff0c;使之僅對某個目錄及其子目錄生效。任何可以在"directory"作用域中使用的指令都可以使用。Dir…

來一個炫酷的導航條

本文分享一個帶動畫效果的中英文切換導航條。 鼠標放上去試一下&#xff1a; INDEX 首頁 BBS 社區 HOME 我 1.用CSS3實現 效果看上去復雜&#xff0c;其實我們先來做出一個樣式&#xff0c;就很簡單了。如下&#xff1a; 代碼&#xff1a; <nav><ul class"list…

基于C++的opencv中Mat矩陣運算方法總結

文章目錄前言一、Mat運算種類1.1 代數運算1.2 類型轉換前言 Mat類是目前opencv最為常用的圖像數據格式&#xff0c;其優點在于無需手動開辟內存空間和實時釋放&#xff0c;針對此類的各種運算方法有很多&#xff0c;本文按照各種運算方法的種類進行簡單的總結和示例。 一、Mat…

【pyqt5】——信號與槽

一、簡單Demo 簡單使用信號和槽&#xff08;之前常用的使用方式&#xff09;&#xff1a; class DemoWin(QMainWindow):def __init__(self):super().__init__()self.initUI()def initUI(self):self.resize(400, 250)self.btn QPushButton("發送信號", self)# 發送…