Open3D 最小二乘法擬合點云平面

目錄

一、概述

1.1最小二乘法原理

1.2實現步驟

1.3應用場景

二、代碼實現

2.1關鍵函數

2.2完整代碼

三、實現效果

3.1原始點云

3.2matplotlib可視化

3.3平面擬合方程


前期試讀,后續會將博客加入該專欄,歡迎訂閱

Open3D點云算法與點云深度學習案例匯總(長期更新)-CSDN博客

一、概述

1.1最小二乘法原理

????????最小二乘法(Least Squares Method)是一種用于數據擬合的數學優化方法,通過最小化誤差平方和來找到最佳擬合參數。在擬合平面時,我們使用最小二乘法來確定平面方程的參數,使得點云數據中的點到該平面的垂直距離的平方和最小。

1.2實現步驟

1.3應用場景

  1. 計算機視覺和圖像處理:在物體表面擬合、3D重建和立體視覺中,幫助理解物體的幾何形狀和結構。
  2. 地理信息系統(GIS)和遙感:在地形建模和分析中,用于生成數字高程模型(DEM)和分析地貌特征。
  3. 機器人學和導航:在路徑規劃和SLAM中,幫助機器人感知環境并進行定位和導航。
  4. 工程和結構分析:在土木工程和建筑中,用于測量建筑物和結構物的平整度和傾斜度。
  5. 醫學圖像處理:在醫學成像中,用于分析器官和組織的表面特征,輔助診斷和治療

二、代碼實現

2.1關鍵函數

????????在 fit_plane_least_squares 函數中,我們將點云數據的 x 和 y 坐標以及一個常數 1 作為矩陣 A,將 z 坐標作為向量 b。求解線性系統后,我們獲得了平面的參數 a, b 和 d。平面方程為 ax + by + cz + d = 0,因此 c = -1

def fit_plane_least_squares(points):"""使用最小二乘法直接求解擬合點云平面。參數:points (numpy.ndarray): 點云數據,形狀為 (N, 3)。返回:plane (tuple): 平面參數 (a, b, c, d),其中 ax + by + cz + d = 0。"""# 構建矩陣 A 和向量 bA = np.c_[points[:, :2], np.ones(points.shape[0])]b = points[:, 2]# 求解線性系統 A^T A [a, b, d]^T = A^T bx, residuals, rank, s = np.linalg.lstsq(A, b, rcond=None)# 返回平面參數 (a, b, c, d)a, b, d = xc = -1.0  # 平面法向量的z分量return a, b, c, d

2.2完整代碼

import open3d as o3d
import numpy as np
import matplotlib.pyplot as pltdef fit_plane_least_squares(points):"""使用最小二乘法直接求解擬合點云平面。參數:points (numpy.ndarray): 點云數據,形狀為 (N, 3)。返回:plane (tuple): 平面參數 (a, b, c, d),其中 ax + by + cz + d = 0。"""# 構建矩陣 A 和向量 bA = np.c_[points[:, :2], np.ones(points.shape[0])]b = points[:, 2]# 求解線性系統 A^T A [a, b, d]^T = A^T bx, residuals, rank, s = np.linalg.lstsq(A, b, rcond=None)# 返回平面參數 (a, b, c, d)a, b, d = xc = -1.0  # 平面法向量的z分量return a, b, c, ddef plot_fitted_plane(points, plane_params):"""繪制點云和擬合平面的網格。參數:points (numpy.ndarray): 點云數據,形狀為 (N, 3)。plane_params (tuple): 平面參數 (a, b, c, d),其中 ax + by + cz + d = 0。"""A, B, C, D = plane_params# 檢查 C 值,避免除零錯誤if np.isclose(C, 0):C = 1e-10fig1 = plt.figure()ax1 = fig1.add_subplot(111, projection='3d')ax1.set_xlabel("x")ax1.set_ylabel("y")ax1.set_zlabel("z")# 獲取xyz坐標及最值用于plot繪圖min_pt = np.amin(points, axis=0)  # 獲取坐標最小值max_pt = np.amax(points, axis=0)  # 獲取坐標最大值ax1.scatter(points[:, 0], points[:, 1], points[:, 2], c='r', marker='^')# 創建擬合的平面網格x_p = np.linspace(min_pt[0], max_pt[0], 100)y_p = np.linspace(min_pt[1], max_pt[1], 100)XFit, YFit = np.meshgrid(x_p, y_p)ZFit = -(D + A * XFit + B * YFit) / C# 繪制擬合平面網格ax1.plot_wireframe(XFit, YFit, ZFit, rstride=10, cstride=10)# 顯示圖像plt.show()# -----------------------------讀取點云--------------------------------
pcd = o3d.io.read_point_cloud("tilted_plane_noise.pcd")# 檢查并移除 NaN 和無窮大值
pcd = pcd.remove_non_finite_points()# ----------------基于最小二乘法直接求解的擬合平面-----------------------
points = np.asarray(pcd.points)  # 獲取點云數據
plane_params = fit_plane_least_squares(points)
A, B, C, D = plane_params
print('平面擬合結果為:%.6f * x + %.6f * y + %.6f * z + %.6f = 0' % (A, B, C, D))# 調用繪制網格平面的函數
plot_fitted_plane(points, plane_params)

