黑白图像直方图(MatLab)

时间:2016-09-29 16:15:40

标签: matlab image-processing

我正在学习图像处理课程,我们需要使用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

我知道这是一个出界的错误,但我不知道如何解决这个问题。 谢谢

1 个答案:

答案 0 :(得分:0)

有两个原因它不起作用:

  1. 你应该ceil你的门槛有一个圆数

    threshold = ceil(128/n);
    
  2. i中的值是整数,这意味着在执行floor操作之前,除法将自行舍入。因此,您需要将其转换为double

    im_level = floor( double(i(:)) / threshold);