hdr op• Data kinds: images → image2d
• Call: import fullseye as fs; fs.ledger.exposure_fusion_mertens(images, contrast_weight=1.0, saturation_weight=1.0, exposedness_weight=1.0, sigma=0.2, n_levels=None) (implementation को सीधे call करना हो तो import hdrfusion; hdrfusion.exposure_fusion_mertens(images, contrast_weight=1.0, saturation_weight=1.0, exposedness_weight=1.0, sigma=0.2, n_levels=None), registry से लेना हो तो opsoptics.get("exposure_fusion_mertens"))
• GPU: नहीं (केवल CPU reference implementation)
exposure series को सीधे एक अच्छी exposed image में fuse करता है (image2d; RGB lists भी चलती हैं)।
> नीचे का विस्तृत विवरण मूल text में है — सारांश और headings का अनुवाद हो चुका है।
重み W = C^wc · S^ws · E^we: C = 灰色のラプラシアンの絶対値、S = 色の 3 チャンネルの標準偏差(灰色の画像では 1)、E = exp(−(I − 0.5)² / (2 σ²))(色はチャンネルの積)。画素ごとに N 枚の和を 1 に正規化し、重みのガウス・ピラミッドで画像のラプラシアン・ピラミッドを混ぜて畳む(Mertens ら 2007、Burt & Adelson 1983)。結果は [0, 1] に切る。
Images: float in [0, 1], 2-D or (H, W, 3), same shape. n_levels defaults to ⌊log2 min(H, W)⌋. Ground truth: one image (or N copies) comes back unchanged (the pyramid reconstruction is exact); with all three exponents 0 the result is the plain mean. ★The output is clipped to [0, 1] (the blend can overshoot slightly at strong edges).
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। घोषित अपवाद: bottle_fit_from_pattern का u_map न मापे जा सके पिक्सेल को NaN के रूप में लेता है (अनंत अब भी अस्वीकार)।
• शून्य से भाग और उससे जुड़े मामलों को नाम लेकर अस्वीकार किया जाता है: 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 हुआ" और "उत्तर अनंत है" अलग-अलग दावे हैं, इसलिए पहले को दूसरे का चेहरा पहनाकर नहीं लौटाया जाता। घोषित अपवाद: bottle_background_map जिन पिक्सेल की किरण अनुपयोगी है (पूर्ण आंतरिक परावर्तन आदि) उनके लिए u_mm में NaN लौटाता है, साथ में valid मास्क और गिनती भी।
• 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_hdr_glossy_metal_inspection — py -3.11 examples/poc_hdr_glossy_metal_inspection.py
image2d को input के रूप में लेते हैं)fraunhofer_pattern · pupil_psf · pupil_blur · psf_to_mtf · encircled_energy · ensquared_energy · energy_radii · mtf_tangential_sagittal
hdr)camera_response_debevec · camera_response_robertson · camera_response_linear · hdr_merge · hdr_exposure_series_simulate · hdr_radiance_error · hdr_dynamic_range
*Provenance: hdrfusion.py — OPTICS operator registry. यह per-op note tools/opdocs.py md से अपने-आप generate होता है (हाथ से edit न करें)।*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.