基于Hough变换的指针式钟表自动识别算法
2022-08-01姚河花才旦多杰祝小兰
姚河花,田 玉,才旦多杰,祝小兰
(青海大学计算机技术与应用系,青海 西宁 810016)
直线检测是图像处理的一个关键步骤,被广泛应用于车道检查、工业仪表识别、工业生产等领域[1-4]。随着计算机技术的发展,利用计算机代替人工完成指针式仪表的读数越来越重要。钟表是计时装置,同时也是测量和指示时间的精细仪器,在某些生产生活背景下,需要对指针式钟表进行读数。指针式仪表自动读数识别常用的算法有差影法[5]、基于区域生长的方法[6]及基于Hough变换的算法等[7-11]。吴东潞等[7]利用Hough变换的原理提取出表盘上的圆弧特征,李娜等[8]对提取的像素点进行双阈值Hough变换直线检测。Hough变换的检测方法被广泛应用于直线及圆的检测,该算法具有抗噪声干扰及对曲线间断不敏感的特性。本文结合Hough变换的原理提出一种基于Hough变换的指针式钟表示数自动识别方法,通过Hough变换确定表盘位置,继而完成表盘图像的切割,利用Hough变换检测表盘中的直线,从而确定指针的位置,最后根据指针的倾斜角与图像空间坐标的关系,进一步确定钟表的读数。
1 Hough变换原理及应用
1.1 Hough基本原理
Hough既可以用来检测圆,也可以检测直线。Hough变换的基本原理是将空间坐标系上的点投影到参数空间中,通过观察参数空间里曲线交点的情况来判断要提取特征的方程。
1.2 Hough变换检测直线
在极坐标系ρ-θ中,对于平面上的一个点(x,y)来说,通过该点的直线集可表示为ρ=xcosθ+ysinθ,所有(r,θ)连在一起可连成一条正弦曲线。过不同点的正弦曲线若有交点,那么这些点就可连成一条直线。计算过每一个交点的直线数,设置一个峰值,只要大于该峰值即可判断这些点构成了一条线段,从而得出线段方程(图1)。
图1 直角坐标到极坐标的转换Fig.1 Conversion from rectangular coordinates to polar coordinates
1.3 Hough变换检测圆
Hough变换检测圆的基本原理是将图像空间转换到参数空间。在图像空间中,假设圆心坐标为(a,b),半径为r,则圆的一般方程为:
(x-a)2+(y-b)2=r2
(1)
参数空间中圆心为(x,y),半径为r的圆的方程为:
(a-x)2+(b-y)2=r2
(2)
公式(2)将图像空间的圆转换为参数空间中的一个圆锥面,即图像空间中确定的半径为r的圆,圆周上的所有像素点在参数空间中对应为r相同,a、b不同的一系列圆锥的集合(图2),则同一圆周上的像素点对应于参数空间中的圆锥面必相交于一点[12]。
图2 原图像空间与Hough变换参数空间对应图Fig.2 Corresponding diagram between the original image space and Hough space
2 指针式钟表示数自动识别算法设计
指针式钟表基于Hough变换的指针式钟表示数自动识别算法流程见图3。
图3 指针式钟表示数自动读取流程Fig.3 Automatic pointer clock reading process
2.1 图像预处理
一般情况下,通过摄像机等采集到的图像多为彩色图像,将彩色图像转换为灰度图像,可以加快图像的计算速度,减少计算量。本文采用加权灰度平均化进行灰度转换[13],计算方法如公式(3):
f(i,j)=0.299*R(i,j)+0.587*G(i,j)+0.114*B(i,j)
(3)
式中:R(i,j)、G(i,j)和B(i,j)分别表示图像(i,j)处R(红)、G(绿)和B(蓝)3个通道颜色分量对应的值。
对灰度化后的图像进行二值化,二值化的阈值通过最大类间方差(也称为Otsu法或大律法)算法[14]计算得到,该算法是利用图像的像素灰度分布直方图,并在最小二乘法的理论基础上推导出来的一种自适应的阈值,处理效果见图4。
图4 原图与处理图对比Fig.4 Comparison of original and processing images
2.2 边缘检测
边缘是图像局部亮度变化最明显的部分,是图像分割、特征提取、目标识别等领域的重要依据,常用的边缘检测算子为Roberts算子、Prewitt算子、Sobel算子和Canny算子等。为了比较上述4种算子的边缘检测效果,利用MATLAB工具箱对其进行仿真,仿真实验结果见图5。
图5 各类表盘边缘检测效果对比图Fig.5 Comparison of edge detection effects of various dials
从仿真结果可以看出,Canny算子能够检测到更多的边缘信息,对细节信息保留得更好,但存在较多的冗余边缘信息。而Prewitt算子和Roberts算子、Sobel算子相比较Roberts算子能够对噪声起到平滑作用,因Sobel算子存在权重,所以比Prewitt算子的定位精度更高[13]。因此,本文选用Sobel算子进行边缘检测。
2.3 Hough变换表盘特征提取
对使用Sobel算子边缘检测后获得的图像应用Hough变换进行表盘特征提取。用Hough变换检测出圆的圆心,圆心坐标为(c1,c2),半径为r,I(i,j)为图像中像素点的灰度值。根据公式(4)将图像中大于半径的部分设置为白色,只保留Hough变换检测的圆以内的部分,结果见图6。
图6 Hough变换滤除圆盘外效果图Fig.6 Effects of Hough transform after removing the disc
(4)
2.4 钟表指针位置获取
提取指针特征是钟表时刻识别最关键的一步。对于钟表图片而言,秒针最长,分针次之,时针最短。利用Hough变换检测直线的原理,检测图片中的直线,检测到线的同时得到线段的两个端点,通过端点坐标值计算线段的长度,对线段按长度进行排序,最长的直线对应秒针,次长的直线为分针,分别计算圆心到第3长、第4长两条直线的距离(检测到的直线端点不一定落在圆心处),距离较短的直线对应时针,图7为通过Hough变换检测指针示意图。
图7 指针位置定位图Fig.7 Pointer position
2.5 指针识别示值与读数计算
指针式钟表读数自动识别的核心是确定一个精确度较高且适用性较强的仪表读数自动识别的计算方法,本文采用角度法[11-12]实现示数的自动计算。以Hough变换检测出的圆心O作为直角坐标系的原点建立直角坐标系和图像的空间坐标系。MATLAB中默认的图像空间坐标系原点在左上角,x轴水平向下为正方向,y轴水平向右为正方向。在传统坐标系中,x轴水平向右为正方向,y轴水平向上为正方向。而在钟表图片中,通常以指针与12点刻度线的夹角作为读数依据,为了方便计算,本文以3点方向作为读数的基准方向,所建坐标系如图8所示。
图8 钟表指针坐标系Fig.8 Coordinate system of clock pointer
从图8可以看出,坐标系将整个表盘分成4个象限。根据Hough变换检测直线时得到的端点坐标可以计算直线的斜率及倾斜角,假设直线的端点坐标为A(p1x,p1y)、B(p2x,p2y),其中B(p2x,p2y)为两端点中距离圆心较远的点,直线斜率及倾斜角的计算公式如下:
(5)
α=arctan (k)
(6)
式中:k为直线在x-y直角坐标系的斜率,α为直线与x轴正方向的夹角(α∈[-90°,90°]),则指针与3点刻度线的夹角θ(θ∈[0°,180°])可由公式(7)计算得出。
(7)
当B(p2x,p2y)落在X-Y坐标系的坐标轴上时,θ的取值如公式(8)所示:
(8)
根据公式(7)得到指针与3点刻度线的夹角θ后,进行读数。时针每30°为一个区间范围,分针和秒针每6°为一个区间范围,读数公式如下:
(9)
(10)
(11)
式中:T1、T2、T3分别为秒针、分针、时针的读数。
由于标准时间的格式为XX:XX:XX,当计算得到T1、T2中的某个值为个位数时,在前面空位补0。
3 实验结果与分析
常见的钟表主要包括罗马数字刻度钟表、阿拉伯数字刻度钟表及无数字刻度钟表。为了验证各类钟表的识别准确性,分别采集以上3类钟表的图片构成样本数据集。样本数据集共包括3类钟表图片200张,其中罗马数字刻度钟表和阿拉伯数字刻度钟表图片各70张,无数字刻度钟表图片60张。为了方便处理,将采集到的图片统一归一化为230×230,选取的钟表图片无倾斜、不均匀缩放等情况。
图9 样本数据集图片Fig.9 Images of samples
在Window 10[处理器为Intel(R)]Core(TM)i7-8586U CPU 1.8 GHZ,内存8 GB系统下使用MATLAB 2016 a对钟表图像进行处理。实验证明,通过Hough变换能够进行简单钟表图片的基本读数,选取其中10张图片进行测试,测试结果见表1。
表1 指针示数识别结果分析Tab.1 Analysis of recognition results of pointer indication
从表1可以看出,指针示数对阿拉伯数字刻度钟表和无数字刻度钟表均能够较正确地识别,由于只考虑了指针的长度特征,导致部分图片的秒针和分针容易混淆;罗马数字刻度钟表由于受罗马数字刻度的影响,识别率较低。
4 讨论与结论
Hough变换多用于指针式仪表的自动识别[2,7-11],许丽等[15]经过分析指针转动和图像特性,提出了基于Hough变换的指针角度识别;姚洋等[16]对Canny检测算子进行改进,结合Hough变换进行仪表图像的识别。本文首次提出基于Hough变换的指针式钟表示数的自动识别算法,借助二值化、边缘检测等数字图像处理的知识完成指针式钟表的预处理,之后应用Hough变换检测圆和直线的原理提取表盘特征和指针,根据指针的长度和斜率确定指针所在的位置和象限,以3点方向为基准,确定指针的示数。实验证明本文的算法能较准确地识别钟表图片示数,但对于罗马数字刻度钟表、二值针钟表、表盘光照不均匀及表盘倾斜等情况下的识别效果有待进一步研究。