Hough 变换原理和应用
前言: 详细介绍了 Hough 变换的基本思想、基本原理和应用等。其中大多都是自己的理解,难免有偏差,仅供参考。
文章目录
3. Hough 圆形检测
3.1 传统圆形检测
跟直线检测同样的步骤。先来个简单的问题。
3.1.1 问题
如何基于上述 Hough 变换特点。检测四个点,即 P 1 ( 0 , 2 ) , P 2 ( 1 , 1 ) , P 3 ( 1 , 3 ) , P 4 ( 2 , 2 ) P_1(0,2), P_2(1,1), P_3(1,3), P_4(2,2) P1(0,2),P2(1,1),P3(1,3),P4(2,2) 在同一个圆上。
3.1.2 思路
前面1.2.3已经提及到,圆一般方程为
( x − a ) 2 + ( y − b ) 2 = r 2 (x-a)^2+(y-b)^2 = r^2 (x−a)2+(y−b)2=r2
选择 a,b,r 作为参数,变换到参数空间后,即对应一个圆锥,圆锥方程为
( a − x 0 ) 2 + ( b − y 0 ) 2 = r 2 (a-x_0)^2+(b-y_0)^2 = r^2 (a−x0)2+(b−y0)2=r2
即 过原空间中一点 ( x 0 , y 0 ) (x_0, y_0) (x0,y0)的所有圆 对应于 参数空间中一个圆锥 。
有意思之处:
空间中两点,对应参数空间两个圆锥,两圆锥相交是条曲线,即意味着:原空间里两点可以确定无数圆。符合实际。
而且参数空间里这条相交的线有个特点,其在xoy平面投影是一条直线。对应到原空间的意思就是:经过这两点所有圆的圆心在一条线上。符合实际。空间中三点,对应参数空间三个圆锥,三圆锥相交得到一点,该点的 ( a , b , r ) (a,b,r) (a,b,r) 就对应着:原空间里有一个圆心为 ( a , b ) (a,b) (a,b) ,半径为 r 的圆,经过这三点。
如果空间中三点共线呢?对应到参数空间圆锥什么情况?自行考虑。
3.1.3 编程
虽然思路很清晰,即:编程表示出圆锥,然后求圆锥交线(点),计算亮度。
但编程实践存在的问题是:
- r r r 虽然有点范围 ( r ≥ 0 ) (r\ge 0) (r≥0),之所以说”有点“,在于 r 可以取 + ∞ +\infty +∞ 。另外 a , b a, b a,b 可没边啊。
- 即便表示出了圆锥,那每次亮度计算都要遍历下三位空间像素点,计算量岂不是爆炸。
暂时撂下这些问题,针对现有问题,先实现之。针对上面两点:
-
本例问题中,只有四点,计算量尚可。
-
假如这四点是在一张 W × H W\times H W×