sensorchar op• Data kinds: image2d → table
• Call: import fullseye as fs; fs.ledger.emva_highpass(image, method='r4', line_scan=False) (implementation को सीधे call करना हो तो import sensorchar; sensorchar.emva_highpass(image, method='r4', line_scan=False), registry से लेना हो तो opsoptics.get("emva_highpass"))
असमान प्रकाश को हटाने वाला highpass filter (खंड 8.1; पुराना रूप परिशिष्ट C.5, समीकरण 84-87)।
> नीचे का विस्तृत विवरण मूल text में है — सारांश और headings का अनुवाद हो चुका है।
8.1 節: 「7 × 7 の箱、11 × 11 の箱、3 × 3 の二項を順にかけて平滑化し、元の画像から引く」。DSNU・PRNU(式 66・67)、スペクトログラム(8.6 節)、欠陥画素のヒストグラム(8.8 節)はこの画像から求める(縦横の断面 8.7 節だけはかけない)。*method* "r4"(既定、Release 4.0)/ "r3.1"(付録 C.5: 5 × 5 の箱を引く、式 84)。*line_scan*: "r3.1" だけ —— 横 5 × 1 の箱(付録 C.5 の線カメラ)。r4 の線カメラ版は本文に無いので拒む。
端: 平滑化が完全に定義される内側だけを返す(r4 は各辺 9 画素、r3.1 は 2 画素を落とす)。r3.1 の「上下左右 2 本を捨てる」は付録 C.5 の文。r4 の 9 画素は本文に書かれていない —— 3 つのフィルタの半幅の和 3 + 5 + 1 から導いた。
白い雑音の分散の利得(white_variance_gain = Σh²、h = δ − 平滑化)はカーネルから厳密に数える。r3.1 では 1 − 1/25 = 0.96(本文の式 86 は 0.92、標準偏差を 0.96 で割れと書く —— 二乗が一つ多い。線カメラは 1 − 1/5 = 0.80 に対し本文の式 87 は 0.64)。列・行の模様(片方向にだけ変わる)は 1-D の利得 white_variance_gain_col / _row で減る。transfer は波数 k̃ = 0..1(ナイキストで 1)の 1-D の伝達関数。
返り値 {"kind": "emva_highpass", "image", "smoothed", "method", "border", "white_variance_gain", "white_variance_gain_col", "white_variance_gain_row", "standard_std_divisor", "transfer_k", "transfer"} (standard_std_divisor は付録 C.5 が書く割る数 0.96 / 0.80、r4 は None)。
Raises ValueError: 2-D の実数でない / NaN・inf / method が違う / r4 で line_scan / 画像がカーネルより小さい。
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।
• 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 में दिए गए हैं।
• poc_emva1288_in_camera_processing — py -3.11 examples/poc_emva1288_in_camera_processing.py
• poc_emva1288_sensor — py -3.11 examples/poc_emva1288_sensor.py
table को input के रूप में लेते हैं)abcd_matrix · wavefront_stats · sfr_from_edge · paraxial_trace · seidel_coefficients · spot_stats · tolerance_analysis · wavefront_from_opd
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.