霍夫变换(Hough)
Hough Transform
主要内容
▪ Finding lines in an image(图像直线检测)
➢ Using orthogonal coordinate(使用直角坐 标系)
➢ Using Polar Coordinates(使用极坐标)
▪ 给定一幅图像(一般为二值图像)中的点 集合,如何检测直线?
总结
▪ 根据直角坐标系和极坐标系变换域之间的 关系,总结霍夫变换具有如下主要性质:
➢ 直角坐标系中的一点对应于极坐标中的一条正 弦曲线
➢ 变换域极坐标系中一点对应于直角坐标系中的 一条直线
➢ 直角坐标系一条直线上的N个点对应于极坐标 系中共点的N条曲线。
▪ 作业: 1 Hough变换如何检测圆? 2 实现Hough直线检测。
Using orthogonal coordinate
➢ 图像空间中的一个点(x0, y0)能映射为Hough空 间中的什么?
Using orthogonal coordinate
y
b
y0
x0
x
image space
m
Hough space
b = -x0m + y0,这是Hough空间中的一条线
m
•B(1,1)
Hough Space
y
(3,2) (1,1) (2,1) (4,1)
(1,0) Image Space
x
▪ 问题:Hough变换的 这种实现方式 (y=mx+b)不能表示 垂直线,因为垂直线 的斜率为无穷大。
m b?
能否用别的直线 的参数化方式呢?
哈!有了! 极坐标方式
Using Polar Coordinates
Using orthogonal coordinate
A(0,1)即m=0,
b=1即图像空间中b
斜率为0,截距为 1的直线
▪ 在Hough空间中找某些点,通 过这些点的线数最多。如左图 所示的A点和B点,分别有三条
•A(0,1)
线通过这两点。
B(1,-1)即m=1, b=-1即图像空间 中斜率为1,截距 为-1的直线
y
( x1, y1)
r
(x2, y2)
r r •
rx1cosy1sin
x
rx2cosy2sin
▪ 这样经过Hough变换,图像空间中的每个点 (x,y)就被映
射为一个(r,θ)空间中的正弦曲线。
▪ 而图像空间中共线的点所对应的(r,θ)空间中正弦曲线相 交于一点(r’,θ’) 。
问题转换
▪ 把在图像空间中检测直线的问题转化为在
yx qpxy rrcsoins(2)
根 据 (1)(2)可 得 :
rxco sysin
r x1cos y1sin
r x2 cos y2 sin
Using Polar Coordinates
对于垂线,用极坐标表示有 xrcos0rsin0 xr
xr
r
Using Polar Coordinates
▪ 最大次数3出现 ( r ,) ( 2 ,0 ) 和 (r ,) ( 3 ,9 0 )
▪ 则相对应的图像空间中的线分别为:
2 x c o s0 y s in 0即 x 2
和
3 x c o s 9 0 y s in 9 0即 y 3
y
4
3
2
1
0 01 2 3 4
x
霍夫变换检测到的直线
极坐标参数空间中找通过点(r,θ)的最多正
弦曲线数的问题。
如何检测参数空 间中这样的点?
例子
y
4
3
2
1
0 01 2 3 4
x
Image Space
步骤:
1.离散化θ。
θ=-45°,0 ° ,45 ° ,90 °
2.按点的坐标(x,y)和每个
角度θ求r
rxco sysin
▪ 3 统计( r , )出现的次数。
▪ 一种解决方法:任选一对儿点,决定一条 线,然后测试所有其他点是否接近这条线, 从而得出接近这条特殊线的所有点的子集。 该方法比较复杂。
▪ 霍夫变换用来检测图像中的直线。
y
x
Using orthogonal coordinate
y
b
b0
x
image space
m0
m
Hough space
图像空间中的一条线对应Hough空间中的一个点。
Using orthogonal coordinate
▪ 在hough空间中,过点(x0,y0)和点(x1,y1)的直 线如何表示?
Using orthogonal coordinate
(x1, y1) (x0, y0)
•
b = –x1m+ y1
image space
Hough space
Hough空间中两条线的交点用来表示过点(x0,y0)和点 (x1,y1)的直线
rxco sysin
( x1, y1) ( p,q)
r
(x2, y2)
ห้องสมุดไป่ตู้
(p ,q ) (rc o s,rsin ) 垂 线 的 斜 率 为 t a n s i n /c o s
原 直 线 的 斜 率 为 - t a 1 n s c in o s (1 )
设直线上的任意点为( x , y ), 则斜率为:
谢谢大家!
Using orthogonal coordinate
y
(3,2) (1,1) (2,1) (4,1)
(1,0) Image Space
x
y i m i b x b x im y i
(1,0) bm (1 ,1 ) b m 1
(2,1 ) b 2m 1 (4,1 ) b 4m 1
(3,2) b 3m 2