基于PCA算法的點云平面擬合

平面擬合

    • 1、平面擬合
    • 2、參考文獻
    • 3、相關代碼

在這里插入圖片描述

1、平面擬合

??PCA 是一種數學變換的方法,利用降維的思想在變換中保持變量的總方差不變,將給定的一組變量線性變換為另一組不相關的變量,并且使變換后的第一變量的方差最大,即第一主成分,其他分量的方差依次遞減。在點云數據中的變量為三維點坐標的集合,其變量為X、Y、Z 三個坐標值,則經過變換后,應有三個主成分,對于一個空間平面,在平行于平面的方向上點集分布最為離散,方差最大,在垂直于平面的方向上,點集分布最為集中,方差最小,即空間平面的第三主成分為垂直于空間平面的向量。由于平面擬合最關鍵的為法向量的擬合,利用PCA 得到點集的第三主成分,即能進一步擬合出平面方程,如圖1 所示。

在這里插入圖片描述

圖1 PCA變換原理

??對于在坐標系XYZ 下的待擬合平面點云,利用主成分分析法對其進行分析,可得到三個按照從大到小排列的特征值 λ 1 、 λ 2 、 λ 3 λ_1、λ_2、λ_3 λ1?λ2?λ3?,對應的主分量分別為 V 1 、 V 2 、 V 3 V_1、V_2、V_3 V1?V2?V3?,其中 V 1 V_1 V1? V 2 V_2 V2?組成了待擬合平面的一組基, V 3 V_3 V3? V 1 V_1 V1? V 2 V_2 V2?正交,為垂直于待擬合平面的法向量。如圖1,在XYZ 坐標系下的點云,經過主成分分析后,三個主成分分量 V 1 、 V 2 、 V 3 V_1、V_2、V_3 V1?V2?V3?組成了新坐標系 X ′ Y ′ Z ′ X'Y'Z' XYZ的三個基, V 1 V_1 V1? V 2 V_2 V2?為平面 X ′ O ′ Z ′ X'O'Z' XOZ的一組基, V 3 V_3 V3? O ′ Z ′ O'Z' OZ方向的基,即所擬合平面的法向量。

PCA 過程如下:
( 1) 特征中心化。即每一維的數據都減去該維的均值,變換之后每一維的均值都變成了零。特征中心化后的點集 P P P,如式( 1) ,其中, x i 、 y i 、 z i x_i、y_i、z_i xi?yi?zi?為中心化后點坐標:

P = [ x 1 y 1 z 1 x 2 y 2 z 2 ? ? ? x n y n z n ] (1) P=\left[ \begin{matrix} x_1 & y_1 & z_1\\ x_2 & y_2 & z_2 \\ \vdots & \vdots & \vdots\\ x_n & y_n & z_n \end{matrix} \right] \tag{1} P= ?x1?x2??xn??y1?y2??yn??z1?z2??zn?? ?(1)

(2) 計算三個坐標的協方差矩陣。協方差矩陣 C C C為:
C = [ c o v ( x , x ) c o v ( x , y ) c o v ( x , z ) c o v ( y , x ) c o v ( y , y ) c o v ( y , z ) c o v ( z , x ) c o v ( z , y ) c o v ( z , z ) ] (2) C=\left[ \begin{matrix} cov(x,x) & cov(x,y) & cov(x,z)\\ cov(y,x) & cov(y,y) & cov(y,z) \\ cov(z,x) & cov(z,y) & cov(z,z) \end{matrix} \right] \tag{2} C= ?cov(x,x)cov(y,x)cov(z,x)?cov(x,y)cov(y,y)cov(z,y)?cov(x,z)cov(y,z)cov(z,z)? ?(2)

??其中, c o v ( x , y ) cov( x,y) cov(xy) x x x 坐標和 y y y 坐標的協方差, c o v ( x , x ) cov( x,x ) cov(xx) x x x坐標的方差,協方差計算公式如式( 3) , x i 、 y i x_i、y_i xi?yi?為中心化后點坐標:
c o v ( x , y ) = ∑ i = 1 n x i y i n ? 1 (3) cov(x,y)=\frac{\sum_{i=1}^nx_iy_i}{n-1}\tag{3} cov(x,y)=n?1i=1n?xi?yi??(3)

??當協方差大于零時說明 x x x y y y是正相關關系,協方差小于零時 x x x y y y是負相關關系,協方差為零時 x x x y y y相互獨立。

