ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

histeq

ヒストグラム均等化を使用したコントラストの強調

構文

J = histeq(I,hgram)
J = histeq(I,n)
[J,T] = histeq(I)
[gpuarrayJ,gpuarrayT] = histeq(gpuarrayI,___)
newmap = histeq(X,map)
newmap = histeq(X,map,hgram)
[newmap,T] = histeq(X,___)

説明

J = histeq(I,hgram) は、length(hgram) ビンをもつ出力強度イメージ J のヒストグラムがターゲット ヒストグラム hgram にほぼ一致するように、強度イメージ I を変換します。

J = histeq(I,n) は強度イメージ I を変換し、n 個の離散グレー レベルをもつ強度イメージを J で返します。ほとんど同じ数のピクセルが Jn 個の各レベルにマッピングされます。その結果、J のヒストグラムはほぼフラットになります。J のヒストグラムは nI の離散レベル数よりはるかに少ないときに、よりフラットになります。

[J,T] = histeq(I) はイメージ I のグレー レベルを J のグレー レベルにマッピングするグレースケール変換 T を返します。

[gpuarrayJ,gpuarrayT] = histeq(gpuarrayI,___) は GPU でヒストグラム均等化を実行します。入力イメージと出力イメージは gpuArray 型です。この構文では Parallel Computing Toolbox™ が必要です。

newmap = histeq(X,map) はインデックス付きイメージ X のグレー成分のヒストグラムがほぼフラットになるようにカラーマップの値を変換します。変換されたカラーマップは newmap で返されます。

newmap = histeq(X,map,hgram) は、インデックス付きイメージ (X,newmap) のグレー成分のヒストグラムがターゲット ヒストグラム hgram にほぼ一致するようにインデックス付きイメージ X に関連付けられたカラーマップを変換します。関数 histeq は変換されたカラーマップを newmap に返します。length(hgram)size(map,1) と同じでなければなりません。

[newmap,T] = histeq(X,___) はグレースケール変換 T を返します。これは map のグレー成分を newmap のグレー成分にマッピングします。

すべて折りたたむ

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

I = imread('tire.tif');

ヒストグラム均等化を使用して強度イメージのコントラストを強調します。

J = histeq(I);

元のイメージと調整されたイメージを表示します。

imshowpair(I,J,'montage')
axis off

元のイメージのヒストグラムを表示します。

figure
imhist(I,64)

処理されたイメージのヒストグラムを表示します。

figure
imhist(J,64)

3 次元データセットを読み込みます。

load mristack

ヒストグラム均等化を行います。

enhanced = histeq(mristack);

元のイメージとコントラストが強調されたイメージのデータの 1 番目のスライスを表示します。

figure
subplot(1,2,1)
imshow(mristack(:,:,1))
title('Slice of Original Image')
subplot(1,2,2)
imshow(enhanced(:,:,1))
title('Slice of Enhanced Image')

この例では、同じヒストグラム均等化を GPU で実行します。

I = gpuArray(imread('tire.tif'));
J = histeq(I);
figure
imshow(I)
figure
imshow(J)

入力引数

すべて折りたたむ

入力強度イメージ。数値配列として指定します。I は 2 次元、3 次元または N 次元のいずれかになります。

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

ターゲット ヒストグラム。数値ベクトルとして指定します。hgram には適切な範囲の強度値のビンが等間隔に分布しています。この範囲は double クラスまたは single クラスのイメージでは [0, 1]、uint8 クラスのイメージでは [0, 255]、uint16 クラスのイメージでは [0, 65535]、int16 クラスのイメージでは [-32768, 32767] です。histeqsum(hgram)=numel(I) となるように、hgram を自動的にスケーリングします。length(hgram)I の離散レベル数よりもはるかに小さいと、J のヒストグラムは hgram にさらに一致するようになります。

データ型: single | double

離散グレー レベルの数。スカラーとして指定します。

データ型: single | double

GPU 実行時の入力イメージ。gpuArray として指定します。

インデックス付きイメージ。実数値の配列として指定します。X の値は map のインデックスです。X は、2 次元、3 次元または N 次元のいずれかになります。

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

カラーマップであり、n 行 3 列の配列として指定されます。各行が RGB カラーの値を指定します。

データ型: double

出力引数

すべて折りたたむ

出力強度イメージ。入力イメージ I と同じクラスの数値配列として返されます。また、J の次元も I と同じになります。

グレースケール変換。数値ベクトルとして返されます。変換 T はイメージ I のグレー レベルを J のグレー レベルにマッピングします。

データ型: double

GPU 実行時の出力イメージ。gpuArray として返されます。

GPU 実行時のグレースケール変換。gpuArray として返されます。

変換されたカラーマップ。n 行 3 列の配列として指定します。各行が RGB カラーの値を指定します。

データ型: double

アルゴリズム

目的のヒストグラム hgram を指定すると、histeq はグレースケール変換 T を選択して

|c1(T(k))c0(k)|,

を最小化します。ここで、c0A の累積ヒストグラム、c1 はすべての強度 khgram の累積和です。この最小化の条件として、T は単調でなければならず、c1(T(a))a でのヒストグラム カウント間の距離の 1/2 を超えて c0(a) をオーバーシュートできないという制約があります。histeq は変換 b = T(a) を使用して X (またはカラーマップ) 内のグレー レベルをその新しい値にマッピングします。

hgram を指定しない場合、histeq はフラットな hgram を作成します。

hgram = ones(1,n)*prod(size(A))/n;

次に、前のアルゴリズムを適用します。

拡張機能

R2006a より前に導入

この情報は役に立ちましたか?