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)")

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

A = imread('foggysf2.jpg');

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

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

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

montage({A,B})

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

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

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

[~,T] = imreducehaze(A);

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

imshow(T)
title('Haze Thickness')

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

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

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

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

入力引数

すべて折りたたむ

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

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

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

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

名前と値の引数

オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで、Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。

例: B = imreducehaze(A,0.9,method="approxdcp"); — 近似的なダーク チャネル前処理法を使用してかすみを低減します。

R2021a より前では、コンマを使用して名前と値をそれぞれ区切り、Name を引用符で囲みます。

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

かすみの低減に使用される手法。次のいずれかの値として指定します。

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

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

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

データ型: char | string

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

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

データ型: double

コントラスト強調手法。"global""boost"、または "none" として指定します。

データ型: char | string

後処理として適用するピクセルあたりのゲインの量。範囲 (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 で導入

すべて展開する