curvilinear op• Data kinds: image2d → table
• Call: import fullseye as fs; fs.ledger.fit_zernike(disk_image, n_max=6, device='cpu', nr=48, nt=72, center=None, radius=None) (implementation को सीधे call करना हो तो import match3d; match3d.fit_zernike(disk_image, n_max=6, device='cpu', nr=48, nt=72, center=None, radius=None), registry से लेना हो तो ops3d.get("fit_zernike"))
• GPU: इस op का GPU path है (device="cuda")
disc image → Zernike coefficients (optics/wavefront मापन का polar coordinate surface approximation)। return value {(n,m): coef}।
orthogonal polynomials से disc पर की surface (wavefront aberration, lens का आकार) को कुछ coefficients में बदलता है। tilt/defocus/astigmatism/ coma/spherical आदि विशिष्ट (n,m) से मेल खाते हैं, और rotation से m मिल जाते हैं (band = rotation invariant)।
pupil (unit disc ρ=1) default रूप से image के केंद्र ((H-1)/2, (W-1)/2) पर, त्रिज्या min(H, W)/2 - 1 pixel के साथ रखा जाता है। image का pupil इससे अलग हो तो center=(row, col) और radius (pixel) दें —— न देने पर त्रिज्या का अंतर सीधे low-order modes में leakage बन जाता है (129×129 पर pupil त्रिज्या (H-1)/2 वाले शुद्ध defocus को default से पढ़ने पर (2,0)=0.984 / (0,0)=−0.015, radius=(H-1)/2 देने पर 0.999999)। जिस center / radius का pupil वृत्त image से बाहर निकले, वह ValueError है।
honest प्रकटीकरण (2026-10-07 सुधार): पहले यहाँ लिखा था "discrete sampling (nr=48, nt=72) से अधिकतम ~10% का crosstalk, nr/nt बढ़ाने से घटता है", पर कारण resolution नहीं था। यदि pupil की त्रिज्या और केंद्र मेल खाते हों और pupil के बाहर भी मान जारी रहें, तो default nr/nt से coefficient लगभग 1 (129×129 पर 0.999999) पर लौट आते हैं। leakage के वास्तविक कारण हैं
(1) ऊपर बताया pupil त्रिज्या और केंद्र का अंतर (nr/nt बढ़ाने पर भी 1 order भी नहीं घटता), और (2) pupil के बाहर 0 वाली image में
सबसे बाहरी ring (ρ=1) किनारे पर पड़ती है और bilinear interpolation बाहर के 0 को खींच लेता है (examples/poc_zernike_aberrations.py का माप)।
Raises ValueError: इनपुट 2-D न हो, 2x2 से छोटा हो, NaN/Inf/float32 overflow हो, या pupil image से बाहर निकले।
• Sample data catalog (DL URL / license) — 2-D के लिए skimage.data (BSD/public) + synthetic, 3-D के लिए real data sources (Stanford/PDS आदि) के DL URL।
• Operators का स्रोत और संदर्भ — इस op family के मूल research/methods के स्रोत।
• curvilinear_proj — py -3.11 examples_3d/curvilinear_proj.py
table को input के रूप में लेते हैं)fuse_to_voxel · mesh_select_lod
curvilinear)polar_unwrap · cylinder_unwrap
*Provenance: match3d.py — 3D operator registry. यह per-op note tools/opdocs.py md से अपने-आप generate होता है (हाथ से edit न करें)।*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.