chamfer_distance — 3D metrics op

• 데이터 종류: points × points → measurement

• 호출: import fullseye as fs; fs.ledger.chamfer_distance(a, b, squared=False)(구현을 직접 호출하려면 import metrics3d; metrics3d.chamfer_distance(a, b, squared=False), 원장에서 가져오려면 ops3d.get("chamfer_distance"))

사용법

대칭 Chamfer 거리 = 0.5*(mean_a min_b + mean_b min_a). → scalar. 작을수록 일치.

Raises ValueError: 어느 한쪽이 비었거나 (N,3)이 아닌 경우(빈 집합의 평균 = 조용한 NaN).

계산: scipy.spatial.cKDTree로 a의 각 점에서 b로의 최근접 거리 d_ab ((Na,))와 b에서 a로의 d_ba를 구해 0.5 * (mean(d_ab) + mean(d_ba)). squared=True이면 각 거리를 2제곱한 뒤 평균한다(단위가 거리^2가 된다. 기울기 기반 최적화에서 쓰는 형태). 기본값은 원래 거리(단위 = 좌표의 단위).

입력: a, b는 (N, 3) / (M, 3)의 점군(점 수는 달라도 되고, 대응은불필요). float로 변환한다. 좌표계·스케일은 양쪽을 맞춰 둘 것(위치 맞춤 전의 2 점군을 비교하면 단지 자세 차이를 재는 셈이 된다).

반환값: Python float. 동일 점군이면 0. 값의 범위는 [0, inf)이며 정규화하지 않는다(점군 크기에 비례하므로 비교할 때는 bbox 대각선 등으로 나눈다).

주의: 평균이므로 이상값의 영향은 Hausdorff보다 작지만, 점 밀도의 치우침에는 민감(밀한 쪽의 평균이 지배적). 밀도를 맞추려면 pc_poisson_disk / voxel_grid_downsample를 먼저 적용한다. 임계값 기반 평가는 fscore, 최악값은 hausdorff_distance, 대응을 알면 rmse_correspondence.

배경 지식 가이드(이 연산자 앞에 있는 물리·규약)

• blender_interop — Blender와 함께 쓰기 — 형상을 만들고 fullseye로 측정(축·단위·정답 데이터의 함정)

• measurement_uncertainty — 측정 불확도와 교정 지식 — ‘측정되고 있다’고 주장하려면

참고(샘플 데이터·문헌)

• 샘플 데이터 카탈로그(DL URL / 라이선스) —— 2-D 는 skimage.data(BSD/public)+ 합성, 3-D 는 실데이터 소스(Stanford/PDS 등)의 DL URL.

• 연산자의 내력·참고문헌 —— 이 연산자 족의 바탕이 된 연구/기법의 출처.

실행 가능한 예제(이 연산자를 실제로 호출하는 검증된 샘플)

• itokawa_pose_canonical — py -3.11 examples_3d/itokawa_pose_canonical.py

• itokawa_shape_match — py -3.11 examples_3d/itokawa_shape_match.py

• mesh_lod_download — py -3.11 examples_3d/mesh_lod_download.py

• metrics_eval — py -3.11 examples_3d/metrics_eval.py

• poisson_surface_recon — py -3.11 examples_3d/poisson_surface_recon.py

타입이 이어지는 다음 연산자(measurement 를 입력으로 받는 것)

vol_gaussian_psf · fuse_to_voxel · fresnel_reflectance · snell_angle

같은 카테고리(metrics)

hausdorff_distance · m3c2_distance · fscore · rmse_correspondence · normal_consistency · voxel_iou · pose_error


*Provenance: metrics3d.py — 3D 연산자 레지스트리. 이 op 노트는 tools/opdocs.py md 가 자동 생성합니다(직접 편집하지 마세요).*

© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.