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