Open3D에서 포인트 클라우드 사이의 거리를 계산할 수도 있습니다.
포인트 클라우드에서 특정 객체를 제거하거나, 두 점군의 차이를 분석할 때 사용합니다.
예: 스캔 데이터에서 불필요한 물체 삭제, 변화 감지, 정합(registration) 정확도 평가 등
point cloud distance는 두 포인트 클라우드 간 각 점들의 최단 거리를 계산하는 것을 말합니다.
import open3d as o3d
import numpy as np
# Load data
demo_crop_data = o3d.data.DemoCropPointCloud()
pcd = o3d.io.read_point_cloud(demo_crop_data.point_cloud_path)
vol = o3d.visualization.read_selection_polygon_volume(demo_crop_data.cropped_json_path)
chair = vol.crop_point_cloud(pcd)
dists = pcd.compute_point_cloud_distance(chair)
dists = np.asarray(dists)
ind = np.where(dists > 0.01)[0]
pcd_without_chair = pcd.select_by_index(ind)
o3d.visualization.draw_geometries(
[pcd_without_chair],
zoom=0.3412,
front=[0.4257, -0.2125, -0.8795],
lookat=[2.6172, 2.0475, 1.532],
up=[-0.0694, -0.9768, 0.2024]
)
포인트 클라우드에서 의자(chair) 부분만 잘라낸 뒤, 원본 전체와 의자 점들의 거리(distance)를 계산한다.
각 점이 의자에서 1cm(0.01m) 이상 떨어져 있으면 남기고, 가까우면 제거해서 "의자 없는 씬"을 만든다.
즉, 점군 간 거리 기반으로 특정 객체(의자)를 삭제하는 예제이다.


왼쪽이 수정 전 오른쪽이 수정 후
거리 기반 필터링으로 특정 객체(의자)만 선택적으로 삭제 가능합니다.