1. 引言
随着我国经济社会的飞速发展,无人售货这一新颖的购物方式越来越普及。硬币是一种使用范围最广,使用寿命最长的货币。硬币在无人售货的交易中充当着重要角色,然而与之伴随出现的是大量硬币的分拣问题,特别是公交公司、银行、超市和一些无人零售的企业。因此如何快速识别硬币面额来完成各种硬币的分类分拣,成为有效开展无人售货这一购物方式的关键。
目前硬币识别的方法主要有颜色识别法 [1] ,图像识别法 [2] ,电涡流传感器识别法等,这类识别法所受环境因素影响较大,很难保证稳定的准确率。也有一些利用EDA技术、传感器、智能控制技术等进行硬币识别,这类识别准确率改善明显,但是这些实验仪器较贵,成本过高。
综上,可以设计一种高效识别且成本较低的硬币识别系统,就此本文提出了一种基于图像处理方法对硬币进行定位及识别的算法。核心算法是利用极坐标方法把圆形硬币信息转换存储到二维矩阵中,再进行特征提取,特征比对,最终完成识别。此算法可以解决所有圆形物品的识别问题,因此不受硬币形状的约束,能有效避免硬币图案、颜色和一定光照的影响,确保了硬币识别的可靠性。经过大量实验验证,此算法识别速率快,准确率高,受环境因素影响较小,而且识别成本低,有一定的实用研究价值。
2. 硬币识别流程设计
2.1. 硬币特征分析
目前在市场上流通常用的硬币有六种,1角、5角、1元各两种版本。它们的共同特征为:均是圆形,有一定的厚度和质量,有颜色,是钢芯镀镍材质,且随着面额的增大半径依次增大。硬币的一面有一个大的数,另一面是图案面及生产年份等。
2.2. 硬币识别流程
首先是采集图片,用摄像头在硬币的正上方拍摄,保证硬币圆形信息完整。硬币放置位置随意,不需要刻意调整角度。通过摄像头采集到的原始图像应该先进行图像预处理:彩色图像灰度处理,边缘提取——确定图像位置;边界定位——确定图像大小。再归一化采样、特征提取、极坐标转换、矩阵模板二值化处理、存储特征模板、进行特征比对、与设定阈值比较、最终完成识别 [3] 。具体流程图如图1所示。
3. 硬币图像预处理
3.1. 彩色图像灰度处理
在做任何图像处理的实验之前,都需要对图像进行预处理。图像预处理能有效去除一些干扰信息,便于准确定位硬币位置,使得最终的识别结果更可靠。
摄像头实际拍摄到的图片是RGB彩色图像,RGB彩色图像所占内存较大,而且还会因为光照大小和拍摄角度等原因造成较大干扰,这将导致RGB图像所包含的无用信息较多,因而无法直接进行识别。相比较RGB图像而言,灰度图像占有的内存小,且提供的信息单一有效。
综上,图像预处理第一步就是将采集到的彩色图像进行灰度处理。图像灰度处理常见方法:最大值法、平均值法和加权系数法。本文用rgb2gray()语句可以进行RGB图像转化为灰度图像,没有设定阈值,对比度效果不错,读者可根据实际情况设定阈值来提高对比度。灰度处理图像如图2所示。
3.2. 图像滤波
摄像头拍摄的原始图像通常都会引入噪声,严重影响图像质量。中值滤波方法可以有效的消除噪声,并且完好的保存边缘像素,中值滤波处理可以使图像变得更平滑。
中值滤波是取当前像素点及其周围的几个点共奇数个点(可以选取一个待滤波像素点及其周围的8个点,共9个点)按像素值大小顺序排序后再去中间值来代替当前点的像素值。如图3所示中,待滤波点A的像素值为135,对其周围的八个点一起按小到大的顺序排列后,像素值由小到大的顺序是:34、35、89、123、124、135、147、245、245。取中间值代替A点原有的像素值。则中值滤波后A点像素值由135变成124。中值滤波后各点像素值变化如图4所示。
4. 边缘检测和图像定位
4.1. 边缘检测
图像处理中边缘检测常用的算子有六种:Sobel、Robots、Prewitt、log、Canny和zeroscross算子 [4] 。本文采用Sobel算子进行边缘检测,Sobel算子主要是对于像素的位置的影响做了加权,可以降低边缘的模糊程度,因此边缘检测效果更好。该算子包含两组3 * 3的矩阵,一组是横向矩阵,一组是纵向矩阵,它们分别与图像做平面卷积,即可分别得到横向亮度差分近似值和纵向的亮度差分近似值。
如果A为原始图像,Gx和Gy分别代表经横向和纵向的边缘检测的图像,其公式如(1)、(2)所示。最终图像显示结果如公式(3)所示。
(1)
(2)
(3)

Figure 1. Coin identification flow chart
图1. 硬币识别流程图

