fullseye

emva_spatial_nonuniformity — OPTICS sensorchar op

使い方

DSNU と PRNU(式 33〜42・65〜67)。

dark_stack, bright_stack: 同じ露光で撮った L 枚((L, M, N)、L ≥ 2)。bright は飽和の約 50 % で撮る。 平均画像の空間分散から時間雑音の残り σ²_y/L を引き(式 36)、列・行・画素に分け(式 42)、 DSNU1288 = s_y.dark / K [e⁻] (式 66)、PRNU1288 = √(s²_y.50 − s²_y.dark)/(μ_y.50 − μ_y.dark)(式 67、比)。

highpass: None(既定、渡された画像をそのまま使う —— 互換のため)/ "r4"(8.1 節。規格は式 66・67 を 高域フィルタをかけた画像から求めると書く)/ "r3.1"(付録 C.5 の旧版)。フィルタをかけると端の 9 画素 (r3.1 は 2 画素)を落とし、時間雑音の残りの引き算にはフィルタの白い雑音の利得を掛ける(導出: 平均画像の時間雑音も 同じフィルタを通る)。★白い模様の分散そのものも利得 highpass["white_variance_gain"] 倍になる。4.0 の本文は この補正を書いていないので、補正しない(付録 C.5 の旧版は 0.96 で割れと書いていた)。

返り値 {"dark": {...}, "bright": {...}, "DSNU1288_e", "PRNU1288", "var_temporal_dark", "var_temporal_bright", "L", "highpass"}(highpass はフィルタの情報か None)。

Raises ValueError: 3-D でない / L < 2 / 形が違う / K が正でない / bright の平均が dark 以下 / s²_y.50 < s²_y.dark / highpass の名前が違う / フィルタをかけるには画像が小さい。

ファミリ共通の入力契約(fail-closed)

optics の全 op は入力を検証してから計算する(黙って通さない):

詳しい使い方ガイド

参考(サンプルデータ・文献)

実行できる例(この op を実際に呼ぶ検証済みサンプル)

型が繋がる次の op(table を入力に取れる)

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 ノートは tools/opdocs.py md が自動生成(手編集しない)。

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