( 3) 計算協方差矩陣 C C C的特征值和特征向量。所計算出來的特征值按照從大到小排序,分別為 λ 1 、 λ 2 、 λ 3 λ_1、λ_2、λ_3 λ1?λ2?λ3?,其所對應的特征向量分別為 ξ 1 、 ξ 2 、 ξ 3 ξ_1、ξ_2、ξ_3 ξ1?ξ2?ξ3?。顯然,兩個較大 λ λ λ 所對應的特征向量 ξ 1 、 ξ 2 ξ_1、ξ_2 ξ1?ξ2?為待擬合平面的一組基,而 ξ 3 ξ_3 ξ3?為待擬合平面的法向量,其三個分量分別為 a 、 b 、 c a、b、c abc
??若已知待擬合平面經過點 p ( x 0 , y 0 , z 0 ) p( x_0,y_0,z_0) p(x0?y0?z0?) ,則擬合平面為式( 4) :
a ( x - x 0 ) + b ( y - y 0 ) + c ( z - z 0 ) = 0 (4) a( x-x_0) +b( y-y_0) +c( z-z_0) = 0\tag{4} a(xx0?)+b(yy0?)+c(zz0?)=0(4)

否則,取其均值作為平面上點 p ( x ˉ , y ˉ , z ˉ ) p(\bar{x},\bar{y},\bar{z}) p(xˉ,yˉ?,zˉ) 進行擬合。
??采用主成分分析法擬合平面的方法,對于存在噪聲點的情況,也能很好的擬合出結果。因為在一個平面點云中,噪聲點偏離平面的距離相對于平面的范圍較小,對擬合結果的影響可以忽略。

2、參考文獻

[1]葉玲潔;顏遠青. 基于PCA算法的機載LiDAR點云平面分割算法研究 [J]. 城市勘測, 2018, (01): 41-44+51.

3、相關代碼

  • matlab 點云最小二乘擬合平面(PCA法)
  • matlab 點云最小二乘擬合平面(PCA法詳細過程版)
  • matlab 最小二乘擬合平面并與XOY平面對齊
  • Open3D 最小二乘擬合平面(PCA法 python詳細過程版)
  • Open3D 進階(12)PCA擬合平面

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

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

相關文章

OpenCV將兩張圖片拼接成一張圖片

OpenCV將兩張圖片拼接成一張圖片 示例代碼1示例代碼2 可以用opencv或者numpy的拼接函數,直接將兩張圖拼接到一起,很簡單方便,參考代碼2,推薦此方式。新建圖片,將兩張圖片的像素值填充到新圖片對應位置上即可&#xff0…

leetcode 32最長有效括號 34在排序數組中查找元素的第一個和最后一個位置

32. 最長有效括號 給你一個只包含 ( 和 ) 的字符串,找出最長有效(格式正確且連續)括號子串的長度。 示例 1: 輸入:s "(()" 輸出:2 解釋:最長有效括號子串是 "()" 示例 2&a…

python 二分查找函數應用——bisect_left(nums,target),bisect_right(nums,target)

bisect_left(nums,target),bisect_right(nums,target)是python內置的函數,可以便捷的幫我們完成一些有序序列的查找工作,現在將用三個樣例進行講解演示 前提注意事項: 導入函數模塊 待處理序列必須有序!!&#xff0…

淺談WPF之各種Template

前幾天寫了一篇文章【淺談WPF之控件模板和數據模板】,有粉絲反饋說這兩種模板容易弄混,不知道什么時候該用控件模塊,什么時候該用數據模板,以及template和itemtemplate之間的關系等,今天專門寫一篇文章,簡述…

26 - 原型模式與享元模式:提升系統性能的利器

原型模式和享元模式,前者是在創建多個實例時,對創建過程的性能進行調優;后者是用減少創建實例的方式,來調優系統性能。這么看,你會不會覺得兩個模式有點相互矛盾呢? 其實不然,它們的使用是分場…

TC397 EB MCAL開發從0開始系列 之 [15.1] Fee配置 - 雙扇區demo

一、Fee配置1、配置目標2、目標依賴2.1 硬件使用2.2 軟件使用2.3 新增模塊3、EB配置3.1 配置講解3.2 模塊配置3.2.1 MCU配置3.2.2 PORT配置3.2.3 Fls_17_Dmu配置3.2.4 Fee配置3.2.5 Irq配置3.2.6 ResourceM配置4、ADS代碼編寫及調試4.1 工程編譯4.2 測試結果4.3 測例源碼->

2023年學習Go語言是否值得?探索Go語言的魅力

關注公眾號【愛發白日夢的后端】分享技術干貨、讀書筆記、開源項目、實戰經驗、高效開發工具等,您的關注將是我的更新動力! 作為一門流行且不斷增長的編程語言,Go語言在2023年是否值得學習呢?讓我們來看看學習Go語言的好處以及為何…

Java使用Maven打包jar包的全部方式

