如何學習、上手點云算法(一):點云基礎

寫在前面

  • 本文內容
    點云算法的學習基礎,入門方法,相關領域,資源,開源庫,算法等的介紹;
    以Open3D和PCL等為基礎工具的點云處理代碼講解、實現;
    文中涉及的參考以鏈接形式給出,涉及文件資源如點云,已上傳至網盤本博客資源鏈接,路徑為:
    share_noel/csdn/how_to_learn_point_cloud/how_to_learn_point_cloud_1;
    本文盡力用最簡單易懂的語言和方式來介紹相關內容,歡迎補充指正!
  • 平臺/環境
    Windows10, Ubuntu1804, CMake, Open3D, PCL
  • 轉載請注明出處:
    https://blog.csdn.net/qq_41102371/article/details/136288203

目錄

  • 寫在前面
  • 點云基礎
    • 什么是點云
    • 點云獲取方式、作用、相關領域
  • 點云算法有哪些有何用?
  • 資源
  • 常用開源庫
  • 參考

點云基礎

什么是點云

最好的認知方式莫過于實踐,現在你可以下載一個開源且跨平臺的點云可視化、處理軟件CloudCompare(如果你以后的學習或工作經常和點云打交道,請一定記住這個軟件,它將成為你的得力助手!),以及上述網盤中的點云或者你自己的點云,用CloudCompare打開下載的點云看看,建立一個感性認知,一切的故事,將從這里開始。
在這里插入圖片描述
下面是比較理性的認知:
點云(PointCloud),是一種三維空間目標的表現形式,可用一群空間離散三維點 ( x , y , z ) (x, y, z) (x,y,z) 的集合來表達,如 { P } \{P\} {P} 表示一個有 N N N 個點的點云, p i , i ∈ { 0 , 1 , 2... n } p_i, i\in\{0,1,2...n\} pi?,i{0,1,2...n} 是其中任意一點;另外,一個三維點除了空間位置信息 ( x , y , z ) (x, y, z) (x,y,z) ,還可包含顏色信息、強度信息、法向量等,以Open3D和PCL中點云的數據結構為例:

  • Open3D
    Open3D以點云為一個數據結構,點(points),顏色(colors),法向量(normals)都以3維的Vector表示(Eigen::vector3d)
    points: { ( x i , y i , z i ) , i ∈ 0 , 1 , 2... n } \{(x_i, y_i, z_i), i\in{0,1,2...n}\} {(xi?,yi?,zi?),i0,1,2...n}
    colors: { ( r i , g i , b i ) , i ∈ 0 , 1 , 2... n } \{(r_i, g_i, b_i), i\in{0,1,2...n}\} {(ri?,gi?,bi?),i0,1,2...n}
    normals { ( n x i , n y i , n z i ) , i ∈ 0 , 1 , 2... n } \{(nx_i, ny_i, nz_i), i\in{0,1,2...n}\} {(nxi?,nyi?,nzi?),i0,1,2...n}
    具體可見
    open3d::geometry::PointCloud Class Reference
    https://github.com/isl-org/Open3D/blob/main/cpp/open3d/geometry/PointCloud.h#L463
    在這里插入圖片描述
  • PCL
    PCL以點為基礎的數據結構,通過模板的方式以點的類型決定點云的類型,如PointXYZ, PointXYZI, PointXYZRGB分別表示三維點、帶強度的三維點、帶RGB的三維點,詳見
    https://pointclouds.org/documentation/namespacepcl.html
    pcl::PointXYZRGB Struct Reference
    pcl::PointCloud< PointT > Class Template Reference

