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) 이상 떨어져 있으면 남기고, 가까우면 제거해서 "의자 없는 씬"을 만든다.

즉, 점군 간 거리 기반으로 특정 객체(의자)를 삭제하는 예제이다.

image.png

image.png

왼쪽이 수정 전 오른쪽이 수정 후

거리 기반 필터링으로 특정 객체(의자)만 선택적으로 삭제 가능합니다.