Main Content

コントラスト強調方法

この例では、強度値のマッピング、ヒストグラム均等化、コントラストに制限を付けた適応ヒストグラム均等化を使用して、グレースケール イメージとカラー イメージのコントラストを強調する方法を説明します。

3 つの関数は、コントラストの強調に特に適しています。

  • imadjust は、既定の設定では、入力データの低い強度と高い強度でデータの 1% が飽和するように、入力強度イメージの値を新しい値にマッピングすることでイメージのコントラストを高くします。

  • histeq は、ヒストグラム均等化を実行します。出力イメージのヒストグラムが指定のヒストグラム (既定の設定では一様分布) にほぼ一致するように、強度イメージの値を変換することにより、イメージのコントラストを強調します。

  • adapthisteq は、コントラストに制限を付けた適応ヒストグラム均等化を実行します。histeq とは異なり、全体のイメージよりもむしろ小さなデータ領域 (タイル) を処理します。各出力領域のヒストグラムは指定のヒストグラム (既定の設定では一様分布) とほぼ一致するように各タイルのコントラストが強調できます。コントラストの強調は、イメージ内に存在するノイズの増幅を避けるために制限されます。

グレースケール イメージの強調

コントラストが低いグレースケール イメージをワークスペースで読み取ります。既定の設定の 3 つのコントラスト調整手法を使用して、イメージを強調します。

pout = imread("pout.tif");
pout_imadjust = imadjust(pout);
pout_histeq = histeq(pout);
pout_adapthisteq = adapthisteq(pout);

元のイメージと、コントラストが調整された 3 つのイメージをモンタージュとして表示します。

montage({pout,pout_imadjust,pout_histeq,pout_adapthisteq},"Size",[1 4])
title("Original Image and Enhanced Images using imadjust, histeq, and adapthisteq")

2 番目のグレースケール イメージをワークスペースに読み取り、3 つのコントラスト調整手法を使用してイメージを強調します。

tire = imread("tire.tif");
tire_imadjust = imadjust(tire);
tire_histeq = histeq(tire);
tire_adapthisteq = adapthisteq(tire);

元のイメージと、コントラストが調整された 3 つのイメージをモンタージュとして表示します。

montage({tire,tire_imadjust,tire_histeq,tire_adapthisteq},"Size",[1 4])
title("Original Image and Enhanced Images using " + ...
    "imadjust, histeq, and adapthisteq")

imadjust はタイヤのイメージにはほとんど影響を与えませんが、膨れっ面のイメージの場合には大きな変化をもたらしていることに注意してください。pout.tif および tire.tif のヒストグラムのプロットにより、最初のイメージのほとんどのピクセルがヒストグラムの中心に集中していることが明らかです。一方、tire.tif の場合、値は既に最小値 0 から最大値 255 の間に広がっています。そのため、imadjust は、イメージのコントラストの調整には有効ではありません。

figure
subplot(1,2,1)
imhist(pout)
title("Histogram of pout.tif")
subplot(1,2,2)
imhist(tire)
title("Histogram of tire.tif");

一方、ヒストグラム均等化は、両方のイメージを変化させます。以前は隠れていた多くの特徴、特にタイヤの破片粒子が露出します。残念ながら、同時に、強調は両方のイメージのいくつかの領域を過飽和させます。タイヤの中心、子供の顔の部分、およびジャケットが白っぽくなったことに注目してください。

タイヤのイメージに注目すると、イメージの他の領域のコントラストを強調しながらも、車輪の中心は、ほぼ同じ明度にとどまることが望ましいです。このようにするには、異なる変換をイメージの異なる部分に適用する必要があります。adapthisteq で実行されるコントラストに制限を付けた適応ヒストグラム均等化手法がこれを実現します。アルゴリズムは、イメージの部分を解析し、適切な変換を計算します。コントラスト強調のレベルの制限も設定できるので、histeq の基本のヒストグラムの均等化方法による過飽和を防ぐことができます。これは、この例で最も高度な手法です。

カラー イメージの強調

カラー イメージのコントラスト強調は通常、L*a*b* 色空間など、イメージの輝度を成分の 1 つとして持っている色空間にイメージを変換することにより行います。輝度レイヤー L* のみに対してコントラスト調整を実行し、イメージの変換を RGB 色空間に戻します。明度の操作は、元の色を維持しながらも、ピクセルの強度に影響を与えます。

コントラストが低いイメージをワークスペースで読み取ります。次に、イメージを RGB 色空間から L*a*b* 色空間に変換します。

shadow = imread("lowlight_1.jpg");
shadow_lab = rgb2lab(shadow);

輝度の値の範囲は 0 ~ 100 です。値を範囲 [0 1] にスケーリングします。これは、データ型 double のイメージの予想範囲です。

max_luminosity = 100;
L = shadow_lab(:,:,1)/max_luminosity;

輝度チャネルに対して 3 種類のコントラスト調整を実行し、a* および b* チャネルが変化しないようにします。イメージを RGB 色空間に変換し直します。

shadow_imadjust = shadow_lab;
shadow_imadjust(:,:,1) = imadjust(L)*max_luminosity;
shadow_imadjust = lab2rgb(shadow_imadjust);

shadow_histeq = shadow_lab;
shadow_histeq(:,:,1) = histeq(L)*max_luminosity;
shadow_histeq = lab2rgb(shadow_histeq);

shadow_adapthisteq = shadow_lab;
shadow_adapthisteq(:,:,1) = adapthisteq(L)*max_luminosity;
shadow_adapthisteq = lab2rgb(shadow_adapthisteq);

元のイメージと、コントラストが調整された 3 つのイメージをモンタージュとして表示します。

figure
montage({shadow,shadow_imadjust,shadow_histeq,shadow_adapthisteq},"Size",[1 4])
title("Original Image and Enhanced Images using " + ...
    "imadjust, histeq, and adapthisteq")

参考

| |

関連するトピック