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

其中 drdtheta 是距离和角度分辨率。打印我的 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 索引。