我一直在尝试实现一个名为直方图(图像)的函数来执行RGB图像的颜色直方图。 有人可以向我展示一个易于分析的样本,以便了解它是如何工作的。
我真的很感谢你的帮助。
答案 0 :(得分:4)
这是绘制图像每个颜色通道直方图的代码。
I=imread('lena.png');
r=I(:,:,1);
g=I(:,:,2);
b=I(:,:,3);
totalNumofPixel=size(I,1)*size(I,2);
FrequencyofRedValues=zeros(256,1);
FrequencyofGreenValues=zeros(256,1);
FrequencyofBlueValues=zeros(256,1);
for x=0:255
FrequencyofRedValues(x+1)=size(r(r==x),1); // number of pixels whoose intensity is x
FrequencyofGreenValues(x+1)=size(g(g==x),1);
FrequencyofBlueValues(x+1)=size(b(b==x),1);
end
stem(0:255,FrequencyofRedValues,'.r');
title('Red Channel Histogram');
figure
stem(0:255,FrequencyofGreenValues,'.g');
title('Green Channel Histogram');
figure
stem(0:255,FrequencyofBlueValues,'.b');
title('Blue Channel Histogram');
答案 1 :(得分:4)
以下是针对您的问题的不同算法:
im = imread('lena.png'); % imshow(im);
histogram(im)
function histogram(im)
[rowSize, colSize, rgb] = size(im);
nshades = 256;
hist = zeros(rgb, nshades);
figure,
RGB = ['r', 'g', 'b'];
names = [{'Red Channel'}, {'Green Channel'}, {'Blue Channel'}];
x = 0 : 255;
for colour = 1 : rgb
for k = 1 : rowSize
for m = 1 : colSize
for n = 0 : (nshades - 1) % 0 - 255
if im(k, m, colour) == n
hist(colour, n + 1) = hist(colour, n + 1) + 1;
end
end
end
end
subplot(3, 1, colour)
bar(x, hist(colour, :), RGB(colour)); title(names(colour));
end
end