原理详解
一个总结帖
上面的链接写的很清楚了
但是不能让我看起来太摸鱼了,于是我说一下自己的想法再添加一点细节和理解
霍夫变化实际上就是把一张图片上所有的点都连接起来,然后根据阈值来判断是否这一条线上的点超过了阈值,如果超过了那么这条线就放入结果当中,如果没超过则跳过
一条二维平面上的线是通过斜率和截距来确定的,y=kx+b,如上面的链接所说,在霍夫空间里面,一个点等效与笛卡尔坐标下的一条线,笛卡尔坐标下的一个点等效于霍夫空间的一条线
但是为了表示当k不存在的时候,霍夫空间依旧能有对应的点,所以用极坐标来表示霍夫空间,这样无论任何的kb都会有对应的曲线表示
以上便是原理的通俗说法
放几张图来展示一下
阈值:70
阈值:90
阈值:110
阈值:130
可以看出,阈值越大,线是越少的,这是符合我们所讲的原理的
同时,线越少,速度是越快的,效率越高
还需要注意的是,这个阈值是相对的,不是绝对的,因为图片的像素不同,所以阈值的确定还要根据像素来
函数使用场景主要就是来给图片画线,比如倾斜的文本矫正,就需要先画线,再根据大多数线的角度来矫正
一些建筑的图片需要其透视轮廓的时候,直接取轮廓可能是歪斜的线,用霍夫变换可以得到更加完美的线
但是!问题也是很明显的!我并不能用它提取边框。无论是二值化还是canny边缘检测,我是无法剔除中间的内容的(普适化,不针对特定图片),这样就导致了上图的情况,只有水平的线,没有垂直的线,当阈值足够低的时候或许会出现垂直的线,但那个时候我才应该满屏幕都是线了【无奈】
所以这个函数总结一下就是描绘了一张图上点的趋势