JJJYmmm Blog - Hough变换
type: channel
link: http://jjjymmm.cn/index.php/tag/Hough%E5%8F%98%E6%8D%A2/
items: 计算机视觉|Hough变换

计算机视觉|Hough变换
type: item
date: 2023-07-05T02:06:00+00:00
description: 摘要Hough变换相比于其他的拟合方法，它可以检测多个图形(当然RANSAC采用TOPK也可以实现多图形检测)。具体来说，Hough变换是将图像空间的像素点向参数空间投影并投票，通过投票最大值得到最优参数。直线拟合二维空间的直线有两个参数$m,b$。那么Hough变换投影的参数空间也是二维。对于图像中的一条线，对应参数空间中的一个点，该点的票数加一。对于图像中的一个点，对应参数空间中的一条线，线上的票数加一。那么对于图像中的多个点，如果这些点有较好的线性关系，那么参数空间投票时，会有一个点票数最高，而这个点则是拟合直线的参数。上述参数空间有个问题，就是$m,b$的范围无法确定，如果直线垂直x轴，m会趋于无限大，参数空间也趋于无限大。因此需要换一种参数表示，这里使用极坐标表示直线。更换坐标系后，投票策略转换为下图。对于图像上的每个点(这里说图像一般是指边缘图像，可以是canny算法得到的结果)，根据已知$x,y$，遍历$\theta$值，得到对应$\rho$,参数空间中的网格加一票。最后选择票数最高的作为拟合结果。直线拟合效果如下，右侧为参数空间，亮度代表票数。方形和圆形拟合结果如下。噪声影响如果往数据点中掺入随机高斯噪声，那么参数空间中的亮点会分散。单个参数网格对应的票数会减小。关于处理噪声点，有以下几种方法：选择适合的网格大小。如果网格太大的话，一个网格代表多条直线，拟合结果不准确；网格太小，每个网格的票数较少，如果无法达到阈值，则无法检测使用软投票。给网格投票时，依据高斯分布给附近的网格也投票。不适用无关的特征。通过canny算法预先处理图像边缘，可以得到图像每个边缘点的梯度大小和方向，该点的边缘线与梯度方向垂直，那么给参数空间投票时，只需要给固定的$\theta$方向投票即可！随机点影响对于随机的数据点，参数空间也可能出现票数较高的网格，造成错误拟合。参数搜索优化刚刚提到：使用canny算法预先处理图像边缘，可以得到图像每个边缘点的梯度大小和方向，该点的边缘线与梯度方向垂直，那么给参数空间投票时，只需要给固定的$\theta$方向投票即可。投票算法如下图。这里的$\theta$正好和梯度的方向$\theta_2$一致，都与边缘线垂直。拟合圆形圆形有三个参数，$x,y,r$，所以参数空间是三维的。对于一个数据点，确定该点梯度方向后，圆心可能出现在两个地方，然后再枚举r，并在参数空间里的小方块里投票。这里r是有界的，最大不超过图像的大小。如果不使用梯度方向进行优化，那么圆心可能出现在数据点为圆心的一个圆上，参数空间投票可视化也就是一个圆锥。计算量会很大。这种方法对于尺度放缩和嘈杂环境是鲁棒的。泛化使用Hough变换Hough变换还可以用来识别物体中心点。给定每种元素的分布和图形中心点，可以画出每种元素的矢量图。测试时将图中的每个元素都套用矢量图，根据投票最多的点可以确定图形中心点。总结