三、實現效果

3.1原始點云

3.2matplotlib可視化

3.3平面擬合方程

平面擬合結果為:-0.004528 * x + 0.363171 * y + -1.000000 * z + 0.002728 = 0

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

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

相關文章

【學術會議征稿】第四屆人工智能、虛擬現實與可視化國際學術會議(AIVRV 2024)

第四屆人工智能、虛擬現實與可視化國際學術會議(AIVRV 2024) 2024 4th International Conference on Artificial Intelligence, Virtual Reality and Visualization 第四屆人工智能、虛擬現實與可視化國際學術會議(AIVRV 2024)將…

用python寫一個爬蟲,爬取google中關于蛇的照片

為了爬取Google中關于蛇的照片,我們可以利用Python中的第三方庫進行網頁解析和HTTP請求。請注意,這種爬取行為可能違反Google的使用條款,因此建議在合法和允許的情況下使用。以下是一個基本的Python爬蟲示例,使用Requests庫發送HT…

git 指令速查

1. 創建命令 Create Git 指令命令說明git clone 克隆遠程倉庫git init初始化本地 git 倉庫(即創建新的本地倉庫)2. 本地更改 Local Changes Git 指令命令說明git status查看當前分支狀態git diff查看已跟蹤文件的變更git add 將指定的文件添加到暫存區git add .將所有有變更的…

簡約唯美的404HTML源碼

源碼介紹 簡約唯美的404HTML源碼,很適合做網站錯誤頁,將下面的源碼放到一個空白的html里面,然后上傳到服務器里面即可使用 效果預覽 完整源碼 <!DOCTYPE html> <html><head><meta charset="utf-8"><title>404 Error Example<…

第二證券:市場估值依然處于較低區域 適合中長期布局

A股中報成績預告顯示相比2024Q1&#xff0c;2024Q2企業產品銷量或訂單已有回暖&#xff0c;但價格反轉暫未大面積到來&#xff0c;“量增價平、部分板塊以價換量”是2024H1 A股成績預告較顯著的量價特征&#xff0c;這與微觀庫存周期有待回暖相匹配。此外中游部分環節出現不同程…

Vue 3中使用 Lottie 動畫

一、Lottie動畫簡介 Lottie是由Airbnb開源的面向Android、iOS、Web和Windows的動畫庫,開發者可以使用它在Web、iOS、Android等平臺上實現高性能的體驗豐富的矢量動畫。 在早期的前端開發中,Flash是網頁動畫之王,不過它的規范約束隨意,造成很多時設計出來的產品都無法符合…

新版網頁無插件H.265播放器EasyPlayer.js如何測試demo視頻?

H5無插件流媒體播放器EasyPlayer屬于一款高效、精煉、穩定且免費的流媒體播放器&#xff0c;可支持多種流媒體協議播放&#xff0c;支持H.264與H.265編碼格式&#xff0c;性能穩定、播放流暢&#xff1b;支持WebSocket-FLV、HTTP-FLV&#xff0c;HLS&#xff08;m3u8&#xff0…

富格林:直面暗箱減少出金虧損

富格林悉知&#xff0c;在交易的過程中&#xff0c;投資者就算做好了十足的把握&#xff0c;也難免會出現出金虧損的情況。在這里建議新手投資者&#xff0c;在準備投資交易的時候&#xff0c;一定要做好充分的準備工作&#xff0c;了解黃金投資哪些暗箱陷阱&#xff0c;同時學…

【Linux】進程信號 --- 信號產生

&#x1f466;個人主頁&#xff1a;Weraphael ?&#x1f3fb;作者簡介&#xff1a;目前正在學習c和算法 ??專欄&#xff1a;Linux &#x1f40b; 希望大家多多支持&#xff0c;咱一起進步&#xff01;&#x1f601; 如果文章有啥瑕疵&#xff0c;希望大佬指點一二 如果文章對…

【轉型Web3開發第二課】Dapp開發入門基礎 | 02 | MetaMask配置網絡

