emva_noise_whiteness — OPTICS sensorchar op

• Data kinds: image2d × image2d → table

• Call: import fullseye as fs; fs.ledger.emva_noise_whiteness(y0, y1, y2=None, z_limit=5.0) (implementation को सीधे call करना हो तो import sensorchar; sensorchar.emva_noise_whiteness(y0, y1, y2=None, z_limit=5.0), registry से लेना हो तो opsoptics.get("emva_noise_whiteness"))

उपयोग

क्या temporal noise pixels के बीच स्वतंत्र है (Linear खंड 1.2 की धारणा 3), और लगातार ली गई images के बीच स्वतंत्र है (Linear और General की धारणा 3)?

> नीचे का विस्तृत विवरण मूल text में है — सारांश और headings का अनुवाद हो चुका है।

★規格は前提を書く(「前処理がこの条件を壊すなら Release 4 Linear は使えない。典型は debayer・雑音除去・輪郭強調」)が、確かめ方の数は定義していない。ここの数はこの族の検査で、規格の数ではない。同じ露光の 2 枚の差 d = y0 − y1(固定パターンが消え、時間雑音だけが残る)の隣の画素との相関 ρ_h = ⟨d[m][n] d[m][n+1]⟩/⟨d²⟩、ρ_v(縦)、斜め ρ_d(2 方向の平均)。白い雑音では 0 で、標準偏差は約 1/√n なので z = ρ √n を返す。2 × 2 にまとめた和の分散比 VR = var(和)/(4 var(d)) = 1 + ρ_h + ρ_v + ρ_d は、平滑化(雑音除去)で 1 を越え、輪郭強調で 1 を割る。*y2*(3 枚目、y1 の次の画像)を渡すと、var(y0 − y2)/var(y0 − y1) − 1 = 1 枚おきの画像の相関 ρ_t を返す(1 次の再帰の時間フィルタ y_t = α x_t + (1 − α) y_{t−1} なら ρ_t = 1 − α。独立なら 0、z は √n/√3 で割る近似)。

返り値 {"rho_h", "rho_v", "rho_d", "z_h", "z_v", "z_d", "variance_ratio_2x2", "rho_t", "z_t", "white", "z_limit", "n"} (white は |z| がすべて *z_limit* 未満)。

Raises ValueError: 2-D でない / 形が違う / 4 × 4 未満 / 差がすべて 0(雑音が無い)/ z_limit が正でない。

पूरी family का input contract (fail-closed)

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।

उपयोग की विस्तृत guide

• optics_imaging family guide

संदर्भ (sample data, साहित्य)

• 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 में दिए गए हैं।

चलाए जा सकने वाले उदाहरण (verified samples जो सच में यह op call करते हैं)

• poc_emva1288_in_camera_processing — py -3.11 examples/poc_emva1288_in_camera_processing.py

वे अगले ops जिनसे type जुड़ता है (table को input के रूप में लेते हैं)

abcd_matrix · wavefront_stats · sfr_from_edge · paraxial_trace · seidel_coefficients · spot_stats · tolerance_analysis · wavefront_from_opd

इसी category के (sensorchar)

emva_pair_statistics · emva_photon_transfer · emva_quantum_efficiency · emva_linearity_error · emva_snr_curve · emva_sensitivity_threshold · emva_dynamic_range · emva_dark_current


*Provenance: sensorchar.py — OPTICS operator registry. यह per-op note tools/opdocs.py md से अपने-आप generate होता है (हाथ से edit न करें)।*

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