数字图像处理:霍夫变换(Hough Transform)

直线检测

在这里插入图片描述

图像空间的直线可以在霍夫空间中表示为一个点,同样的,图像空间的点可以在霍夫空间表示为一条直线。而图像空间多个点在霍夫空间就表示为多条直线。
在这里插入图片描述
在这里插入图片描述

观察上图发现,如果在图像空间中的点共线,那么在霍夫空间中对应的直线将相交,交点即为图像空间中直线的斜率 k k k和截距 q q q
在这里插入图片描述

当在图像空间中存在多个直线时,那么在霍夫空间就会有多个交点。采用投票方法计算交点得票(处理误差可使用NMS),当得票大于给定阈值,则认为在图像空间中检测到直线。
在这里插入图片描述
在这里插入图片描述

但是使用斜距式表示直线存在缺点:当直线存在 x x x轴时,斜率 ∞ \infty
在这里插入图片描述
所以采用极坐标表示

在这里插入图片描述
其中 ρ > 0 \rho>0 ρ>0

两种方法对比:
在这里插入图片描述

以上图片来自博文:霍夫变换

圆检测

类比直线检测,直线需要2个参数表示,而圆需要3个参数,圆心 ( a , b ) (a,b) (a,b)和半径 r r r
我们先假设已经确定 r r r,那么在图像空间中圆上的点 p p p,在霍夫空间中得到以 p p p圆心,半径为 r r r的圆,那么这些圆相交次数最多的点即为圆心。
在这里插入图片描述

以上图片来视频:How Circle Hough Transform works

但是半径 r r r如果不确定,搜索半径将会增加一个指数的复杂度,应用价值不高。这种方法又被称为:标准霍夫圆变换

在OpenCV中使用的是霍夫梯度法,其核心思想是:求圆心和半径

求圆心:
图像空间中圆上的点的梯度方向(下面会解释)会相交于一点,这一点即为圆心
在这里插入图片描述
f f f的梯度为:

∇ f = [ ∂ f ∂ x , ∂ f ∂ y ] T \nabla f=\left[\frac{\partial f}{\partial x}, \frac{\partial f}{\partial y}\right]^{T} f=[xf,yf]T

求偏导使用sober算子:
在这里插入图片描述
分别计算x和y上的偏导。
和直线检测一样,梯度向量相交最多的点作为圆心:
在这里插入图片描述

求半径:在求得圆心后,计算图像空间中圆上的点到各个圆心的距离,对距离进行投票,投票最多的则为这个圆心对应的半径
在求得半径后,搜索空间降为2。

以上图片来视频:3.2 hough circle(霍夫圆变换)

PClines检测直线

论文:PClines – Line Detection Using Parallel Coordinates Brno University of Technology(CVPR 2011)

PClines中的PC表示为Parallel coordinates,Parallel coordinates是为了可视化表示高维数据,列如5维空间中的一个点 C ( C 1 , C 2 , C 3 , C 4 , C 5 ) C(C_{1},C_{2},C_{3},C_{4},C_{5}) C(C1,C2,C3,C4,C5),表示为一条折线(4(=5-1)条直线组成):
在这里插入图片描述

笛卡尔坐标系中用齐次坐标表示点 ( x , y , w ) (x,y,w) (x,y,w),以此表示无限远的点 ( 1 , 1 , 0 ) = ( ∞ , ∞ , 0 ) (1,1,0)=(\infin,\infin,0) (1,1,0)=(,,0)

若点共线,这在 p p p空间(PC空间)中直线会相交于点 ℓ ˉ \bar{\ell} ˉ表示 c c c空间(笛卡尔坐标系空间,图像空间)中直线 ℓ \ell
在这里插入图片描述

x ′ x^{\prime} x y ′ y^{\prime} y的中间距离为 d d d

这一过程和截距参数,极坐标参数的霍夫变换映射一样点到线和线到点,不过变换参数不一样:

[]表示的是点,()表示的是直线

