⑴ 其中,
, l为窗口的长度, Fj即为窗口的中值滤波输出。表示为:
, l为窗口的长度, Fj即为窗口的中值滤波输出。表示为:
[4] ⑵ 表示取数列的中间值
由于表面图象是二维的,将一维中值滤波推广到二维。这时选取某种形式的二维窗口,将窗口内像素点的灰度值按先行后列的顺序排列,生成单调二维数组序列Fij,二维中值滤波输出表示为:
⑶ 由公式⑴、⑵、⑶可以看出,中值滤波是将中心像素与周围像素的灰度值进行比较,将灰度值较大的像素点与周围像素点接近,从而消除孤立的噪声点。
本文采用3×3形式的二维中值滤波方法对图5做消噪处理,结果如图6所示:

图6 中值滤波后的条码图象
对于边缘毛刺,采用求平均值的方法处理。由于图象各行在同一位置的条空宽度不等,就会出现边缘毛刺现象。因此,本文将每个位置上逐行扫描到的条空宽度求平均值,得到该位置的条空宽度并输出(图7),求解过程如下:
⑷
⑸
⑹
⑺ 式中:Lr —第 r个条(空)的宽度; lir—第r个条(空)第i扫描行的宽度; m—条码长度;
n —扫描总行数

图7 均值滤波后的条码图象
4.2 边界检测
由于光源扫描的范围不仅包括条码区,还包括非条码区,所以得到的数字图象也包括条码区和两侧静区(如图8所示),需对其进行边界检测,将条码部分提取出来,以便进行译码处理。本文采用相邻条空宽度比较的方法[5]判别条码的起止位置:当所测条的宽度的10倍小于上一空的宽度时,此条即为条码的开始位置;当所测空的宽度大于上一条的宽度的10倍时,条码部分截止。
图8 条码图象组成 受信号采集精度的影响,计算机输出的条码元素的宽度与实际值之间存在误差,如果直接译码,难免要出现误读的现象。因此,本文采用阀值分割的方法,选定一个宽度阀值M,通过公式⑻将所有条码元素的宽度f(x)划分为宽条、窄条、窄空、宽空四类,逻辑值分别为-2、-1、1、2,这种方法可以消除硬件带来的误差,保证了输出信息的正确性。
(8) 不同码制的条码,编码规则一般不同,解码方法也不同。本文采用逻辑值匹配的方法对目前常用的UPC/EAN码做译码分析,这两种码制的每个字符都由两条两空组成,以字符“5”为例,当它表示一位右手偶字符时,编码结构为:窄条—宽空—宽条—窄空,逻辑值表示为:-1 2 -2 1。译码时,从条码的起始位开始,每四个元素为一个单位,用公式⑻求出其逻辑值,对照字符逻辑表得到相应的字符并输出,直到检测到条码的终止位结束,采用这种译码方法对文中图7所示的条码做译码分析,输出结果如图9所示。

图9 译码结果
6 结束语
由于计算机的处理速度远高于单片机,使用软件译码不仅可以提高译码的效率,而且能适应码制灵活多变的特点,克服了硬件解码的不足。本文采用滤波降噪、阀值分割等数字图象处理技术对条码图象进行处理,不仅能较好地识别标准条码,而且对残码的识别也有一定的意义。计算机并口通信和逻辑值匹配的译码方法对提高译码效率起重要作用。
参考文献
[1] 刘克龙,姜雷,程伟.数字图象处理系统的构成及常用方法[J]. 信息技术,2000,⑷:32-33.
[2] Rafael C.Conzalez,Richard E.Woods.“Digital Image Processing”[M]. Publish House of Electronics Industry,BEIJING,2004.
[3] 席卫文,张春晓,李光明.C++ Builder 6程序设计与实例[M]. 北京:冶金工业出版社,2003.
[4] avlidis T.Algorithms for Graphics and Image Pressessing [M]. Computer Science Press,1982.
[5] 王雅静.EAN-13条码图像辩识方法研究[A]. 山东科技大学硕士学位论文,2003.