點云獲取方式、作用、相關領域

  • 通過傳感器獲取
    當前可以獲取點云的常用傳感器為:

    • 激光雷達
      1、大型激光雷達掃描儀(如Leica, RIEGL等),常用于需要大范圍、高精度但不要求實時性的場景,比如測繪、礦山測量、災害現場重建。如萊卡HDS8800可達上千米的掃描范圍,但價格在百萬以上;
      在這里插入圖片描述

      以下是Leica HDS8800掃描得到室外建筑:
      在這里插入圖片描述
      2、小型固態、半固態、機械式激光雷達(Livox, 禾賽, Velodyne等),常用于實時性要求較高的工業機器人、自動駕駛等領域,價格一般在千元-萬元級;
      以下是Livox Avia非重復式掃描得到的點云:
      在這里插入圖片描述

    • 深度相機
      如Intel Realsense, 奧比中光, 銀牛等,常用于機器人、消費級產品,如體感游戲、服務機器人、掃地機、小場景三維掃描儀等;
      https://www.intelrealsense.com/lidar-camera-l515/

    • 結構光相機
      如ZIVID、Photoneo、圖漾、跨維智能、Mech-Mind等,常用于精度要求極高的場景,如工業表面缺陷檢測;
      示例點云見https://sketchfab.com/zivid/collections/manufacturing-point-clouds-18a888a297e34098ba4a7c478a049a70

    另可參考
    徠卡HDS8800
    leica HDS硬件產品系列
    RIEGL VZ-400i
    https://www.open3d.org/docs/release/tutorial/sensor/azure_kinect.html
    淺談單目結構光原理
    深度相機—TOF、RGB雙目、結構光原理及優勢對比
    3D深度相機調研【史上最全,不服來戰】

  • 通過影像三維重建獲取
    運動恢復結構(Structure From Motion, SFM)可以從二維影像中恢復相機位姿和稀疏三維空間點云,再通過稠密重建得到帶RGB的稠密點云,后續經過表面重建、紋理貼圖可以生成帶紋理的Mesh模型,其中比較基礎和出名的開源方案(pipeline)是OpenMVG(SFM)+OpenMVS(稠密、表面、紋理),以及Colmap(完整pipeline);
    影像三維重建同時也是一個比較大的研究方向,通過該方式獲得的點云具有稠密、帶紋理等特點,但無法恢復尺度信息,需要人工或者借助GPS等信息加入算法來恢復;普通的開源方案(OpenMVG+OpenMVS, Colmap, OpenSfm, AliceVison)適用于小目標、室內、室外建筑場景三維重建,比較專業的采集+處理軟件可用于城市級三維重建(攝影測量)
    有興趣可以參考:
    Awesome 3D reconstruction list
    SFM綜述
    openmvg2.0編譯與使用
    openmvs編譯與使用
    用cmake在win10配置colmap
    下圖是SFM稀疏重建得到的點云,可參考openmvg2.0編譯與使用來生成
    在這里插入圖片描述

  • 通過模型采樣、人工合成獲取
    點云通過表面重建的方式可以生成表面模型如Mesh,反之可以從表面模型上采樣得到點云
    在這里插入圖片描述

  • 開源數據集
    Stanford Bunny,點云界的Lenna.jpg
    在這里插入圖片描述
    武大WHU-TLS
    在這里插入圖片描述
    Modelnet-40
    3DMatch數據集
    Kitti

點云算法有哪些有何用?

點云算法按整個來說應當屬于計算機視覺中的3D視覺領域,主要的算法和應用為:

  • 傳統的點云算法
    采樣、濾波去噪、法向估計、特征提取、擬合、配準、(語義)分割、場景重建、表面(Mesh)重建等;
  • 深度學習點云算法
    近些年也有了許多點云深度學習的方法,如深度學習點云法向估計、點云語義分割、點云目標檢測、點云配準、點云表面重建、點云逆向工程等,點云深度學習也是比較熱門的研究方向;
  • 應用
    其中,采樣、濾波去噪、法向估計、特征提取算法是最基礎的算法,一般用于點云的預處理;擬合、分割、配準等算法屬于更高級的應用,直接或間接地為用戶提供點云處理結果,在這些算法基礎上,進一步處理獲得目標或場景的完整模型、語義信息、表面模型等;
    這些點云算法通常作為基礎算法服務于三維重建、SLAM、自動駕駛領域,比如點云三維重建用于測繪、地質調查、文物重建、數字資產、數字城市等,SLAM中地圖點云用于機器人定位、導航、避障等,自動駕駛中點云用于3D目標檢測、高精地圖制作的基礎數據等,尤其是像點云配準、分割、3D目標檢測等算法,在這些領域起到了至關重要的作用,因此點云算法可以認為是3D視覺的重要基礎之一。

資源

一些點云相關的資源
點云配準系列文章
Open3D點云處理
https://github.com/topics/point-cloud
https://github.com/timzhang642/3D-Machine-Learning
https://github.com/topics/point-cloud
https://github.com/zhulf0804/3D-PointCloud

常用開源庫

常用的點云算法開源庫有:
Open3D, PCL, CGAL, CloudCompare等

參考

文中已列出

主要做激光/影像三維重建,配準、分割等常用點云算法,熟悉open3d、pcl等開源點云庫,技術交流、咨詢可私信

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

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

相關文章

【JavaEE】_第一個SpringBoot項目

目錄 1. 第一個SpringBoot項目 1.1 創建項目 1.2 加載依賴 1.3 運行啟動類 1.4 創建一個簡單類試運行 2. 關于SpringBoot項目的目錄結構 3. 關于修改文件名 4. 關于啟動日志 5. 關于訪問出錯 5.1 404 5.1.2 URL輸入錯誤 5.1.2 注解錯誤 5.2 500 5.3 無法訪問此網…

JDK動態代理如何獲取動態生成的代理類的class文件

在使用JDK動態代理&#xff0c;即reflect包下的Proxy類的newProxyInstance方法時&#xff0c;會在運行時&#xff0c;根據傳進來的接口類型動態生成class字節碼文件。這個字節碼文件是在內存中動態獲取的&#xff0c;程序結束就沒有了&#xff0c;如何動態獲取呢。 System.set…

LeetCode 2265.統計值等于子樹平均值的節點數

給你一棵二叉樹的根節點 root &#xff0c;找出并返回滿足要求的節點數&#xff0c;要求節點的值等于其 子樹 中值的 平均值 。 注意&#xff1a; n 個元素的平均值可以由 n 個元素 求和 然后再除以 n &#xff0c;并 向下舍入 到最近的整數。 root 的 子樹 由 root 和它的所…

海外代理IP干貨:應該選擇SOCKS55代理還是Http代理?

在使用IPFoxy全球代理時&#xff0c;選擇 SOCKS55代理還是HTTP代理&#xff1f;IPFoxy代理可以SOCKS55、Http協議自主切換&#xff0c;但要怎么選擇&#xff1f;為解決這個問題&#xff0c;得充分了解兩種代理的工作原理和配置情況。 在這篇文章中&#xff0c;我們會簡要介紹 …

【雙指針+中心擴散】5. 最長回文子串

5. 最長回文子串 解題思路 初始化&#xff1a;定義一個空字符串res來存儲當前找到的最長回文子串。 遍歷字符串&#xff1a;對于字符串s中的每個位置i&#xff0c;將其作為中心&#xff0c;進行兩次回文檢查&#xff1a; 將s[i]作為單個中心進行檢查。 將s[i]和s[i1]作為共…

Android PDFView 提示401 pom

背景 在開發安卓app&#xff0c;使用PDF組件來解析URL地址 &#xff0c;從github找到一個開源組件 AndroidPdfViewer 遇到一個大坑&#xff0c;一直提示下載依賴401 pom 打開控制臺鏈接彈出需要登錄jitpack 原因分析&#xff1a; 這個組件項目依賴庫鏈接到了需要鑒權的…

大語言模型LLM分布式訓練:TensorFlow攻略與深度解析(LLM系列04)

文章目錄 大語言模型LLM分布式訓練&#xff1a;TensorFlow攻略與深度解析&#xff08;LLM系列04&#xff09;1. 引言2. TensorFlow分布式訓練基礎概念3. TensorFlow中LLM分布式訓練的關鍵技術及應用4. 利用TensorFlow進行LLM分布式訓練的具體實踐5. 高級主題與最新進展探究 大語…

SSM核心容器部分

IOC&#xff1a;Inversion of control控制反轉-使用對象時由程序中主動new對象轉為外部提供對象。 此過程中對象創建控制權由程序內部轉為外部&#xff0c;此思想稱為控制反轉。 Spring技術對IOC思想提供了實現&#xff1a; Spring提供一個容器&#xff0c;稱為IOC容器&#x…

能力認證!時代新威榮獲《數據安全服務能力評定資格證書》

2024年1月17日&#xff0c;時代新威受邀出席中國計算機行業協會數據安全專業委員會&#xff08;以下簡稱“數專委”&#xff09;年度工作總結會。此次會議旨在聚集行業企業&#xff0c;搭建數據安全產業企業交流平臺&#xff0c;共建產業發展“朋友圈”。 會上&#xff0c;數專…

