点云法向量
????????法向量通常是針對于平面而言的,即垂直于平面的向量。因此,對于點云來說,需要先擬合出一個平面,然后才能求出相應的法向量。對于一個點,可以用周圍鄰近的點來擬合平面。
1 Open3d法向量計算方法? ? ? ??
????????這里將采用Open3d來計算法向量,其對應的函數為estimate_normals。該函數的一個參數是搜索是定義平面的搜索參數。
? ? ? ? 如上文所述,計算法向量需要擬合出一個平面,這個平面有臨近的點來決定。Open3d中提供三種方法來確定這些鄰近的點。所有計算的法向量模長為1。
o3d.geometry.KDTreeSearchParamKNN(knn=20)# 計算近鄰的20個點 o3d.geometry.KDTreeSearchParamRadius(radius=0.01)#計算指定半徑內的點 o3d.geometry.KDTreeSearchParamHybrid(radius=0.01, max_nn=20)#同時考慮搜索半徑和近鄰點個數2 python open3d 計算法向量
? ? ? ? 點云數據下載地址:ply格式點云樣例文件-深度學習文檔類資源-CSDN下載。
# -*- coding: utf-8 -*- """ Created on Sat Apr 16 08:51:41 2022@author: https://blog.csdn.net/suiyingy """import numpy as np import open3d as o3dif __name__ == '__main__': file_path = 'bun000.ply'ply = o3d.io.read_triangle_mesh(file_path)pcd = o3d.geometry.PointCloud()pcd.points = ply.verticesradius = 0.01 # 搜索半徑max_nn = 30 # 鄰域內用于估算法線的最大點數pcd.estimate_normals(search_param=o3d.geometry.KDTreeSearchParamHybrid(radius, max_nn))normals = np.array(pcd.normals)#法向量結果,Nx3#驗證法向量模長為1res = normals * normalsres = np.sum(res, axis=1)print(res)#法向量可視化o3d.visualization.draw_geometries([pcd], window_name="法線估計",point_show_normal=True,width=800, # 窗口寬度height=600) # 窗口高度3 可視化結果
? ? ? ? 炸毛的兔子。
4 Open3d注意事項
? ? ? ? 點云格式必須設置為pcd格式才能進行法向量計算。ply格式不支持法向量計算,需要按照上述代碼中的方式轉換為pcd之后才可以計算法向量。pcd文件讀取后是可以直接進行法向量。
python三維點云研究計劃_Coding的葉子的博客-CSDN博客_3d點云 python將按照以下目錄持續進行更新……點云格式介紹、點云可視化、點云投影、生成鳥瞰圖、生成前視圖、點云配準、點云分割、三維目標檢測、點云重建、深度學習點云算法……https://blog.csdn.net/suiyingy/article/details/124017716更多三維、二維感知算法和金融量化分析算法請關注“樂樂感知學堂”微信公眾號,并將持續進行更新。
總結
- 上一篇: 中文版Photoshop.CS6完全自学
- 下一篇: net: 熟悉传统的交换机芯片