我正在尝试用我的方法重新创建MATLAB的hough函数。我的代码如下
function [H,T,R] = my_hough(x,dr,dtheta)
rows = size(x,1);
cols = size(x,2);
D = sqrt((rows - 1)^2 + (cols - 1)^2);
Nr = 2*(ceil(D/dr)) + 1;
diagonal = dr*ceil(D/dr);
R = -diagonal:dr:diagonal;
T = -90:dtheta:90-dtheta;
Ntheta = length(T);
H = zeros(Nr,Ntheta);
for i = 1:Ntheta
for n1 = 1:rows
for n2 = 1:cols
if x(n1,n2)==1
r = n2*cos(T(i)*pi/180) + n1*sin(T(i)*pi/180);
[~,j] = min(abs(R-ones(1,Nr)*r));
H(j,i) = H(j,i) + 1;
end
end
end
end
end
其中dr
和dtheta
是距离和角度分辨率。打印我的Hough表和MATLAB之间的区别有很多零,但也有一些非零元素。知道为什么会这样吗?
答案 0 :(得分:2)
嗯,实际上这是一个非常愚蠢的错误......
r = n2*cos(T(i)*pi/180) + n1*sin(T(i)*pi/180);
必须是
r = (n2-1)*cos(T(i)*pi/180) + (n1-1)*sin(T(i)*pi/180);
感谢这个奇怪的MATLAB索引。