在以前做opencv的项目的时候, 经常用到霍夫变换, 霍夫变换是直线检测的一个很有用的工具,当然,也可以用来检测其他形状.
之前不明白原理, 后面在网上找了很多资料, 根据自己的理解, 发现霍夫变换确实是一个很好的想法.
下面进入正题:
我们知道一个直线可以表示为 y=ax+b, 我们知道, 只要 a和b想等,那么就知道这是一条直线.
通过简单的变换,我们可以将这个函数表示为 b=y-ax. 就是关于 a和b的函数. 这种将数据问题变换为参数问题的变换,就是霍夫变换.
不管图像上的点是什么,只要两个点的计算出上面的a和b值一样,那么就肯定是同一条直线.
引用自 霍夫变换Hough.
如果还不懂,可以留言讨论.
另外, 根据这个思路,其实很多图形检测都可以完成, 比方说 圆.
我们知道 圆的方程为 r^2 = (x-a)^2+ (y-b)^2.
我们通过霍夫变换,可以得到 r, a, b 三元函数. 还是一个道理,只要这三个参数解出来是相同的,那么就肯定是一个圆.
其他的形状类推, 所以霍夫变换是一个比较好的思路, 希望大家能够活学活用.
参考: