matlab——霍夫直线变换误差

图像处理中,常常遇到需要对图像中的特定形状进行识别的情景,如线条、圆弧等,如何有效地将其识别出来,业界常用算法是霍夫变换,霍夫变换依赖于二值化边缘图像提供的坐标。
直线在二值图像中可由两个变量显示,在笛卡尔坐标系,由斜率a和截距b进行表示;在极坐标系中,可由极径r和极角θ表示。由于直线在垂直状态时,斜率无穷大,无法表示,所以转换到极坐标更方便运算。因此,取直线方程的极坐标表达式为:

在这里插入图片描述
化简得:
在这里插入图片描述
在matlab中,使用hough函数来获得标准霍夫变换结果,代码如下:

%图像e
e=zeros(600,600);
for i=1:499
    e(i,500-i)=1;
end
e=logical(e);

%函数变换
startTheta=-90;
endTheta=89.5;
step=0.01;
[H,T,R] = hough(e,'RhoResolution',1,'Theta',startTheta:step:endTheta);

%热图显示
imshow(mat2gray(H),'XData',T,'YData',R,...
      'InitialMagnification','fit');
title('Hough transform of gantrycrane.png');
xlabel('\theta'), ylabel('\rho');
axis on, axis normal, hold on;
colormap(hot);

%计算直线a,b
ma=max(max(H));
[rows,cols]=find(H==ma);
row=mean(rows);col=mean(cols);
theta=(col-1)*step+startTheta;
r=(row-1)+R(1);
a=-cot(theta/180*pi);
b=r/sin(theta/180*pi);

图像e是一个y=-x+500的直线,霍夫变换结果为y=-x+497.8,误差较大。
让人迷惑的是,霍夫空间不应该有负r存在,否则都进入复数域了,所以里面的门门道道还不是很清楚。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值