指针式仪表自动读数与识别(三):圆形表盘定位

老吴2019-03-26 09:19图像2225浏览


版权声明:本篇文章为原创文章,转载请注明出处。https://yao2san.com/article/2015

Hough圆检测及其常用优化

针对圆形仪表来说,表盘定位常用的方法是Hough圆检测。

Hough圆检测原理如下:

引用自百度百科:

通过在参数空间里进行简单的累加统计,然后在Hough参数空间寻找累加器峰值的方法检测圆或直线。Hough变换的实质是将图像空间内具有一定关系的像元进行聚类,寻找能把这些像元用某一解析形式联系起来的参数空间累积对应点。

在参数空间不超过二维的情况下,这种变换有着理想的效果。事实上,Hough圆检测所对应的参数空间是三维的。

圆的方程如下:

由于需要确定圆心(a,b)和半径r才能唯一确定一个圆,所以Hough圆检测对应的参数空间是三维的。这种Hough圆检测我们称为传统Hough圆检测,其效率很低很低,检测一张500×500大小的图片,需要好几分钟,完全不能直接用于实际应用中。但是我们有必要了解他的思想和步骤,然后去改进它。

传统Hough圆检测的步骤如下:

1.遍历图像上非零像素点,然后以此点为圆心,尝试对半径进行缩放操作;

2.将每一个圆心坐标和半径映射到参数空间(a-b-r空间中);

3.在参数空间a-b-r中,一个圆将被映射为一个点,这些点将形成一个圆锥曲面;

4.这些圆锥曲面将会有很多个交点,分别对这些交点进行投票(“票”即为经过该交点的圆锥曲面);

5.根据票数对这些交点进行排序,的票最高者即为最可能圆,次之。

在OpenCV中对传统Hough进行了改进,速度至少提升几个数量级,它采用的是基于梯度的Hough圆检测。其基本思想如下:

1.计算每个非零像素点的各个方向的梯度向量

2.若某些像素点在同一个圆上,则这些点的梯度向量最终相交于一点

3.对这些梯度向量的交点进行投票,选出票数最高的点作为圆心

4.确定了圆心后,对半径进行缩放,当半径缩放到某一个值时,有足够多的点在该圆上,则可以确定当前圆就为所寻找的圆

基于梯度的Hough圆检测首先计算像素点的梯度,然后进行缩放半径进行找圆,这样就把三维的参数空间转化为二维(计算圆心和半径),效率得到了很大的提升。

另一种效率较高的圆检测算法为RHT(随机Hough变换)圆检测,它利用三点确定圆的方法,从图像上随机选取三个点,然后对这三点确定的圆进行投票选举,具体过程可以参见论文:基于随机Hough变换的快速圆检测方法

下图是使用Hough圆检测定位到的圆形表盘:

随机采样圆检测

随机采样圆检测(Random Sampling Circle Detection,RSCD)是老吴我新提出的一种针对指针式仪表表盘检测的一种方法,目的是快速定位图像中的一个最优圆(Optimal Circle)。其原理是:从图像的轮廓(或边缘)信息中随机选取三个点,根据三点确定一个圆,寻找所有可能圆O_k。与Hough圆检测不同的是,本方法并没有使用投票计数法来定位圆心,而是通过计算一定区域内的可能圆圆心与区域中心的标准差来确定一个最大圆心密度区域,将该区域的中心作为圆的圆心,同样的,对于半径的计算是采用所有可能圆的半径的平均值作为最终圆的半径。这样可以在保证准确度的情况下,极大的减少了计算量。

下图是RSCD检测圆的过程:

RSCD相比于霍夫圆检测有以下优点:

1.计算量小,效率高。
RSCD通过随机选取轮廓上的三个点作为一个可能圆,同时采用最优密集区域的可能圆的半径作为最优圆的半径,将时间复杂度减少为O(n),极大的减少了计算量。

2.准确度高,受噪声影响小
使用标准差来确定一个最优密集区域,对噪声不敏感

3.可以通过部分圆弧还原整个圆形
RSCD不但能够检测完整的圆形,也能通过部分圆弧还原整个圆,且允许圆弧断裂和错位,具有很好的鲁棒性。
下图是使用RSCD还原圆弧的结果:

另外,虽然RSCD与RHT均使用三点定圆法来确定圆,但是与RHT不同的是,RSCD使用轮廓图作为输入图像,这样极大的减少了需要随机选取的点的数量,减少了计算时间,同时RSCD使用最短欧式距离法来确定最可能圆的圆心,可以指定检测圆的个数,并且其半径使用所有圆心在密集区域内的可能圆的均值,减少了对半径的计算量。

下图是基于RSCD和Hough圆检测的效果对比:

赞一个! (21)

文章评论(如需发表图片,请转至留言)