exponenta event banner

Анализ цвета с помощью бивариатной гистограммы

В этом примере показано, как настроить цветовую шкалу двумерного графика гистограммы для отображения дополнительных сведений о ячейках.

Загрузить изображение peppers.png, которая представляет собой цветную фотографию нескольких видов перца и других овощей. Беззнаковый 8-разрядный целочисленный массив rgb содержит данные изображения.

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

Figure contains an axes. The axes contains an object of type image.

Постройте график двумерной гистограммы красных и зеленых значений 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')

Figure contains an axes. The axes with title Green vs. Red Pixel Components contains an object of type histogram2. This object represents g vs. r.

Гистограмма сильно взвешена к нижней части цветовой шкалы, потому что есть несколько ячеек с очень большими счетчиками. Это приводит к тому, что большинство ячеек отображаются как первый цвет в карте цветов, синий. Без дополнительной детализации трудно сделать какие-либо выводы о том, какой цвет является более доминирующим.

Для более подробного просмотра масштабируйте цветовую шкалу гистограммы, установив значение CLim свойство осей должно иметь диапазон от 0 до 500. В результате ячейки гистограммы, количество которых равно 500 или больше, отображаются в виде последнего цвета в карте цветов, желтого цвета. Поскольку большинство счетчиков ячеек находится в этом меньшем диапазоне, наблюдается большая вариация в цвете отображаемых ячеек.

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

Figure contains an axes. The axes with title Green vs. Red Pixel Components contains an object of type histogram2. This object represents g vs. r.

Аналогичный метод используется для сравнения доминирования красного и синего цветов и зеленого и синего цветов.

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];

Figure contains an axes. The axes with title Blue vs. Red Pixel Components contains an object of type histogram2. This object represents b vs. r.

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];

Figure contains an axes. The axes with title Green vs. Blue Pixel Components contains an object of type histogram2. This object represents b vs. g.

В каждом случае синий цвет является наименее доминирующим цветовым сигналом. Глядя на все три гистограммы, красный цвет кажется доминирующим.

Подтвердите результаты, создав цветовую гистограмму в цветовом пространстве RGB. Все три цветовых компонента имеют пики для меньших значений 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])

Figure contains an axes. The axes with title Color histogram in RGB color space contains 3 objects of type histogram.

См. также

|