Figure 4. Median filtered result image
图4. 中值滤波后结果图像
图像的每一个像素的横向及纵向梯度近似值可用梯度计算的公式(4),计算出图像梯度大小。
(4)
如果公式(4)计算结果为0,则代表图像该处拥有纵向边缘,左方相比较右方而言较暗。边缘检测结果如图5所示。
4.2. 边界定位
确定了图像边缘后,找到上下左右边缘的极点作水平线和垂直线截图出来进行图形的边界定位 [5] 。则矩形图像正中心为圆心位置。取矩形的长a与宽b的和的平均值的一半大小作为半径r的大小。
(5)
确定边界后再根据圆形度公式来判定这是不是圆形。设定阈值为0.94,允许一定的误差。大于阈值就认定为圆,继续进行硬币识别步骤。否则认为不是圆,提示这不是硬币。圆形度公式(6):
(6)
计算公式(6)描述的是面积乘上4π除以周长的平方。用来判断图形是否相似于圆形。当e为1时,图形即为圆形;e越小,图形越不规律,与圆形的差距越大。
周长C求法:
(7)
面积S求法:
(8)
边界定位结果如图6所示。
5. 硬币识别
5.1. 特征提取方法
由于圆形的特殊性,我们无法根据图形来判断圆形硬币的角度是否存在偏移。因此需要根据硬币图案的内容位置的相对变化来衡量硬币的角度偏移,也就是在图像预处理步骤中需要多加一个图像角度矫正的步骤。这种方法的确可行,但是图像预处理过程时间增加,识别快速性降低。本文提出一种方法:将圆形图像信息转化成方形矩阵保存,即将圆形看成极坐标图形,确定圆心后给定角度和半径大小就可以对圆形里的点进行唯一表示。
具体操作步骤如下:首先,设定半径的阈值,范围是
,其中a的范围是
(9)
因为半径过小时采样点过于密集,容易发生重叠,半径过大则采样部分占整个硬币的比例过小,最后识别结果难免不准确。本文a取值为r/5。采样图像如图7所示。
接下来,在一个硬币上画十个半径为ri的同心圆和360个半径,其中
(10)
(11)
每隔1度画一条半径,平分整个圆形就画了360个半径。它们的交点共有3600个点,组成一个10 × 3600的矩阵。设定角度个数为矩阵的行数,半径个数为矩阵的列数,角度为0度且半径最小的点为初始点,将3600个点排列成矩阵,再读取每一个交点的像素值进行保存。此时得到的矩阵如图8所示。
其中图8的像素值在0~255不等。
5.2. 存储特征模板
灰度图像有0~255级一共256个灰度等级,使得图像可以看见明暗变化,在特征提取中,主要目的是将目标与背景明显地区分出来,若将灰度图像转换成二值图像,像素值只有0,1,图像黑白分明,结果显示更清晰,更直观。灰度图像转化成二值图像的方法有很多,本文定义一种方法:取一个像素点A (像素值为135,如图9所示)看它是否比左边相邻的三个点的像素值之和的平均值大,如果是则将A点的像素值设成1,否则将A点的像素值设成0。其公式表示如下:
(12)
对A (像素值为135)进行所提的方法计算得:
(13)
由(13)计算结果可知A点像素应设成1。结果如图10所示。
依据这种方法将所有像素点进行二值处理将得到只含有像素值为0和1的二值特征模板。二值特征模板如图11所示。
5.3. 数据库建立
根据本文前面所述步骤,把目前流通的常用版本的硬币的正、反两面拍照后均做成二值矩阵特征模板保存到文件夹作为数据库。此处不用刻意调整角度。
5.4. 特征比对
硬币识别过程:有了数据库,将待识别的硬币的特征模板与数据库中的特征模板进行比对,这里要考虑到角度偏移问题。

Figure 8. Information transformation matrix template
图8. 信息转化矩阵模板
本文提出的解决方法为循环相减法,具体方法为:将待识别硬币的特征模板矩阵M与数据库中的特征模板矩阵N进行图像相减,记录与每个特征模板像素相减的差值取模再求和的值X [6] ,公式如下:
(14)
将X与设定的阈值Y进行比较,若X ≤ Y,则识别结果为特征模板的那种硬币;若X > Y,则将M的列数向左偏移一列组成新的矩阵(即第i列为第
列,第1列则为第360列),得到新的矩阵模板M1再与数据库中的特征模板矩阵N进行公式(14)计算得到X1。X1与Y再进行比较。这样最多循环360次,若没有找到比设定阈值小的差值,判定结果为不是该种硬币。换一个数据库中的特征模板继续如此做即可 [7] 。
该算法排除了圆形大小不一和角度偏差的问题。建立的特征模板也完美的避开了一定的光照影响。因为在同一光照下,像素点之间的关系是固定的。
6. 识别结果及结果分析
6.1. 识别结果
本文随机选取几种硬币进行实验,实验结果如图12(a)、(b)、(c)、(d)所示。

Figure 12. Coin recognition result, (a) One yuan recognition result, (b) One jiao recognition result, (c) Wu jiao recognition result, (d) Non-coin recognition result
图12. 硬币识别结果,(a) 一元识别结果,(b) 一角识别结果,(c) 五角识别结果,(d) 非硬币识别结果
6.2. 结果分析
经过大量实验验证,本文提出的基于图像处理的硬币识别分类算法的理想预期功能均已实现,最终的硬币识别相似度在0.9左右浮动。为什么不是1?可能原因如下:硬币表面不够清洁,污渍会影响识别结果;摄像头没有在图像的正上方导致圆形硬币信息缺失;光照过大或过小等等。
7. 结论
本文提出的算法对光照要求适当减少,该算法摆脱了硬币形状的约束,利用图像处理的知识完成了硬币识别,阐述了极坐标信息转化成矩阵信息的应用。该算法核心方法是巧妙地将圆形信息转换存储到二维矩阵中,该方法可以解决一类圆形物品的识别问题,具有长远的应用性。实验证实该算法识别速率快,识别结果稳定,在当今无人售卖的购物方式兴起的大背景下,此算法有一定的应用价值。