如何找到图像中线的累加器矩阵?

How to find accumulator matrix for line in an image?

我是CV和IP领域的新手。我正在编写用于查找 line.I 的 HoughTransform 算法 我没有发现这段代码有什么问题,我试图在其中找到累加器数组

numRowsInBW = size(BW,1);
numColsInBW = size(BW,2);

%length of the diagonal of image
D = sqrt((numRowsInBW - 1)^2 + (numColsInBW - 1)^2);
%number of rows in the accumulator array
nrho = 2*(ceil(D/rhoStep)) + 1;
%number of cols in the accumulator array
ntheta = length(theta);

H = zeros(nrho,ntheta);

%this means the particular pixle is white 
%i.e the edge pixle
[allrows allcols] = find(BW == 1);

for i = (1 : size(allrows))
    y = allrows(i);
    x = allcols(i);
    for th = (1 : 180)
        d = floor(x*cos(th) - y*sin(th));
        H(d+floor(nrho/2),th) += 1;
    end
end

我正在将其应用于简单图像 我得到这个结果

但这是意料之中的事

我无法提前找到 mistake.Please 帮助 me.Thanks。

您的代码存在几个问题。主要问题在这里:

ntheta = length(theta);
% ...
for i = (1 : size(allrows))
    % ...
    for th = (1 : 180)
        d = floor(x*cos(th) - y*sin(th));
        % ...

th 好像是度数的角度。 cos(th) 没有意义。相反,使用 cosdsind.

另一个问题是th从1迭代到180,但不能保证ntheta是180。所以,循环如下:

for i = 1 : size(allrows)
    % ...
    for j = 1 : numel(theta)
        th = theta(j);
        % ...

并用th作为角度,j作为索引进入H.

最后,根据您的图像和预期输出,您应该首先应用一些边缘检测(例如 Canny)。也许你已经这样做了?