関数 > 画像処理 > 画像の操作 > 例: 1 次元ヒストグラムと 2 次元ヒストグラム
例: 1 次元ヒストグラムと 2 次元ヒストグラム
imhistimhist2hist2d関数を使用して、1 次元または 2 次元のヒストグラムを作成します。
この例の使用方法については、画像処理の例についてを参照してください。
imhist
この関数は、輝度の範囲が n 個の区間に分割された行列 M の要素についてのヒストグラムを生成します。各区間には、輝度レベルの範囲に入るピクセル数が含まれています。たとえば、n = 256 の場合、8 ビットグレースケール画像のそれぞれの輝度レベルに 1 区間が対応しています。区間が 256 未満の場合、輝度レベルは次の方法に従って分割されます。
クリックしてこの式をコピー
区間のラベルは 0 から始まります。区間の数が 256 を上回る場合、区間のサイズは 1 より小さくなります。
1. 小さな行列を定義して、ヒストグラムの値と外観との関係を確認します。
クリックしてこの式をコピー
2. 区間の数を指定して imhist 関数を上記の行列に適用します。
クリックしてこの式をコピー
クリックしてこの式をコピー
n = 255 なので、256 の輝度レベルそれぞれが別々の区間に入ります。行列 P からわかるように、複数のピクセルが含まれている唯一の区間が 150 です。
クリックしてこの式をコピー
3. 輝度レベルのヒストグラムをプロットします。
クリックしてこの式をコピー
クリックしてこの式をコピー
クリックしてこの式をコピー
4. n を 5 などの小さな数値に設定し、違いを確認します。
クリックしてこの式をコピー
クリックしてこの式をコピー
クリックしてこの式をコピー
クリックしてこの式をコピー
クリックしてこの式をコピー
n = 5 なので、256 の輝度レベルは 5 つの区間に分割されなければなりません。0 から 256/5 の輝度レベルが区間 0 に入り、256/5 から 512/5 の輝度レベルが区間 1 に入り、以降の輝度レベルも同様に区間に入ります。
クリックしてこの式をコピー
行列 P と上記のヒストグラムからわかるように、輝度レベルは次のように分布されています。
0、30、40 は区間 0 (0 から 51)
区間 1 (52 から 103) に相当する輝度レベルはなし
120 および 3 つの 150 は区間 2 (103 から 154)
200 は区間 3 (154 から 205)
240 は区間 4 (205 から 256)
5. READ_IMAGE関数を使用して、空白が含まれている画像を読み込みます。
クリックしてこの式をコピー
(pattern.bmp)
6. imhist 関数を画像に適用します。
クリックしてこの式をコピー
クリックしてこの式をコピー
クリックしてこの式をコピー
クリックしてこの式をコピー
クリックしてこの式をコピー
クリックしてこの式をコピー
画像の空白部分 (輝度レベル = 255) が右側に大きなスパイクとして表されています。別の区間には黒色とさまざまな濃淡の灰色があります。
7. 区間 0 内のアイテム (黒色) と区間 255 内のアイテム (白色) の数を計算します。
クリックしてこの式をコピー
クリックしてこの式をコピー
画像内のさまざまな濃淡の灰色の領域が、X 軸上に小さなスパイクとして表れています。
imhist2
この関数を使用して、0 から 255 の範囲から値が外れているデータも区間に含めることができます。
1. 0 から 255 の範囲から外れている要素を含む行列を定義します。
クリックしてこの式をコピー
2. 区間の数を指定して n 個の区間から成るヒストグラムを計算します。
クリックしてこの式をコピー
クリックしてこの式をコピー
クリックしてこの式をコピー
3. n 個の区間の終点を計算します。
クリックしてこの式をコピー
クリックしてこの式をコピー
クリックしてこの式をコピー
クリックしてこの式をコピー
クリックしてこの式をコピー
hist2d
この関数は、2 つの画像 MN の 2 次元ヒストグラムを生成し、各次元に n 個の区間を作成します。MN は同じ大きさでなければなりません。2 つの画像で同じ輝度のピクセル数がほぼ同じである場合、hist2d からの出力行列は対角項が大きくなります。この関数は、0 から 255 の範囲を n 個の区間に分割します。
1. 区間数および同じ大きさの 2 つの画像行列を定義します。
クリックしてこの式をコピー
クリックしてこの式をコピー
クリックしてこの式をコピー
2. 上記で定義した bin_label 関数とともにベクトル化演算子を使用して、PQ の区間数を計算します。
クリックしてこの式をコピー
クリックしてこの式をコピー
クリックしてこの式をコピー
クリックしてこの式をコピー
2 次元ヒストグラム行列は n x n の行列であり、Pbins に区間番号 c の要素があり、それに対応する Qbins の要素の数が r の場合には必ず、列 cr の要素の数値が 1 つ増えます。たとえば、PbinsQbins の 1 つ目の要素はそれぞれ 0 と 2 なので、ヒストグラム行列の列 0 行 2 の数値が 1 つ増えます。
3. ゼロの行列を生成してから数値を 1 つ増やして、ヒストグラム行列を計算します。
クリックしてこの式をコピー
クリックしてこの式をコピー
クリックしてこの式をコピー
クリックしてこの式をコピー
クリックしてこの式をコピー
クリックしてこの式をコピー
クリックしてこの式をコピー
4. 上記の出力を hist2d の出力と比較します。
クリックしてこの式をコピー
クリックしてこの式をコピー
5. さらに具体的な例として、次のカラー画像について考えます。
READRGB関数を使用して画像を読み取り、WRITERGB関数を使用して画像をファイルに書き込みます。
クリックしてこの式をコピー
クリックしてこの式をコピー
(smallwar.bmp)
6. extract関数を使用して緑色と青色の成分を別々に抽出します。これにより、2 つのカラー成分を比較できます。
クリックしてこの式をコピー
クリックしてこの式をコピー
7. 2 次元ヒストグラムを表示します。
クリックしてこの式をコピー
クリックしてこの式をコピー
クリックしてこの式をコピー
クリックしてこの式をコピー
クリックしてこの式をコピー
(hist2d.bmp)
8. 輝度の対数スケール 2 次元ヒストグラムを画像として表示します。
クリックしてこの式をコピー
画像で輝度の違いを確認します。この 2 次元ヒストグラムでは対角項が大きいことから、対応する位置にあるほとんどのピクセルの輝度がほぼ同じであることがわかります。これは同じ写真の 2 つのカラー成分なので、理にかなっています。テクスチャがまったく異なる 2 つの画像では、対角項はあまり大きくなりません。
これは役に立ちましたか?