windows | linux | SSH 密鑰驗證

SSH密鑰登陸過程 客戶端通過ssh-keygen生成自己的公鑰和私鑰。手動將客戶端的公鑰放入遠程服務器的指定位置。客戶端向服務器發起 SSH 登錄的請求。服務器收到用戶 SSH 登錄的請求&#xff0c;發送一些隨機數據給用戶&#xff0c;要求用戶證明自己的身份。客戶端收到服務器發來…

初階數據結構:鏈表相關題目練習(補充)

目錄 1. 單鏈表相關練習題1.1 移除鏈表元素1.2 反轉鏈表1.3 鏈表的中間結點1.4 鏈表的倒數第k個結點1.5 合并兩個有序鏈表1.6 鏈表分割1.7 鏈表的回文結構1.8 相交鏈表1.9 判斷一個鏈表中是否有環1.10 尋找環狀鏈表相遇點1.11 鏈表的深度拷貝 1. 單鏈表相關練習題 注&#xff1…

IEEE Transactions on Industrial Electronics工業電子TIE修改稿注意事項及提交須知

一、背景 兔年末投了一篇TIE&#xff0c;手稿初次提交的注意事項也整理成了博客IEEE Transactions on Industrial Electronics工業電子TIE論文投稿須知&#xff0c;獲得了許多點贊和收藏。最近也收到了審稿結果&#xff0c;給的意見是大修major revision&#xff0c;總之只要不…

基于springboot+vue的線上輔導班系統

博主主頁&#xff1a;貓頭鷹源碼 博主簡介&#xff1a;Java領域優質創作者、CSDN博客專家、阿里云專家博主、公司架構師、全網粉絲5萬、專注Java技術領域和畢業設計項目實戰&#xff0c;歡迎高校老師\講師\同行交流合作 ?主要內容&#xff1a;畢業設計(Javaweb項目|小程序|Pyt…

吸貓毛空氣凈化器哪個好?推薦除貓毛好的寵物空氣凈化器品牌

如今&#xff0c;越來越多的家庭選擇養寵物&#xff01;雖然家里變得更加溫馨&#xff0c;但養寵可能會帶來異味和空氣中的毛發增多可能會引發健康問題&#xff0c;這也是一個大問題。 但我不想家里到處都是異味&#xff0c;尤其是便便的味道&#xff0c;所以很需要一款能夠處…

QML中表格中數據獲取

1.在生成的動態表格中獲取某格數據的內容 import QtQuick 2.15 import QtQuick.Window 2.15import QtQuick.Controls 2.0 import Qt.labs.qmlmodels 1.0 import QtQuick.Layouts 1.15Window {width: 640height: 480visible: truetitle: qsTr("Hello World")TableMod…

數據分析-Pandas數據如何圖示規律

數據分析-Pandas數據如何圖示規律 數據分析和處理中&#xff0c;難免會遇到各種數據&#xff0c;那么數據呈現怎樣的規律呢&#xff1f;不管金融數據&#xff0c;風控數據&#xff0c;營銷數據等等&#xff0c;莫不如此。如何通過圖示展示數據的規律&#xff1f; 數據表&…

VS2015報錯:error MSB8020和MSB8036的解決方案

VS2015編譯報錯&#xff1a;error MSB8020 提示信息&#xff1a;error MSB8020: The build tools for v141 (Platform Toolset ‘v141’) cannot be found. To build using the v141 build tools, please install v141 build tools. Alternatively, you may upgrade to the c…

小程序框架接口-getApp

框架接口-getApp getApp() 用于獲取小程序全局唯一的 App 實例&#xff0c;通過小程序應用實例可實現數據或方法的共享 &#x1f4cc; 注意事項&#xff1a; 1.不要在 App() 方法中使用 getApp() &#xff0c;使用 this 就可以拿到 app 實例通過 getApp() 獲取實例之后&#x…

Android13 Audio框架

一、Android 13音頻代碼結構 1、framework: android/frameworks/base 1.AudioManager.java &#xff1a;音頻管理器&#xff0c;音量調節、音量UI、設置和獲取參數等控制流的對外API 2.AudioService.java &#xff1a;音頻系統服務&#xff08;java層&#xff09;&#xff0c…