点( c c c)->线( p p p):
S d p ( [ x , y , w ] ) = ( − x + y , − d w , d x ) \mathcal{S}_{d}^{p}([x, y, w])=(-x+y,-d w, d x) Sdp([x,y,w])=(x+y,dw,dx)

图像空间中一点(x/w, y/w,1)在ST空间表示为2点(0,x/w)和(d,y/w)。两点式带入。

线( c c c)->点( p p p):
S d l ( ( a , b , c ) ) = [ d b , − c , a + b ] \mathcal{S}_{d}^{l}((a, b, c))=[d b,-c, a+b] Sdl((a,b,c))=[db,c,a+b]

图像中的直线抽取2个点,在ST空间表示2条直线,2直线必然相交,交点即为所求。

当在 c c c空间中直线的斜率>0,那么在 p p p空间中的有限 x ′ , y ′ x^{\prime},y^{\prime} x,y区间是无法得到交点。所以使用 T T T表示:
在这里插入图片描述
综上, p p p空间由 S , T S,T ST组成。且表示的有限空间:
− d ≤ u ≤ d − max ⁡ ( W 2 , H 2 ) ≤ v ≤ max ⁡ ( W 2 , H 2 ) \begin{aligned} -d & \leq u \leq d \\ -\max \left(\frac{W}{2}, \frac{H}{2}\right) & \leq v \leq \max \left(\frac{W}{2}, \frac{H}{2}\right) \end{aligned} dmax(2W,2H)udvmax(2W,2H)
检测直线示例:
在这里插入图片描述

CHT+PClines消失点检测

论文:Real Projective Plane Mapping for Detection of Orthogonal Vanishing Points(BMVC 2013)

CHT(Cascaded Hough Transform),级联霍夫变换,顾名思义就是在进行一次霍夫变换后再进行霍夫变换。

