【发布时间】:2018-04-10 22:40:06
【问题描述】:
我正在做一个练习,我必须通过读取每个像素的值来绘制图像的直方图。然后我的想法是遍历每个颜色层(r,g,b)并将每个像素的值存储在矩阵中。以下代码运行,但它看起来不正确,我不完全确定为什么。第一个问题是该图不是带有垂直条和堆叠值的直方图(我该如何实现),第二个问题是该图很奇怪,因为它看起来对 r、g 和 b 应用了相同的值,这鉴于我正在使用的图像,这是不可能的。帮助?谢谢!
clc;
clear;
%% init values
% loading initial image
init_img = imread('face-1.jpg');
% rgb matrixes
r = zeros(256, 1);
g = zeros(256, 1);
b = zeros(256, 1);
%% main loop
% for each colour (r-g-b)
for a = 1:size(init_img, 3)
% loop through eache layer of the image
for i = 1:size(init_img, 1)
for j = 1:size(init_img, 2)
if(a == 1)
for n = 1:size(r,1)
if(n == init_img(i, j, 1))
% get value (x) from n(th) row, column 1
x = r(n, 1);
r(n, 1) = x+1;
end
end
elseif(a == 2)
for n = 1:size(g,1)
if(init_img(i, j, 1) == n-1)
% get value (x) from n(th) row, column 1
x = g(n, 1);
g(n, 1) = x+1;
end
end
elseif (a == 3)
for n = 1:size(b,1)
if(init_img(i, j, 1) == n-1)
% get value (x) from n(th) row, column 1
x = b(n, 1);
b(n, 1) = x+1;
end
end
end
end
end
end
%% plot
plot(r, 'Red');
hold('on');
plot(g, 'Green');
hold('on');
plot(b, 'Blue');
【问题讨论】:
-
为什么不直接在图片上使用 hist 函数呢?
-
您不是在绘制直方图,而是在使用仅绘制单个点的 plot 函数。使用 hist 或 bar 获取您想要的图表。