Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

imreducehaze

大気によるかすみの低減

説明

[J,T,L] = imreducehaze(I) は、カラー イメージまたはグレースケール イメージ I 内の大気によるかすみを低減します。関数は、かすみが低減されたイメージ J、ピクセルごとのかすみの濃度の推定 T、および推定された大気の光 L を返します。

[___] = imreducehaze(I,amount) はさらに、低減するかすみの量を指定します。

[___] = imreducehaze(___,Name,Value) は、名前と値のペアを使用して、かすみを低減するアルゴリズムを変更します。

すべて折りたたむ

かすんだイメージをワークスペースに読み取ります。

A = imread('foggysf1.jpg');

かすみを低減し、元のイメージの横に結果をモンタージュで表示します。

B = imreducehaze(A);
montage({A,B})
title("Hazy Image (Left) vs. Reduced Haze Image (Right)")

Figure contains an axes. The axes with title Hazy Image (Left) vs. Reduced Haze Image (Right) contains an object of type image.

かすんだイメージをワークスペースに読み取ります。

A = imread('foggysf2.jpg');

approxdcp メソッドを使用してかすみの 90% を低減します。

B = imreducehaze(A,0.9,'method','approxdcp');

元のかすんだイメージとかすみが低減されたイメージをモンタージュで表示します。

montage({A,B})

Figure contains an axes. The axes contains an object of type image.

かすんだイメージを読み取って表示します。

A = imread('foggyroad.jpg');
imshow(A)
title('Hazy Image')

Figure contains an axes. The axes with title Hazy Image contains an object of type image.

既定のパラメーター値を使用してイメージのかすみを低減します。かすみの濃度の推定値を返します。

[~,T] = imreducehaze(A);

かすみの濃度の測定値を表示します。

imshow(T)
title('Haze Thickness')

Figure contains an axes. The axes with title Haze Thickness contains an object of type image.

かすみの濃度 T は、シーンの深度 D のおおよその近似値を提供し、未知の乗算係数まで定義されます。eps を追加して log(0) を回避します。

D = -log(1-T+eps);

推定された深度をフォールス カラーで表示します。

imshow(D,[])
title('Depth Estimate')
colormap hot

Figure contains an axes. The axes with title Depth Estimate contains an object of type image.

入力引数

すべて折りたたむ

かすんだイメージ。RGB イメージまたはグレースケール イメージとして指定します。

データ型: single | double | uint8 | uint16

低減するかすみの量。範囲 [0,1] の数値として指定します。値が 1 の場合、imreducehaze は最大量のかすみを低減します。値が 0 の場合、imreducehaze はかすみを低減せず、入力イメージは変更されません。大きい値を指定すると、色の歪みがより著しくなることがあります。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

名前と値のペアの引数

オプションの引数 Name,Value のコンマ区切りペアを指定します。Name は引数名で、Value は対応する値です。Name は引用符で囲まなければなりません。Name1,Value1,...,NameN,ValueN のように、複数の名前と値のペアの引数を、任意の順番で指定できます。

例: B = imreducehaze(A,0.9,'method','approxdcp');

かすみの低減に使用される手法。'Method' と次の値のいずれかで構成されるコンマ区切りペアとして指定します。

  • 'simpledcp' — シンプルなダーク チャネル前処理法 [2]。この手法では、ピクセルあたりのダーク チャネルを使用してかすみを推定し、四分木分割を使用して大気の光を推定します。

  • 'approxdcp' — 近似的なダーク チャネル前処理法 [1]。この手法では、ダーク チャネルを計算する際にピクセルあたりのブロックと空間ブロックの両方を使用し、四分木分割は使用しません。

詳細については、アルゴリズムを参照してください。

データ型: char | string

かすみとして扱う最大値。'AtmosphericLight' と 1 行 3 列の数値ベクトル (RGB イメージの場合) または数値スカラー (グレースケール イメージの場合) から構成されるコンマ区切りのペアとして指定します。値は [0, 1] の範囲でなければなりません。大気の光の値が 0.5 より大きいと、より良い結果が得られる傾向があります。

AtmosphericLight を指定しない場合、関数 imreduzehaze'method' の値に基づいて値を推定します。

データ型: double

コントラスト強調手法。'ContrastEnhancement' と、'global''boost'、または 'none' で構成されるコンマ区切りのペアとして指定します。

データ型: char | string

後処理として適用するピクセルあたりのゲインの量。'BoostAmount' と [0, 1] の範囲の数値で構成されるコンマ区切りのペアとして指定します。この引数は、ContrastEnhancement'boost' に指定した場合にのみサポートされます。

データ型: double

出力引数

すべて折りたたむ

かすみ低減後のイメージ。かすんだ入力イメージ I と同じサイズの数値配列として返されます。

ピクセルごとに推定されたかすみの濃度。数値配列として返されます。

推定される大気の光。数値配列として返されます。L は、最も明るい非鏡面反射性のかすみの値を表します。

アルゴリズム

かすんだイメージ I を記述するモデルは以下のとおりです。

I(x) = J(x)T(x) + L(1-T(x))
I は観測された強度、J はシーンの放射輝度、L は大気の光、T はカメラに到達する光の分量を表す伝達マップです。

かすみ低減アルゴリズムは、以下に従って、伝達マップと大気の光の推定からシーンの放射輝度 (かすみが低減したイメージ) J を復元します。

J(x) = (I(x)-A)/(max(t(x),t0)) + A

imreducehaze は、2 つの異なるかすみ低減アルゴリズム simpledcpapproxdcp を使用します。これらの手法はどちらも "ダーク チャネル前処理" に依存しています。この方法は、屋外シーンのかすみのないイメージには、1 つ以上のカラー チャネルで低信号になるピクセルが通常いくつか含まれるという観察に基づいています。これらの手法では、ダーク チャネル前処理と大気の光を推定する方法が異なります。

imreducehaze のかすみ低減アルゴリズムは以下の 5 つのステップに従います。

  1. ダーク チャネル前処理を使用して大気の光 L を推定します。

  2. 伝達マップ T を推定します。

  3. 推定した伝達マップを微調整します。

  4. イメージを復元します。

  5. オプションのコントラスト強調を実行します。

参照

[1] He, Kaiming. "Single Image Haze Removal Using Dark Channel Prior." Thesis, The Chinese University of Hong Kong. 2011.

[2] Dubok, et al. "Single Image Dehazing with Image Entropy and Information Fidelity." ICIP. 2014, pp. 4037–4041.

R2017b で導入