目次 — 知りたいところから読む

入力を変えて確かめる

実験パネルを開き、実行を押すとPythonを読み込みます。停止と初期値へのリセットができます。結果はこの端末内で計算します。Pythonのインストールは不要です。

下にあるローカル実行の手順は、配布ソースを再現するための任意の手順です。ブラウザ実験には不要です。

実験パネルを別タブで開く

再現用ソースをダウンロード

まず比較する

「変換なし」を実行してAに保存し、「線形露出 +1 EV」と「符号化値のゲイン2倍」を比べてください。画像をタップするかx/yを入力すると、同じ座標の変換前後のCとYを確認できます。表示を勾配に切り替え、クリッピングで境界がどう変わるか調べます。共有URLは入力条件を保存し、Aの結果や表示座標は保存しません。

操作画面は日本語・英語に対応しています。Pythonのインストールは不要です。

画素値と相対輝度

Cは0〜1の符号化されたグレー値です。このLabではR=G=BのsRGBと仮定し、復号した値を線形相対輝度Yとします。C=0.5はY≈0.214です。カメラやディスプレイを校正した値ではなく、物理的な輝度cd/m²には換算できません。

処理の順序

EVは線形Yを2^EV倍します。その後0〜1に制限してsRGBへ戻し、符号化値のゲインとオフセット、中心0.5のコントラスト、再度の制限、ガンマ補正の順で処理します。γ>1は中間値を明るくします。ゲインとオフセットの直後には制限しません。最初のクリップで消えた違いは、後で暗くしても戻りません。

Y = decode_sRGB(C) × 2^EV
C₁ = encode_sRGB(clamp(Y, 0, 1))
z = gain × C₁ + offset
z = 0.5 + contrast × (z − 0.5)
C_out = clamp(z, 0, 1)^(1/gamma)

数値の読み方

ヒストグラムは32等分した区間の実画素数です。左端を含み、最後の区間のみ右端の1も含みます。CとYは別々に集計します。平均Yは各画素を復号してから平均した値です。勾配は右・下との差の大きさを159×119点で求めます。画像はC=0〜1、勾配は0〜√2の固定表示です。クリップ数は制限前の0未満・1超過を数え、ちょうど0または1の画素とは区別します。重複を除いた画素数も表示します。

図1 · ボタンで表示を切り替え
コントラスト3倍の合成画像の変換前後。数値は下の表を参照。
条件 平均C 平均Y 平均勾配 [C/px] クリップ画素数
変換なし 0.33267188 0.16471655 0.01921348 0
線形露出 +1 EV 0.43543366 0.26062524 0.02188713 3331
符号化ゲイン2倍 0.52753125 0.31717897 0.01868123 4081
コントラスト3倍 0.21255208 0.21255208 0.03113539 19200
低コントラスト 0.46653438 0.18743543 0.00384270 0
露出 −2 EV 0.16257348 0.04117914 0.01078320 0
ガンマ2 0.54494622 0.30339745 0.01418886 0
低テクスチャ 0.41000000 0.14130621 0.00075472 0

画像認識へのつながり

低コントラストと低テクスチャのプリセットを比較してください。共有の合成画像を特徴点抽出・マッチング・オプティカルフローでも使っています。勾配の変化は検出器への入力を変え、明るさの変化はフローの明るさ一定の仮定を破る場合があります。このLabのヒストグラムだけで検出・対応・追跡の精度は測れません。

再現と関連資料

次に読む

特徴点抽出 Lab特徴点抽出 Lab — Harris と Shi–Tomasi を比較する特徴点マッチング Lab特徴点マッチング Lab — 記述子・幾何内点・真値を分けて比較するオプティカルフロー Labオプティカルフロー Lab:2フレーム間の動きを追跡する