日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 默认站点!

默认站点

當前位置: 首頁 >

Open3D KdTree建立、3种近邻搜索及结果可视化

發布時間:2023/11/27 30 豆豆
默认站点 收集整理的這篇文章主要介紹了 Open3D KdTree建立、3种近邻搜索及结果可视化 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 點云索引

Open3D KdTree,可以快速的在無序的點云中建立空間拓撲結構,使得能迅速的進行近鄰搜索;

2. 近鄰方法分類:

Open3D這邊支持的近鄰搜索方法由VTK實現;

  • K近鄰搜索(K Nearest Neighbors Search)
  • 半徑近鄰搜索(Radius Nearest Neighbors Search)
  • 混合近鄰搜索( RKNN Radius K Nearest Neighbors Search)

3. 索引應用

  • 點云下采樣
  • 點云的高效無損壓縮 15%
  • 基于鄰域關系的快速查找

4. 效果圖

原始點云

近鄰搜索結果

k近鄰中心點紅色,K近鄰綠色
半徑近鄰中心點紅色,半徑近鄰藍色
混合近鄰中心點黃色,混合近鄰點青色

# <Open3D使用FLANN來構建KDTree,以便快速檢索最近的鄰居。>
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""
import open3d as o3d
import osdef search_knn_vector_3d(pcd, pcd_tree, k, j):# search_knn_vector_3d K近鄰查詢pcd.colors[20 * j] = [1, 0, 0]  # 給定查詢點并渲染為紅色[k, idx, _] = pcd_tree.search_knn_vector_3d(pcd.points[20 * j], k)o3d.np.asarray(pcd.colors)[idx[1:], :] = [0, 1, 0]  # K鄰域的點,渲染為綠色print(idx[1])print(pcd.points[idx[2]])def search_radius_vector_3d(pcd, pcd_tree, k, j, dis):# search_radius_vector_3d 半徑近鄰搜索pcd.colors[150 * j] = [1, 0, 0]  # 給定查詢點并渲染為紅色[k1, idx1, _] = pcd_tree.search_radius_vector_3d(pcd.points[150 * j], 2 * dis)o3d.np.asarray(pcd.colors)[idx1[1:], :] = [0, 0, 1]  # 半徑搜索結果并渲染為藍色def search_hybrid_vector_3d(pcd, pcd_tree, k, j, dis):# 混合搜索(RKNN),它最多返回K個和查詢點距離小于給定半徑的最鄰近點pcd.colors[200 * j] = [1, 1, 0]  # 給定查詢點并渲染為黃色[k2, idx2, _] = pcd_tree.search_hybrid_vector_3d(pcd.points[200 * j], 2 * dis, k)o3d.np.asarray(pcd.colors)[idx2[1:], :] = [0, 1, 0.8]  # 半徑搜索結果并渲染為青色path = os.path.abspath(os.path.join(os.getcwd(), "../"))
path = path + "/pcds/bunny.pcd"
# k:ksearch數量
# j:第多少個點*基數當作尋找的點
# dis:半徑search的半徑值基數
k = 50
j = 1
dis = 0.01
# path = path + "/pcds/1001140020191217_las2pcd_g.pcd"
# j = 150
# k = 20000
# dis = 1
print(path)pcd = o3d.io.read_point_cloud(path)
pcd.paint_uniform_color([0.5, 0.5, 0.5])  # 把所有點渲染為灰色(灰兔子)
print(pcd)
o3d.visualization.draw_geometries([pcd], window_name='Open3D KdTree Origin', width=800, height=600, left=50, top=50,point_show_normal=False, mesh_show_wireframe=False,mesh_show_back_face=False)# 建立KD樹索引
pcd_tree = o3d.geometry.KDTreeFlann(pcd)search_knn_vector_3d(pcd, pcd_tree, k, j)
search_radius_vector_3d(pcd, pcd_tree, k, j, dis)
search_hybrid_vector_3d(pcd, pcd_tree, k, j, dis)# 可視化
o3d.visualization.draw_geometries([pcd], window_name='Open3D KdTree', width=800, height=600, left=50, top=50,point_show_normal=False, mesh_show_wireframe=False,mesh_show_back_face=False)

總結

以上是默认站点為你收集整理的Open3D KdTree建立、3种近邻搜索及结果可视化的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得默认站点網站內容還不錯,歡迎將默认站点推薦給好友。