detect_reflection_symmetry — 3D symmetry op

• 데이터 종류: points → primitive

• 호출: import fullseye as fs; fs.ledger.detect_reflection_symmetry(points)(구현을 직접 호출하려면 import symmetry3d; symmetry3d.detect_reflection_symmetry(points), 원장에서 가져오려면 ops3d.get("detect_reflection_symmetry"))

사용법

PCA 주축을 법선으로 하는 후보 평면(무게중심 통과) 가운데 최적의 반사 대칭면을 고릅니다.

→ dict{plane_point, plane_normal, score, all_scores, margin}. score가 작을수록 대칭이다.

★ score만으로 채택 여부를 정하지 말 것. margin을 볼 것(2026-09-06 추가). margin은 2위와 1위의 score 차이로, 후보가 뭉쳐 있으면 답은 제비뽑기 라는 경고가 된다. 실측(1500 점):

================== ======== ======== =========

형상 best 2위 margin

================== ======== ======== =========

상자(거울면 3 장) 0.9397 0.9499 0.0102

각기둥 달린 상자 0.9876 0.9918 0.0043

구 1.0490 1.0551 0.0062

균일 난수 정육면체 1.0608 1.3435 0.2828

================== ======== ======== =========

대칭면이 여러 개인 형상일수록 margin은 작다 —— 이것은 결함이 아니라 그런 형상이라는 정보다. 점군 위치 맞춤 PoC가 같은 구조를 측정하고 있는데, PCA의후보는 단순한 직육면체에서 83 %가 반전된 사분면을 잡으며, 그때 먼저 무너지는 것은잔차가 아니라 후보끼리의 margin이었다(0.42 → 0.066 → 0.039). 잔차가 아니라 margin으로 채택 여부를 본다가 양쪽에 공통된 결론이다.

★ score는 0에 가까워지지 않는다. 엄밀히 대칭인 형상이라도 점 간격이 바닥값을 만든다(위 표에서 상자가 0.94). "0에 가까운가"가 아니라 "같은 형상을 거울 반사하지 않고 측정한 값"이나 "점 간격"과 비교할 것.

★ 후보는 PCA의 3 축뿐이다. 진짜 대칭면이 주축 중 어느 것과도 일치하지 않는 형상에서는찾지 못하며, 게다가 조용히 3 개 중 최선을 반환한다. 촘촘하게 흔든 후보가 필요하면 reflection_symmetry_score를 직접 스윕할 것.

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

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

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

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

• dl_mesh_symmetry — py -3.11 examples_3d/dl_mesh_symmetry.py

• itokawa_symmetry_honest — py -3.11 examples_3d/itokawa_symmetry_honest.py

• reflection_symmetry — py -3.11 examples_3d/reflection_symmetry.py

• symmetry — py -3.11 examples_3d/symmetry.py

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

fuse_to_voxel · angle_between_lines · angle_between_planes · angle_line_plane · distance_point_plane · distance_point_line · distance_line_line · distance_segment_segment

같은 카테고리(symmetry)

detect_rotational_symmetry · reflect_points · reflection_symmetry_score


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

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