register_nonrigid — 3D deform op

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

• 호출: import fullseye as fs; fs.ledger.register_nonrigid(src, dst, iters=20, lam=1.0, k_smooth=None)(구현을 직접 호출하려면 import deform3d; deform3d.register_nonrigid(src, dst, iters=20, lam=1.0, k_smooth=None), 원장에서 가져오려면 ops3d.get("register_nonrigid"))

• 원장 경유의 반환값: fullseye.ledger.register_nonrigid(...) 는 선언된 out 형 points 의 값만 반환합니다(실제 함수는 보조 정보도 반환). 버려진 쪽이 필요하면 fullseye.ledger.register_nonrigid.raw(...) 를 쓰거나 deform3d.register_nonrigid 를 직접 호출하세요.

• 실제 반환: (warped, info, info)

사용법

비강체 ICP 로 src 를 dst 쪽으로 붙입니다.

각 반복에서 "현재 변형된 src"로부터 dst로의 최근접 대응을 다시 설정하고, 그 대응을제어점 대응(제어 중심 = 원래 src)으로 삼아 TPS를 정칙화와 함께 다시 맞추고, src를변형한다. 대응을 알지 못해도 매끄러운 비선형 변형을 복원할 수 있다.

구현상의 요점(강건성):

• 스케일 불변: λ는 dst의 무게중심 주위 RMS 반지름에 대한 상대값으로 다룬다(내부에서 λ_eff = λ·scale). 좌표가 100배여도 같은 λ가 같은 동작을 준다.

• 발산 가드: 대응이 모호하면 단순한 NN 반복은 양의 피드백으로 발산할 수 있다. 반복마다 대응 RMS를 감시하고, 최적 반복(최소 RMS)의 변형과 모델을 반환한다. 이로써 나쁜 λ에서도 "초기보다 나쁜" 결과를 반환하지 않는다.

• λ가 클수록 강체에 가깝다(변형이 작다). 기본값 λ=1.0은 보수적(거의 강체)이므로, 큰 비선형 변형을 복원하고 싶다면 λ를 작게(예: 0.01~0.05) 한다.

인수:

src: (N,3) 이동 측 점군.

dst: (M,3) 고정 측(참조) 점군.

iters: 최대 반복 횟수.

lam: TPS 정칙화 λ(스케일 상대). 클수록 변형이 매끄럽다(잘못된 대응에 강건하고,

맞춤은 느슨함). 작을수록 밀착한다(세밀한 변형을 복원).

k_smooth: None이면 최근접 1점을 목표로 한다(하드 대응). 정수를 주면

dst 측 k 근방의 평균을 목표로 하여 대응을 평활화한다(잡음에 강건).

반환값:

warped_src: (N,3) 최적 반복에서의 변형된 src.

model: 대응하는 TPS 모델(제어 중심 = 원래 src, 원래 좌표계에서 그대로

tps_warp에 넘길 수 있음). 1번도 맞추지 못했다면 None.

info: dict. "rms"(최적 대응 RMS), "rms_init"(초기=항등일 때의 대응 RMS),

"rms_history"(list), "iters"(실제 반복 수), "best_iter", "converged"(bool).

예외:

ValueError: 형상 부정, 점 수 부족, k_smooth 부정.

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

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

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

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

• nonrigid_deform — py -3.11 examples_3d/nonrigid_deform.py

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

points_to_voxel · gaussians_to_voxel · estimate_point_normals · to_points · match_points_ncc · match_pca · moment_axes · icp_point2point_3d

같은 카테고리(deform)

tps_fit · tps_warp · register_cpd_rigid


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

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