本文首發于公眾號&#xff1a;Keegan小鋼 前言 完成了《轉型 Web3 開發第一課》之后&#xff0c;得到了不少讀者的認可&#xff0c;很多都在問什么時候開始下一課&#xff0c;近期終于抽出了時間開始搞起這第二課。 這第二課的主題為「Dapp開發入門基礎」&#xff0c;即想要轉…

淺談Visual Studio 2022

Visual Studio 2022&#xff08;VS2022&#xff09;提供了眾多強大的功能和改進&#xff0c;旨在提高開發者的效率和體驗。以下是一些關鍵功能的概述&#xff1a;12 64位支持&#xff1a;VS2022的64位版本不再受內存限制困擾&#xff0c;主devenv.exe進程不再局限于4GB&#xf…

【ffmpeg命令入門】重新編碼媒體流、設置碼率、設置幀速率

文章目錄 前言ffmpeg的描述重新編碼媒體流重新編碼媒體流的命令ffmpeg支持的媒體流 設置視頻碼率視頻碼率是什么設置視頻的碼率 設置文件幀數率幀數率是什么ffmpeg設置幀數率 總結 前言 在數字媒體處理領域&#xff0c;ffmpeg是一款非常強大的工具&#xff0c;它可以用來進行媒…

在線生成privacy-policy和 service-agreement

生成ppsa 網站 下面兩個是要收費的 局部功能可用 #1 Privacy Policy Generator - Privacy Policieshttps://termify.io/ 下面這個網站 創建一個是免費的 如果想要privacy-policy和 service-agreement 需要創建兩個賬戶 Termly

Java學習|JSON 處理庫:Gson、FastJson、Jackson的比較與使用指南

文章目錄 一、Gson簡介與使用注意事項1.1 簡介1.2 使用注意事項1.3 代碼示例序列化反序列化 二、FastJson簡介與使用注意事項2.1 簡介2.2 使用注意事項2.3 代碼示例序列化反序列化 三、Jackson簡介與使用注意事項3.1 簡介3.2 使用注意事項3.3 代碼示例序列化反序列化 四、關聯和…

svn不能記住密碼,反復彈出GNOME,自動重置svn.simple文件

1. 修改文件 打開 ~/.subversion/auth/svn.simple/xxx 更新前 K 15 svn:realmstring V 32 xxxxx //svn 地址&#xff0c;庫的地址 K 8 username V 4 xxx //用戶名 END在頂部插入下面內容&#xff0c; 注意&#xff0c;如果密碼不對&#xff0c;則文件文法正常生效 更新后…

37、PHP 實現一個鏈表中包含環,請找出該鏈表的環的入口結點

題目&#xff1a; 題目描述 PHP 實現一個鏈表中包含環&#xff0c;請找出該鏈表的環的入口結點。 描述&#xff1a; 一個鏈表中包含環&#xff0c;請找出該鏈表的環的入口結點。 <?php /*class ListNode{var $val;var $next NULL;function __construct($x){$this->v…

自動駕駛車道線檢測系列—3D-LaneNet: End-to-End 3D Multiple Lane Detection

文章目錄 1. 摘要概述2. 背景介紹3. 方法3.1 俯視圖投影3.2 網絡結構3.2.1 投影變換層3.2.2 投影變換層3.2.3 道路投影預測分支 3.3 車道預測頭3.4 訓練和真實值關聯 4. 實驗4.1 合成 3D 車道數據集4.2 真實世界 3D 車道數據集4.3 評估結果4.4 評估圖像僅車道檢測 5. 總結和討論…

windows下gcc編譯C、C++程序 MinGW編譯器

文章目錄 1、概要2、MinGW安裝2.1 編譯器下載2.2 編譯器安裝2.3 設置環境變量2.4 查看gcc版本信息 3、編譯C、C程序3.1 編寫Hello World.c3.2 編譯C程序3.3 運行程序3.4 編譯C程序 1、概要 GCC原名為GNU C語言編譯器&#xff08;GNU C Compiler&#xff09;&#xff0c;只能處…

SpringBoot 實現整合kafka的簡單使用

1、引入kafka的依賴 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-stream-kafka</artifactId></dependency>2、配置kafka spring:kafka:bootstrap-servers: 156.65.20.76:9092,156.65.20.…

Linux系統下weblogic10.3.6版本打補丁步驟

linux系統 weblogic補丁壓縮包&#xff1a;p35586779_1036_Generic.zip 鏈接&#xff1a;https://pan.baidu.com/s/1EEz_zPX-VHp5EU5LLxfxjQ 提取碼&#xff1a;XXXX &#xff08;補丁壓縮包中包含以下東西&#xff09; 打補丁步驟&#xff1a; 1.備份原weblogic(需要先確保服…