www.gusucode.com > matlab 案例源码 matlab代码程序 > matlab/ColorAnalysisWithBivariateHistogramExample.m

    %% Color Analysis with Bivariate Histogram
% This example shows how to adjust the color scale of a bivariate histogram
% plot to reveal additional details about the bins.

%%
% Load the image |peppers.png|, which is a color photo of several types of
% peppers and other vegetables. The unsigned 8-bit integer array |rgb|
% contains the image data.
rgb = imread('peppers.png');
imshow(rgb)

%%
% Plot a bivariate histogram of the red and green RGB values for each pixel
% to visualize the color distribution.
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')

%%
% The histogram is heavily weighted towards the bottom of
% the color scale because there are a few bins with very large counts. This
% results in most of the bins displaying as the first color in the
% colormap, blue. Without additional detail it is hard to draw any
% conclusions about which color is more dominant.

%%
% To view more detail, rescale the histogram color scale by setting the
% |CLim| property of the axes to have a range between 0 and 500. The result
% is that the histogram bins whose count is 500 or greater display as the
% last color in the colormap, yellow. Since most of the bin counts are
% within this smaller range, there is greater variation in the color of
% bins displayed.
ax = gca;
ax.CLim = [0 500];

%%
% Use a similar method to compare the dominance of red vs. blue and green
% vs. blue.
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];

%%
% In each case, blue is the least dominant color signal. Looking at all
% three histograms, red appears to be the dominant color.

%%
% Confirm the results by creating a color histogram in the RGB color space.
% All three color components have spikes for smaller RGB values. However,
% the values above 100 occur more frequently in the red component than any
% other.
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])