curvilinear op• 데이터 종류: image2d → table
• 호출: import fullseye as fs; fs.ledger.fit_zernike(disk_image, n_max=6, device='cpu', nr=48, nt=72, center=None, radius=None)(구현을 직접 호출하려면 import match3d; match3d.fit_zernike(disk_image, n_max=6, device='cpu', nr=48, nt=72, center=None, radius=None), 원장에서 가져오려면 ops3d.get("fit_zernike"))
• GPU: 이 연산자는 GPU 경로가 있습니다(device="cuda")
원판 이미지 → Zernike 계수(광학/파면 계측의 극좌표 곡면 근사). 반환값 {(n,m): coef}.
직교 다항식으로 원판 위의 곡면(파면 수차, 렌즈 형상)을 소수의 계수로. tilt/defocus/astigmatism/ coma/spherical 등이 특정 (n,m)에 대응하며, 회전으로 m이 섞인다(대역=회전 불변).
동공(단위 원판 ρ=1)은 기본값으로 영상 중심 ((H-1)/2, (W-1)/2), 반경 min(H, W)/2 - 1 화소에놓인다. 영상의 동공이 이와 다르면 center=(row, col)과 radius(화소)로 넘긴다 —— 넘기지 않으면반경의 어긋남이 그대로 저차 모드로의 누설이 된다(129×129에서 동공 반경 (H-1)/2의 순수 defocus를기본값으로 읽으면 (2,0)=0.984 / (0,0)=−0.015, radius=(H-1)/2를 넘기면 0.999999). 동공의 원이 영상에서삐져나오는 center / radius는 ValueError.
honest 공시(2026-10-07 정정): 이전에는 여기에 "이산 샘플링(nr=48, nt=72) 유래의 최대 ~10%의크로스토크, nr/nt를 올리면 줄어든다"고 썼으나, 원인은 해상도가 아니었다. 동공의 반경·중심이맞고 동공 밖에도 값이 이어지는 영상이라면 기본 nr/nt로 계수는 거의 1(129×129에서 0.999999)로 돌아온다. 누설의 실제 원인은
(1) 위의 동공 반경·중심의 어긋남(nr/nt를 올려도 1 자릿수도 줄지 않는다)과, (2) 동공 밖이 0인 영상에서
가장 바깥 링(ρ=1)이 가장자리에 걸려 쌍선형 보간이 바깥쪽의 0을 빨아들이는 것(examples/poc_zernike_aberrations.py의 실측).
Raises ValueError: 입력이 2-D가 아님·2x2 미만·NaN/Inf/float32 자릿수 넘침·동공이 영상에서 삐져나옴.
• 샘플 데이터 카탈로그(DL URL / 라이선스) —— 2-D 는 skimage.data(BSD/public)+ 합성, 3-D 는 실데이터 소스(Stanford/PDS 등)의 DL URL.
• 연산자의 내력·참고문헌 —— 이 연산자 족의 바탕이 된 연구/기법의 출처.
• curvilinear_proj — py -3.11 examples_3d/curvilinear_proj.py
table 를 입력으로 받는 것)fuse_to_voxel · mesh_select_lod
curvilinear)polar_unwrap · cylinder_unwrap
*Provenance: match3d.py — 3D 연산자 레지스트리. 이 op 노트는 tools/opdocs.py md 가 자동 생성합니다(직접 편집하지 마세요).*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.