Hough变换-直线检测

原理:

举一个例子,有一条直线:y=bx+k。以x与y为坐标轴,那么给定一个b与一个k,就可以确定一条直线。同理如果以b与k为轴,那么给定一个x和一个y也可以确定一个直线。即xoy坐标系下的一个点在bok坐标系下对应一个直线。而bok坐标系下的一个点在xoy坐标系下对应一个直线。

怎么检测一个图片中的直线呢?首先要求它的边缘,得到一个二值化的边缘图片。我们已经知道xoy坐标系下的一个点对应bok坐标系下的一个直线,那么如果xoy坐标系下有一组点,它们构成了一条直线的话y=b1*x+k1,那么这一组点在bok坐标系下对应的直线都会过一个点(b1,k1)。也就是说,如果我们对这个边缘图片进行了这样的一种变换之后,在bok坐标系中,如果有几条线都交于了一个点,那么说明这个点就对应了xoy坐标系下的一个直线。

好的,下面换一种方程进行描述:x*cosθ+y*sinθ=r。这是直线的参数方程,一个给定的theta跟r可以指定XOY坐标系下的一条直线。把x,y当成XOY坐标轴下的,这个坐标称为坐标1,把θ,r当成另一个坐标轴下的,这个坐标称为坐标2,与上面的情况对应起来,坐标1中的一个点,对应坐标2中的一条线。坐标2中的一个点,对应坐标1中的一条线。

下面给出一段代码,用于检测一个图片中的直线

pic=imread('e:\test-pic\test1.jpg');

pic=rgb2gray(pic);
pic01=edge(pic,'Canny');


[H,theta,rho]=hough(pic01);
peak=houghpeaks(H,8);
line=houghlines(pic01,theta,rho,peak);


figure(1);
imshow(pic);
title('原图');
figure(2);
imshow(pic);


for i=1:length(line)
    hold on;
    xy=[line(i).point1;line(i).point2];
    plot(xy(:,1),xy(:,2),'LineWidth',4);
end

原图为:


检测直线如下图所示:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大指挥官

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值