imaging_sim op• Data kinds: table → image2d
• Call: import fullseye as fs; fs.ledger.psf_from_opd(system, field=None, size=None, wavelength_um=None, pixel_pitch_um=None, oversample=4) (implementation को सीधे call करना हो तो import lensimage; lensimage.psf_from_opd(system, field=None, size=None, wavelength_um=None, pixel_pitch_um=None, oversample=4), registry से लेना हो तो opsoptics.get("psf_from_opd"))
असली, aberrated pupil का diffraction PSF (image2d, योग 1)।
> नीचे का विस्तृत विवरण मूल text में है — सारांश और headings का अनुवाद हो चुका है।
The pupil function P = mask · exp(i·2π·W) comes from raytrace.opd_samples (*W* in waves on a size × size grid over the exit pupil; size=None picks a grid that keeps the phase below 0.4 waves per sample, up to MAX_PUPIL_SAMPLES; an explicit *size* that aliases is refused). The PSF is |FFT(P)|² on a zero-padded grid whose sample spacing is λ·F#·(size−1)/M ≈ λ·F#/oversample with the working f-number F# = 1/(2·NA_image) from raytrace.paraxial_trace. With *pixel_pitch_um* the fine PSF is area-integrated onto detector pixels of that pitch (each fine sample is binned into the pixel it falls in; the pitch must not be finer than the sample spacing).
Ground truth (tests/test_lensimage.py): an unaberrated pupil (the singlet stopped to a 1 mm semi-aperture) gives the Airy pattern — first dark ring at 1.22·λ·F# within 3 %, 83.8 % ± 1 % of the energy inside it; the f/4 singlet (11 waves of spherical aberration) has a Strehl ratio below 0.05 (peak versus the unaberrated peak of the same pupil).
optics के सभी ops गणना से पहले input की जाँच करते हैं (कुछ भी चुपचाप पास नहीं होता):
• Unit argument के नाम में ही लिखी होती है — _mm / _um / _deg / _mrad। mm और µm की गड़बड़ी crash नहीं करती, बल्कि "सही दिखने वाला पर गलत उत्तर" देती है, इसलिए नाम से इसे रोका जाता है। मान के आकार से unit का अनुमान बिल्कुल नहीं लगाया जाता।
• String से ValueError — float('50') सफल हो जाता है, इसलिए बिना parse किया config value length के रूप में निकल जाता (मापा गया: thin_lens('50', '200') सही दिखने वाला 66.667 mm लौटा रहा था)। bool को भी True == 1 वाले implicit promotion के रूप में अस्वीकार किया जाता है।
• complex / masked array से ValueError (केवल real-valued slots; imaginary part को चुपचाप छोड़ना या mask हटाना अस्वीकार)। हर input पर NaN/Inf से ValueError।
• शून्य से भाग और उससे जुड़े मामलों को नाम लेकर अस्वीकार किया जाता है: focal length 0, radius of curvature 0, refractive index <= 0, पूरी तरह opaque aperture (सब 0, इसलिए normalisation 0/0), ऐसा PSF जिसका योग <= 0 हो, S0 = 0 वाला Stokes vector, और front focal point पर रखा object (image अनंत पर)।
• केवल 2 ops non-finite value लौटाते हैं, और वह भी contract के रूप में लिखा हुआ: depth_of_field hyperfocal distance से आगे far_mm = inf (hyperfocal distance की परिभाषा यही है) और gaussian_beam waist पर wavefront_radius_mm = inf (plane wavefront की radius of curvature)। दोनों साथ में एक finite साथी (far_is_infinite / curvature_per_mm) भी लौटाते हैं। इसके अलावा कोई भी चुपचाप आया NaN/Inf अंदर ही पकड़ा जाता है और ValueError देता है — "float64 overflow हुआ" और "उत्तर अनंत है" अलग-अलग दावे हैं, इसलिए पहले को दूसरे का चेहरा पहनाकर नहीं लौटाया जाता।
• Size की सीमा: generate होने वाले grid के लिए optics.MAX_GRID (4096), दिए गए field/PSF/aperture के लिए optics.MAX_FIELD_ELEMENTS (2^24), ABCD element chain के लिए optics.MAX_SYSTEM_ELEMENTS (1024), Zernike के लिए MAX_ZERNIKE_TERMS (512) / MAX_ZERNIKE_ORDER (40) / MAX_ZERNIKE_BASIS (2^25)। छोटे argument से बहुत बड़ा internal allocation होने वाले रास्तों (मापा गया: n_max=40 × 4096² पर 108 GB) को fail-closed ढंग से बंद किया गया है।
• भौतिक रूप से असंभव states भी अस्वीकार: degree of polarisation > 1 वाला Stokes vector, ऋणात्मक transmittance, ऋणात्मक intensity, और n-|m| odd जैसे अमान्य Zernike indices।
• mv_cables — Cables (standards, speed, power delivery, robot cables)
• mv_cameras — Industrial camera निर्माता (sensor mapping, line scan / TDI)
• mv_frame_grabbers — Frame grabber boards (optics नहीं, पर यही तय करते हैं कि capture हो भी सकता है या नहीं)
• mv_image_sensors — Industrial image sensors (मुख्यतः मौजूदा products)
• mv_standards — Camera interface standards और उनके पीछे की संस्थाएँ
• virtual_machine_vision — Virtual machine vision — parameters की सूची और एक object model
• 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 के स्रोत।
• Algorithm का मानक स्रोत (लेखक, वर्ष) और उपयोग ऊपर की family usage guide में दिए गए हैं।
• lens_defect_dataset_demo — py -3.11 examples/lens_defect_dataset_demo.py
image2d को input के रूप में लेते हैं)fraunhofer_pattern · pupil_psf · pupil_blur · psf_to_mtf · edge_spread · veiling_glare_index · emva_pair_statistics · emva_defect_pixels
imaging_sim)distortion_map · render_through_lens · defect_dataset · calibration_views
*Provenance: lensimage.py — OPTICS operator registry. यह per-op note tools/opdocs.py md से अपने-आप generate होता है (हाथ से edit न करें)।*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.