在这里插入图片描述
借鉴CHT实现,进行两次变换,分别是是 c → S d p d → S D p D c \rightarrow^{{S}_{d}} p_d \rightarrow^{{S}_{D}} p_D cSdpdSDpD综合起来就是 c → S S d D p D c \rightarrow^{{SS}_{dD}} p_D cSSdDpD
之前提到 S S S对应的还有一个变换是 T T T,那么 S T ST ST可以有4种组合:
S S d D p ( [ x , y , w ] ) = ( S D l ∘ S d p ) ( [ x , y , w ] ) = [ − d D w , − d x , − x + y − d w ] S T d D p ( [ x , y , w ] ) = ( S D l ∘ T d p ) ( [ x , y , w ] ) = [ − d D w , − d x , − x + y + d w ] T S d D p ( [ x , y , w ] ) = ( T D l ∘ S d p ) ( [ x , y , w ] ) = [ − d D w , − d x , x + y − d w ] T T d D p ( [ x , y , w ] ) = ( T D l ∘ T d p ) ( [ x , y , w ] ) = [ − d D w , − d x , x + y + d w ] \begin{aligned} {S} {S}_{d D}^{p}([x, y, w]) &=\left({S}_{D}^{l} \circ {S}_{d}^{p}\right)([x, y, w])=[-d D w,-d x,-x+y-d w] \\ {S} {T}_{d D}^{p}([x, y, w]) &=\left({S}_{D}^{l} \circ {T}_{d}^{p}\right)([x, y, w])=[-d D w,-d x,-x+y+d w] \\ {T} {S}_{d D}^{p}([x, y, w]) &=\left({T}_{D}^{l} \circ {S}_{d}^{p}\right)([x, y, w])=[-d D w,-d x, x+y-d w] \\ {T} {T}_{d D}^{p}([x, y, w]) &=\left({T}_{D}^{l} \circ {T}_{d}^{p}\right)([x, y, w])=[-d D w,-d x, x+y+d w] \end{aligned} SSdDp([x,y,w])STdDp([x,y,w])TSdDp([x,y,w])TTdDp([x,y,w])=(SDlSdp)([x,y,w])=[dDw,dx,x+ydw]=(SDlTdp)([x,y,w])=[dDw,dx,x+y+dw]=(TDlSdp)([x,y,w])=[dDw,dx,x+ydw]=(TDlTdp)([x,y,w])=[dDw,dx,x+y+dw]
c c c空间中,对于不同象限的点对应不同 S T ST ST组合,转到 p D p_D pD空间后,可以得到有限三角形区域:
在这里插入图片描述
列如在 c c c空间第4象限的点: P = [ x , y , 1 ] , x ≥ 0 , y ≤ 0 P=[x, y, 1], x \geq 0, y \leq 0 P=[x,y,1],x0,y0,在 p D p_D pD空间表示为 S S d D p ( P ) = [ − d D , − d x , − x + y − d ] \mathcal{S S}_{d D}^{p}(P)=[-d D,-d x,-x+y-d] SSdDp(P)=[dD,dx,x+yd],又因为:
d , D > 0 , x ≥ 0 ⇒ − d D < 0 , − d x ≤ 0 x ≥ 0 , y ≤ 0 , d > 0 ⇒ − x + y − d < 0 ⇒ − d D − x + y − d > 0 ⇒ − d x − x + y − d ≥ 0 \begin{aligned} d, D>0, x \geq 0 & \Rightarrow-d D<0,-d x \leq 0 \\ x \geq 0, y \leq 0, d>0 & \Rightarrow-x+y-d<0 \\ & \Rightarrow \frac{-d D}{-x+y-d}>0 \\ & \Rightarrow \frac{-d x}{-x+y-d} \geq 0 \end{aligned} d,D>0,x0x0,y0,d>0dD<0,dx0x+yd<0x+yddD>0x+yddx0
所以在 p D p_D pD空间表示为第1象限的点,同时可以证明有边界 ℓ b = ( d , D , − d D ) \ell_{b}=(d, D,-d D) b=(d,D,dD)
( d , D , − d D ) ⋅ [ − d D − x + y − d , − d x − x + y − d , 1 ] = − d D y − x + y − d ≤ 0 (d, D,-d D) \cdot\left[\frac{-d D}{-x+y-d}, \frac{-d x}{-x+y-d}, 1\right]=\frac{-d D y}{-x+y-d} \leq 0 (d,D,dD)[x+yddD,x+yddx,1]=x+yddDy0
c c c空间的直线 ( a , b , c ) c (a, b, c)_c (a,b,c)c p D p_D pD空间表示为:
α = sgn ⁡ ( a b ) , β = sgn ⁡ ( b c ) , γ = sgn ⁡ ( a c ) ( a , b , c ) c → [ α a c + γ a , − α c c + γ a ] , [ b c + β b , 0 ] , [ 0 , b a + α b ] , [ − α a c + γ a , α c c + γ a ] \begin{array}{l} \alpha=\operatorname{sgn}(a b), \quad \beta=\operatorname{sgn}(b c), \quad \gamma=\operatorname{sgn}(a c) \\ (a, b, c)_{c} \rightarrow\left[\frac{\alpha a}{c+\gamma a}, \frac{-\alpha c}{c+\gamma a}\right],\left[\frac{b}{c+\beta b}, 0\right],\left[0, \frac{b}{a+\alpha b}\right],\left[\frac{-\alpha a}{c+\gamma a}, \frac{\alpha c}{c+\gamma a}\right] \end{array} α=sgn(ab),β=sgn(bc),γ=sgn(ac)(a,b,c)c[c+γaαa,c+γaαc],[c+βbb,0],[0,a+αbb],[c+γaαa,c+γaαc]

检测消失点示例:
在这里插入图片描述
因此该方法相比以往先检测直线再基于检测到直线检测消失点的2步方法少了对直线进行处理的步骤

注意:对于在2D图像上检测到消失点还需要在3D空间中进行正交处理。

  • 3
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值