ドキュメンテーション

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

histeq

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

構文

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

説明

J = histeq(I,hgram) は、length(hgram) ビンをもつ出力強度イメージ J のヒストグラムが hgram にほぼ一致するように、強度イメージ I を変換します。ベクトル hgram には適切な範囲の強度値をもつ等間隔に分布したビンの整数カウントが格納されます。強度値の範囲は double クラスのイメージでは [0, 1]、 uint8 クラスのイメージでは [0, 255]、uint16 クラスのイメージでは [0, 65535] です。sum(hgram) = prod(size(I)) となるように、histeqhgram を自動的にスケーリングします。length(hgram)I の離散レベル数よりもはるかに小さいと、J のヒストグラムは hgram にさらに一致するようになります。

この関数はコード生成をサポートしています (ヒントを参照してください)。

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

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

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

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

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

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

クラス サポート

Iuint8uint16int16single または double のいずれかのクラスになります。出力イメージ JI と同じクラスです。オプションの出力 T のクラスは常に double になります。

gpuarrayI は gpuArray で、クラスは uint8uint16int16single または double になります。出力イメージ gpuarrayJgpuarrayI と同じクラスです。オプションの出力 gpuarrayT は gpuArray で、クラスは常に double になります。

X は、uint8single または double のいずれかのクラスとなります。出力カラーマップ newmap のクラスは常に double になります。

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

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

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

figure; imhist(I,64)

処理されたイメージのヒストグラムと比較します。

figure; imhist(J,64)

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

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

詳細

すべて折りたたむ

ヒント

  • この関数では MATLAB® Coder™ を使用した C コードの生成がサポートされています。この関数で生成されるコードでは、プリコンパイルされたプラットフォーム固有の共有ライブラリを使用します。共有ライブラリを使用するとパフォーマンスの最適化は維持されますが、コードを生成できるターゲット プラットフォームが限定されます。詳細は、「共有ライブラリを使用したコード生成」を参照してください。

    コードを生成する際、histeq ではインデックス付きイメージがサポートされておらず、PC ターゲットのみがサポートされています。

アルゴリズム

目的のヒストグラム 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;

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

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