1. spring-boot-maven-plugin插件&#xff08;在springboot項目中使用&#xff09; <plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><executions><execution><goals>…

1410.HTML 實體解析器

??題目來源&#xff1a; leetcode題目&#xff0c;網址&#xff1a;1410. HTML 實體解析器 - 力扣&#xff08;LeetCode&#xff09; 解題思路&#xff1a; 使用map存放特殊字符串及其應被替換為的字符串。然后遍歷字符串替換 map 中的字符串即可。 解題代碼&#xff1a; …

ubuntu 手動清理內存cache

/proc是一個虛擬文件系統&#xff0c;我們可以通過對它的讀寫操作來做為與kernel實體間進行通信的一種手段。也就是說可以通過修改/proc中的文件&#xff0c;來對當前kernel的行為做出調整。 那么我們可以通過調整/proc/sys/vm/drop_caches來釋放內存。操作如下&#xff1a; …

富士康轉移產線和中國手機海外設廠,中國手機出口減少超5億部

富士康和蘋果轉移生產線對中國手機制造造成了巨大的影響&#xff0c;除此之外&#xff0c;中國手機企業紛紛在海外設廠也在減少中國手機的出口&#xff0c;2022年中國的手機出口較高峰期減少了5.2億部。 手機是中國的大宗出口商品&#xff0c;不過公開的數據顯示2022年中國的手…

每日OJ題_算法_雙指針_力扣202. 快樂數

力扣202. 快樂數 202. 快樂數 - 力扣&#xff08;LeetCode&#xff09; 難度 簡單 編寫一個算法來判斷一個數 n 是不是快樂數。 「快樂數」 定義為&#xff1a; 對于一個正整數&#xff0c;每一次將該數替換為它每個位置上的數字的平方和。然后重復這個過程直到這個數變為…

RT-Thread 線程間同步【信號量、互斥量、事件集】

線程間同步 一、信號量1. 創建信號量2. 獲取信號量3. 釋放信號量4. 刪除信號量5. 代碼示例 二、互斥量1. 創建互斥量2. 獲取互斥量3. 釋放互斥量4. 刪除互斥量5. 代碼示例 三、事件集1. 創建事件集2. 發送事件3. 接收事件4. 刪除事件集5. 代碼示例 簡單來說&#xff0c;同步就是…

PDF轉成圖片

使用開源庫Apache PDFBox將PDF轉換為圖片 依賴 <dependency><groupId>org.apache.pdfbox</groupId><artifactId>fontbox</artifactId><version>2.0.4</version> </dependency> <dependency><groupId>org.apache…

DockerHub 無法訪問 - 解決辦法

背景 DockerHub 鏡像倉庫地址 https://hub.docker.com/ 突然就無法訪問了,且截至今日(2023/11)還無法訪問。 這對我們來說,還是有一些影響的: ● 雖然 DockerHub 頁面無法訪問,但是還是可以下載鏡像的,只是比較慢而已 ● 沒法通過界面查詢相關鏡像,或者維護相關鏡像了…

JAVA 使用stream流將List中的對象某一屬性創建新的List

JAVA 使用stream流將List中的對象某一屬性創建新的List 1.stream流介紹 Java Stream是Java 8引入的一種新機制&#xff0c;它可以讓我們以聲明式方式操作集合數據&#xff0c;提供了更加簡潔、優雅的集合處理方式。Stream是一個來自數據源的元素隊列&#xff0c;并支持聚合操…

【Rxjava詳解】(二) 操作符的妙用

文章目錄 接口變化操作符mapflatmapdebouncethrottleFirst()takeconcat RxJava 是一個基于 觀察者模式的異步編程庫&#xff0c;它提供了豐富的操作符來處理和轉換數據流。 操作符是 RxJava 的核心組成部分&#xff0c;它們提供了一種靈活、可組合的方式來處理數據流&#xf…

C++二分算法:得到子序列的最少操作次數

本文涉及的基礎知識點 二分查找算法合集 題目 給你一個數組 target &#xff0c;包含若干 互不相同 的整數&#xff0c;以及另一個整數數組 arr &#xff0c;arr 可能 包含重復元素。 每一次操作中&#xff0c;你可以在 arr 的任意位置插入任一整數。比方說&#xff0c;如果…

【如何學習Python自動化測試】—— 多層窗口定位

6 、 多層窗口定位 多層窗口指的是在操作系統圖形界面中&#xff0c;一個窗口被另一個窗口覆蓋的情況。在多層窗口中&#xff0c;如何定位需要操作的窗口&#xff1f; 一種常見的方法是使用操作系統提供的AltTab快捷鍵&#xff0c;可以在打開的所有窗口中快速切換焦點。如果需要…