我试图对二进制图像进行垂直直方图。我不想使用MATLAB的功能。怎么做?
我试过这段代码,但我不知道它是否正确:
function H = histogram_binary(image)
[m,n] = size(image);
H = zeros(1,256);
for i = 1:m
for j = 1:n
H(1,image(i,j)) = H(1,image(i,j))+1;
end
end
图片是:
结果:
为什么我无法在直方图中看到黑色像素的值?
答案 0 :(得分:1)
% Read the binary image...
img = imread('66He7.png');
% Count total, white and black pixels...
img_vec = img(:);
total = numel(img_vec);
white = sum(img_vec);
black = total - white;
% Plot the result in the form of an histogram...
bar([black white]);
set(gca(),'XTickLabel',{'Black' 'White'});
set(gca(),'YLim',[0 total]);
输出:
对于您的代码有什么问题,它不计算黑色像素,因为它们的值为0
而您的循环从1
开始...重写如下:
function H = histogram_binary(img)
img_vec = img(:);
H = zeros(1,256);
for i = 0:255
H(i+1) = sum(img_vec == i);
end
end
但请记住,计算二进制图像上的所有字节出现次数(只能包含0
或1
值)是有点无意义的,会使您的直方图缺乏可读性。请注意,请避免使用image
作为变量名称,因为这会覆盖an existing function。
答案 1 :(得分:0)
如上文评论中的@ beaker所述,在这种情况下,垂直直方图通常是指垂直投影。这是一种方法:
I = imread('YcP1o.png'); % Read input image
I1 = rgb2gray(I); % convert image to grayscale
I2 = im2bw(I1); % convert grayscale to binary
I3 = ~I2; % invert the binary image
I4 = sum(I3,1); % project the inverted binary image vertically
I5 = (I4>1); % ceil the vector
plot([1:1:size(I,2)],I5); ylim([0 2])
您可以进一步检查0->1
转换,使用sum(diff(I5)>0)
计算字符数,在这种情况下,13
为Observable
。