簡體   English   中英

在 3D Pointcloud 中使用 ransac 拆分多個平面

[英]Split multiple planes using ransac in 3D Pointcloud

3D Pointcloud中如何使用ransac拆分多個平面?我的代碼目前只能拆分一個平面。

現在我正在使用 RANSAC 對 3D 點雲數據進行平面分割。我的代碼目前只能分割一個平面。 我想在拆分完一個平面后將其移除,然后繼續拆分其他平面。 我怎樣才能做到這一點。

`# -*-coding:utf-8 -*-
import os
import open3d as o3d
import numpy as np

test_data_dir = 'D:/test data'
point_cloud_file_name = 'Area6_office_5.pcd'
point_cloud_file_path = os.path.join(test_data_dir, point_cloud_file_name)
# 讀取點雲
pcd = o3d.io.read_point_cloud(point_cloud_file_path)
# 平面分割
plane_model, inliers = pcd.segment_plane(distance_threshold=0.03,
                                         ransac_n=3,
                                         num_iterations=1000)
# 模型參數
[a, b, c, d] = plane_model
print(f"Plane equation: {a:.2f}x + {b:.2f}y + {c:.2f}z + {d:.2f} = 0")
# 平面內的點
inlier_cloud = pcd.select_by_index(inliers)
inlier_cloud.paint_uniform_color([255.0, 0, 255.0])
# 平面外的點
outlier_cloud = pcd.select_by_index(inliers, invert=True)
# 可視化
o3d.visualization.draw_geometries([inlier_cloud, outlier_cloud],
                                  zoom=0.8,
                                  front=[-0.4999, -0.1659, -0.8499],
                                  lookat=[2.1813, 2.0619, 2.0999],
                                  up=[0.1204, -0.9852, 0.1215])
`

在此處輸入圖像描述

由於您已經有了outlier_cloud ,它是刪除了第一個平面的點雲。 您可以輕松地對outlier_cloud執行相同操作以獲得 rest 架飛機。 例如,在運行腳本后嘗試下面的代碼。

plane_model_2, inliers_2 = outlier_cloud.segment_plane(distance_threshold=0.03,
                                         ransac_n=3,
                                         num_iterations=1000)

# inliner2
inlier_cloud_2 = outlier_cloud.select_by_index(inliers_2)
inlier_cloud_2.paint_uniform_color([1, 0, 1])
# outlier2
outlier_cloud_2 = outlier_cloud.select_by_index(inliers, invert=True)
# visualization
o3d.visualization.draw_geometries([inlier_cloud_2, outlier_cloud_2],
                                  zoom=0.8,
                                  front=[-0.4999, -0.1659, -0.8499],
                                  lookat=[2.1813, 2.0619, 2.0999],
                                  up=[0.1204, -0.9852, 0.1215])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM