【问题标题】:Implementing Hough Transform for lines without default hough function-Matlab对没有默认霍夫函数的行实现霍夫变换-Matlab
【发布时间】:2015-02-05 02:18:59
【问题描述】:

我目前在执行霍夫变换时遇到了一些问题。现在我主要专注于获取 hough 累加器、rhos 和 Thetas。我觉得这是最难的部分,因为我觉得其他一切都有效。我也意识到我可以只使用该功能,但这不是我想要做的。我觉得我漏掉了一些小细节,这些小细节会让一切变得不同。

第一步是使用获取边缘图像

img_edges=edge(img,'canny')

之后是我提到的其他内容的部分

function [H, theta, rho] = hough_lines_acc(BW, varargin)

p = inputParser();
addParameter(p, 'RhoResolution', 1);
addParameter(p, 'Theta', linspace(-90, 90, 180));
parse(p, varargin{:});
rhoStep = p.Results.RhoResolution;
D = sqrt((255 - 1)^2 + (255 - 1)^2);
nrho = round(2*(ceil(D/rhoStep)) + 1);
rho=linspace(0,nrho,nrho+1);
theta=p.Results.Theta;   
ntheta = length(theta);
%initialize H to all zeros
H=zeros(nrho+1,ntheta);
[y,x]=size(BW);

for u= 1:y
    for v= 1:x
        if BW(u,v)==1
            for i=1:ntheta
                the=theta(i);
                rhov=abs(ceil(v*cosd(the)+u*sind(the)));
                H(rhov+1,i)=H(rhov+1,i)+1;
            end
        end
    end
end
end

我只需要一些指针,这样我就可以运行它。我实际上认为我已经完成了其余的霍夫变换。

【问题讨论】:

  • 您到底遇到了什么问题?对我来说,您的实现看起来不错。看起来您正在正确地累积 rhotheta
  • 我的目标是模拟霍夫变换的每一步。当我运行它时,我得到了一个实心数字,它没有突出任何实际点。
  • 例如,当我在图像上拍摄它,然后通过真正的霍夫函数运行我正在做的其余事情时,霍夫线部分什么也不返回。然而,从 matlab 中的默认 hough 函数中获得 hough 累加器的完全相同的代码将遵循整个过程完成并且它会正确地完成。

标签: matlab


【解决方案1】:

总的来说,似乎还有其他一些问题正在发生。我确实更改了 rho 的范围,以便它可以包括负数和正数,结果很好。我实际上认为我的问题确实存在于其他地方。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多