Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

二変量ヒストグラムによるカラー解析

この例では、二変量ヒストグラム プロットのカラー スケールを調整し、ビンについてより詳細な情報を表示する方法を説明します。

イメージ peppers.png を読み込みます。これは複数種類の唐辛子とその他の野菜のカラー写真です。符号なし 8 ビット整数配列 rgb にイメージ データが含まれています。

rgb = imread('peppers.png');
imshow(rgb)

各ピクセルについて赤と緑の RGB 値の二変量ヒストグラムをプロットし、色の分布を可視化します。

r = rgb(:,:,1);
g = rgb(:,:,2);
b = rgb(:,:,3);
histogram2(r,g,'DisplayStyle','tile','ShowEmptyBins','on', ...
    'XBinLimits',[0 255],'YBinLimits',[0 255]);
axis equal
colorbar
xlabel('Red Values')
ylabel('Green Values')
title('Green vs. Red Pixel Components')

カウント数が非常に大きいビンがいくつかあるため、ヒストグラムがカラー スケールの下部に大きく偏っています。このため、ほとんどのビンがカラーマップの最初の色である青色で表示されています。詳細表示なしに、どの色が優勢であるかを結論付けることは困難です。

詳細を表示するために、座標軸の CLim プロパティを 0 ~ 500 の範囲に設定し、ヒストグラムのカラー スケールを再スケーリングします。この結果、カウント数が 500 以上のヒストグラム ビンは、カラーマップの最後の色である黄色で表示されます。ほとんどのビンのカウント数は、この狭い範囲内にあるため、表示されるビンの色の種類がより多くなります。

ax = gca;
ax.CLim = [0 500];

赤と青、および緑と青の優勢を比較する場合も、同様の方法を使用します。

histogram2(r,b,'DisplayStyle','tile','ShowEmptyBins','on',...
    'XBinLimits',[0 255],'YBinLimits',[0 255]);
axis equal
colorbar
xlabel('Red Values')
ylabel('Blue Values')
title('Blue vs. Red Pixel Components')
ax = gca;
ax.CLim = [0 500];

histogram2(g,b,'DisplayStyle','tile','ShowEmptyBins','on',...
    'XBinLimits',[0 255],'YBinLimits',[0 255]);
axis equal
colorbar
xlabel('Green Values')
ylabel('Blue Values')
title('Green vs. Blue Pixel Components')
ax = gca;
ax.CLim = [0 500];

いずれの場合も、青は最も優勢度が低いカラー信号です。3 つのヒストグラムをすべて確認すると、赤が優勢な色であることがわかります。

RGB 色空間でカラー ヒストグラムを作成することにより、結果を確認してください。3 つのすべての色成分において、比較的小さな RGB 値でスパイクが発生しています。ただし、100 を超える値では赤の成分が他よりも高い頻度で出現しています。

histogram(r,'BinMethod','integers','FaceColor','r','EdgeAlpha',0,'FaceAlpha',1)
hold on
histogram(g,'BinMethod','integers','FaceColor','g','EdgeAlpha',0,'FaceAlpha',0.7)
histogram(b,'BinMethod','integers','FaceColor','b','EdgeAlpha',0,'FaceAlpha',0.7)
xlabel('RGB value')
ylabel('Frequency')
title('Color histogram in RGB color space')
xlim([0 257])

参考

|