霍夫变换

mac2024-05-29  42

霍夫变换

原理详解

一个总结帖

上面的链接写的很清楚了

但是不能让我看起来太摸鱼了,于是我说一下自己的想法再添加一点细节和理解

霍夫变化实际上就是把一张图片上所有的点都连接起来,然后根据阈值来判断是否这一条线上的点超过了阈值,如果超过了那么这条线就放入结果当中,如果没超过则跳过

一条二维平面上的线是通过斜率和截距来确定的,y=kx+b,如上面的链接所说,在霍夫空间里面,一个点等效与笛卡尔坐标下的一条线,笛卡尔坐标下的一个点等效于霍夫空间的一条线

但是为了表示当k不存在的时候,霍夫空间依旧能有对应的点,所以用极坐标来表示霍夫空间,这样无论任何的kb都会有对应的曲线表示

以上便是原理的通俗说法

放几张图来展示一下

阈值:70

阈值:90

阈值:110

阈值:130

可以看出,阈值越大,线是越少的,这是符合我们所讲的原理的

同时,线越少,速度是越快的,效率越高

还需要注意的是,这个阈值是相对的,不是绝对的,因为图片的像素不同,所以阈值的确定还要根据像素来

函数使用场景主要就是来给图片画线,比如倾斜的文本矫正,就需要先画线,再根据大多数线的角度来矫正

一些建筑的图片需要其透视轮廓的时候,直接取轮廓可能是歪斜的线,用霍夫变换可以得到更加完美的线

但是!问题也是很明显的!我并不能用它提取边框。无论是二值化还是canny边缘检测,我是无法剔除中间的内容的(普适化,不针对特定图片),这样就导致了上图的情况,只有水平的线,没有垂直的线,当阈值足够低的时候或许会出现垂直的线,但那个时候我才应该满屏幕都是线了【无奈】

所以这个函数总结一下就是描绘了一张图上点的趋势

最新回复(0)