MATLAB hough 和我的实现之间的区别
Difference between MATLAB hough and my implementation
我正在尝试用我的函数重新创建 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 table 和 MATLAB 之间的差异有很多零,但也有一些非零元素。知道为什么会这样吗?
嗯,实际上这是一个非常愚蠢的错误...
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 索引。
我正在尝试用我的函数重新创建 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 table 和 MATLAB 之间的差异有很多零,但也有一些非零元素。知道为什么会这样吗?
嗯,实际上这是一个非常愚蠢的错误...
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 索引。