在不使用Matlab内置函数的情况下在rgb图像上实现颜色直方图的样本

时间:2014-11-29 18:49:39

标签: matlab image-processing histogram rgb

我一直在尝试实现一个名为直方图(图像)的函数来执行RGB图像的颜色直方图。 有人可以向我展示一个易于分析的样本,以便了解它是如何工作的。

我真的很感谢你的帮助。

2 个答案:

答案 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