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

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

Загрузите изображение 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.

См. также

|