spectral op• Data kinds: कोई नहीं → pairs (केवल arguments से तय होने वाला op — यह कोई image या data input नहीं लेता)
• Call: import fullseye as fs; fs.ledger.spectral_reflectance_from_material(material='NUT_KERNEL', particle_um=None, thickness_mm=10.0, background_reflectance=0.05, water_fraction=None, carbon_black_fraction=0.0, internal_reflectance=0.6, wl_min_nm=900.0, wl_max_nm=2500.0, n_points=321) (implementation को सीधे call करना हो तो import spectralrad; spectralrad.spectral_reflectance_from_material(material='NUT_KERNEL', particle_um=None, thickness_mm=10.0, background_reflectance=0.05, water_fraction=None, carbon_black_fraction=0.0, internal_reflectance=0.6, wl_min_nm=900.0, wl_max_nm=2500.0, n_points=321), registry से लेना हो तो opsoptics.get("spectral_reflectance_from_material"))
material table की near-infrared absorption bands से कण (टुकड़े) का diffuse reflectance spectrum (देखी जाने वाली वस्तु की ओर)।
> नीचे का विस्तृत विवरण मूल text में है — सारांश और headings का अनुवाद हो चुका है।
1. α(λ) = materials.material_nir_absorption(帯の重ね合わせ、水は表の Hale & Querry) + カーボンブラック(materials.carbon_black_absorption、*carbon_black_fraction* 質量分率)。
2. S = S_ref · (d_ref / *particle_um*)(散乱は粒径に反比例、S_ref と d_ref は材料の表の値)。
3. 層の拡散反射 R_KM = kubelka_munk_reflectance(既定は厚さ 10 mm の粒が *background_reflectance* の上に載る —— 薄い破片ほどベルトが透ける。None なら無限厚で、背景は効かない)。
4. 界面: Saunderson (1942) の補正 R = r_s + (1 − r_s)(1 − r_i) R_KM / (1 − r_i R_KM)、r_s = ((n − 1)/(n + 1))²(表の n_nir の垂直入射 Fresnel)、r_i = *internal_reflectance* (中から見た拡散光の内部反射、0.4〜0.6 が典型)。鏡面の光沢は波長に平坦なので、黒い樹脂でも 4〜5 % の平らな反射が残り、帯の形が消える。
返り値: pairs(λ nm, R)。粒が粗い・厚いほど暗く帯が深く、細かいほど明るく浅い(Kubelka–Munk の S 依存)。
出典: Kubelka (1948)、J. L. Saunderson, J. Opt. Soc. Am. 32, 727 (1942)、帯の表は materials.NIR_BAND_MODELS の注。
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_hyperspectral_foreign_matter — py -3.11 examples/poc_hyperspectral_foreign_matter.py
pairs को input के रूप में लेते हैं)mtf50 · energy_to_photons · spectral_product · spectral_integral · spectral_stats · kubelka_munk_reflectance · hyperspectral_capture · film_thickness_fft
spectral)blackbody_spectrum · cie_illuminant_a · led_spectrum · bandpass_spectrum · silicon_photodiode_qe · energy_to_photons · spectral_product · spectral_integral
*Provenance: spectralrad.py — OPTICS operator registry. यह per-op note tools/opdocs.py md से अपने-आप generate होता है (हाथ से edit न करें)।*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.