Цветной анализ с двумерной гистограммой

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

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

Смотрите также

|

Была ли эта тема полезной?