我正在学习图像处理课程,我们需要使用matlab。作为一项任务,我们需要创建一个计算灰度图像直方图的函数。我的代码能够处理256个bin,但是当我尝试使用128 bin时遇到此错误:
Error using accumarray, First input SUBS and third input SZ must satisfy ALL(MAX(SUBS)<=SZ).
我的代码如下:
function hist = imgrayhist(imggray,n)
%read the image
i = imread(imggray);
%calculate bin threshold
threshold = 256/n;
%Calculate which bin each pixel belongs to
im_level = floor( i(:) / threshold);
%tranform the matrix to a vector
j = im_level(:);
hist = accumarray(j+1,1,[n 1]);
end
我知道这是一个出界的错误,但我不知道如何解决这个问题。 谢谢
答案 0 :(得分:0)
有两个原因它不起作用:
你应该ceil
你的门槛有一个圆数
threshold = ceil(128/n);
i
中的值是整数,这意味着在执行floor
操作之前,除法将自行舍入。因此,您需要将其转换为double
:
im_level = floor( double(i(:)) / threshold);