Hough变换检测直线

1、基本原理

Hough变换是图像处理中从图像中识别几何形状的基本方法之一,即它可以检测已知形状的目标,而且受噪声和曲线间断的影响小。

Hough变换的基本思想是利用点-线的对偶性。如下图1所示:


从图1中可看出,x-y坐标和k-b坐标有点----线的对偶性。x-y坐标中的点P1、P2对应于k-b坐标中的L1、L2;而k-b坐标中的点P0对应于x-y坐标中的线L0 。

由于x-y坐标中的垂直线的k值为无穷大,给计算带来不便,故使用点----正弦曲线对偶变换解决这一问题。直角坐标X-Y中的一点(x,y),经过点----正弦曲线对偶变换:

ρ=x*cosθ+y*sinθ(ρ是该直线到原点的距离,θ是该直线的垂线与X轴的夹角)

在极坐标ρ-θ中变为一条正弦曲线,θ取(0-180°)。可以证明,直角坐标X-Y中直线上的点经过Hough变换后,它们的正弦曲线在极坐标ρ-θ有一个公共交点,如图2所示。


也就是说,极坐标ρ-θ上的一点(a,p),对应于直角坐标X-Y中的一条直线,而且它们是一一对应的。

为了检测出直角坐标X-Y中由点所构成的直线,可以将极坐标ρ-θ量化成许多小格。根据直角坐标中每个点的坐标(x,y),在θ = 0-180°内以小格的步长计算各个ρ值,所得值落在某个小格内,便使该小格的累加记数器加1。当直角坐标中全部的点都变换后,对小格进行检验,计数值最大的小格,其(θ,ρ)值对应于直角坐标中所求直线。

在实际的直线检测情况中,如果超过一定数目的点拥有相同的(ρ,θ)坐标,那么就可以判定此处有一条直线。ρ-θ 坐标系图中,明显的交汇点就标示一条检测出的直线;


2、Hough变换算法实现

由于点斜式不能表示垂直于横轴的直线,我们改用极坐标形式:   ρ=x*cosθ+y*sinθ;

参数平面为ρ-θ,对应不是直线而是正弦曲线;

使用交点累加器,或交点统计直方图,找出相交线段最多的参数空间的点;然后找出该点对应的xy平面的直线线段;

由此可见,Hough变换的基本策略是:由图像空间中的边缘数据点去计算参数空间中的参数点的可能轨迹,并在一个累加器中给计算出的参考点计数,最后选出峰值。


3、matlab程序

clc,clear all,close all;
f=imread('d:\huochai.jpg');
threshold =graythresh(f);
fBin=im2bw(f,threshold);%二值化
fCanny=edge(fBin,'canny');%canny边缘检测
[H,theta,rho]=hough(fCanny);
figure,imshow(H,[],'XData',theta,'YData',rho,'InitialMagnification','fit');%以适当比率显示H
xlabel('\theta'),ylabel('\rho');%给xy轴标签
axis on, axis normal,hold on;%显示坐标轴,使图片以适当比率显示




图3:火柴原始图片


图4:映射到ρ-θ坐标图像




 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值