我是CV和IP领域的新手。我正在编写用于查找行的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
我找不到错误。请帮助我。谢谢。
答案 0 :(得分:2)
您的代码有几个问题。主要问题在这里:
ntheta = length(theta);
% ...
for i = (1 : size(allrows))
% ...
for th = (1 : 180)
d = floor(x*cos(th) - y*sin(th));
% ...
th
似乎是以度为单位的角度。 cos(th)
是没有意义的。而是使用cosd
和sind
。
另一个问题是th
从1迭代到180,但是不能保证ntheta
是180。因此,请如下循环:
for i = 1 : size(allrows)
% ...
for j = 1 : numel(theta)
th = theta(j);
% ...
并使用th
作为角度,并使用j
作为H
的索引。
最后,在给定图像和预期输出的情况下,您应该首先应用一些边缘检测(例如,Canny)。也许您已经这样做了?