计算机视觉|Hough变换

计算机视觉 · 2023-07-05 · 203 人浏览
计算机视觉|Hough变换

摘要

Hough变换相比于其他的拟合方法,它可以检测多个图形(当然RANSAC采用TOPK也可以实现多图形检测)。具体来说,Hough变换是将图像空间的像素点向参数空间投影并投票,通过投票最大值得到最优参数。

image-20230705093157436

直线拟合

二维空间的直线有两个参数$m,b$。那么Hough变换投影的参数空间也是二维。

对于图像中的一条线,对应参数空间中的一个点,该点的票数加一。

image-20230705093300406

对于图像中的一个点,对应参数空间中的一条线,线上的票数加一。

image-20230705093323088

那么对于图像中的多个点,如果这些点有较好的线性关系,那么参数空间投票时,会有一个点票数最高,而这个点则是拟合直线的参数。

image-20230705093727848

上述参数空间有个问题,就是$m,b$的范围无法确定,如果直线垂直x轴,m会趋于无限大,参数空间也趋于无限大。因此需要换一种参数表示,这里使用极坐标表示直线

image-20230705093842583

更换坐标系后,投票策略转换为下图。对于图像上的每个点(这里说图像一般是指边缘图像,可以是canny算法得到的结果),根据已知$x,y$,遍历$\theta$值,得到对应$\rho$,参数空间中的网格加一票。最后选择票数最高的作为拟合结果。

image-20230705093946532

直线拟合效果如下,右侧为参数空间,亮度代表票数。

image-20230705094356031

方形和圆形拟合结果如下。

image-20230705094408739

噪声影响

如果往数据点中掺入随机高斯噪声,那么参数空间中的亮点会分散。单个参数网格对应的票数会减小。

image-20230705094445075

关于处理噪声点,有以下几种方法:

  • 选择适合的网格大小。如果网格太大的话,一个网格代表多条直线,拟合结果不准确;网格太小,每个网格的票数较少,如果无法达到阈值,则无法检测
  • 使用软投票。给网格投票时,依据高斯分布给附近的网格也投票。
  • 不适用无关的特征。通过canny算法预先处理图像边缘,可以得到图像每个边缘点的梯度大小和方向,该点的边缘线与梯度方向垂直,那么给参数空间投票时,只需要给固定的$\theta$方向投票即可!

随机点影响

对于随机的数据点,参数空间也可能出现票数较高的网格,造成错误拟合。

image-20230705094555593

参数搜索优化

刚刚提到:使用canny算法预先处理图像边缘,可以得到图像每个边缘点的梯度大小和方向,该点的边缘线与梯度方向垂直,那么给参数空间投票时,只需要给固定的$\theta$方向投票即可。投票算法如下图。

image-20230705095130426

这里的$\theta$正好和梯度的方向$\theta_2$一致,都与边缘线垂直。

image-20230705095212904

拟合圆形

圆形有三个参数,$x,y,r$,所以参数空间是三维的。对于一个数据点,确定该点梯度方向后,圆心可能出现在两个地方,然后再枚举r,并在参数空间里的小方块里投票。这里r是有界的,最大不超过图像的大小。

如果不使用梯度方向进行优化,那么圆心可能出现在数据点为圆心的一个圆上,参数空间投票可视化也就是一个圆锥。计算量会很大。

image-20230705095243042

这种方法对于尺度放缩和嘈杂环境是鲁棒的

image-20230705095651588

泛化使用Hough变换

Hough变换还可以用来识别物体中心点。给定每种元素的分布和图形中心点,可以画出每种元素的矢量图。

image-20230705095733905

测试时将图中的每个元素都套用矢量图,根据投票最多的点可以确定图形中心点。

image-20230705095909069

image-20230705095928238

总结

image-20230705100514126

计算机视觉 Hough变换
Theme Jasmine by Kent Liao