欢迎来到天天文库
浏览记录
ID:23669325
大小:55.00 KB
页数:7页
时间:2018-11-09
《基于halcon的喷码字符识别技术的研究与实现》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、基于HALCON的喷码字符识别技术的研究与实现肖海俊1,2,葛广英1,2,姚坤1,2,尹红敏1,2(1.聊城大学物理科学与信息工程学院,山东聊城252059;2.山东省光通信科学与技术重点实验室,山东聊城252059)摘要:为了实现产品包装上喷码字符高效、快速、准确地识别,设计了一种基于HALCON的喷码字符识别系统。首先采用四次不同结构元素的闭运算准确提取字符,然后再采用BP网络训练样本,根据字符的特征对样本进行分类,生成相应的字符库,并调用该字符库读取字符,进而识别出字符符号。实验结果表明,这种方法运算
2、速度快、准确性高。.jyqkage()算子读取相机采集到的图像。采集到的图像如图3(a)所示。2.2图像预处理采集到的图像一般为彩色图像,在图像处理之前要先调用rgb1_to_gray()算子对彩色图像进行灰度变换,处理后的图像如图3(b)所示。灰度变换的公式如下:f(x,y)=0.299R(x,y)+0.587G(x,y)+0.114B(x,y)(1)式中:f(x,y)表示彩色图像转换为灰度图像之后的像素灰度值;R(x,y)表示彩色图像每个像素红色分度值;G(x,y)表示彩色图像每个像素的绿色分度值;B(
3、x,y)表示彩色图像每个像素的蓝色分度值。在喷吗的过程中,由于物体的角度、物体的运行速度等因素影响,喷码字符有可能会发生歪斜、不整齐等情况,为了更精确地识别喷码字符,首先要将字符调整为水平。操作过程为:首先调用HALCON中的text_line_orientation()算子计算出图像中喷码字符的角度,然后利用rotate_image()算子按照上一步计算出的角度进行角度调整,旋转后的图像如图3(c)所示。2.3获取感兴趣区域由于相机的视野较大,喷码字符只占被采集图像的一部分区域,为了减少工程计算量提高计算
4、效率,图像处理过程中的感兴趣区域(RegionofInterest,ROI)的提取是必不可少的。其具体操作步骤如下:(1)调用threshold()算子对角度调整后的图像进行灰度阈值变换,获取字符区域;(2)调用connection()算子计算区域的连通域,并利用seclect?shap()算子选择字符区域;(3)调用area?center()算子获取字符区域中心,然后利用gen_rectangle2()得到一个包含全部喷码字符的矩形区域;(4)调用reduce_domain()截取感兴趣区域,如图4所示。
5、2.4形态学处理由于喷码字符为5列7行的点阵型字体,如果直接进行OCR字符识别,喷码的质量对识别结果的影响很大。为了排除点阵的变形对字符识别的影响,需要将图像进行形态学处理,形态学的基本思想就是用具有一定形态的结构元素提取图像中对应的形状,从而实现对图像的分析和识别。腐蚀和膨胀是形态学两种最基本的运算,腐蚀运算公式为:上式表示B对A的腐蚀作用,就是在A内平移B,平移过程中B完全包含在A内所有参考点的集合,其中集合A和集合B都在Z2中,腐蚀效果如图5(a)所示。膨胀运算公式为:上式表示B对A的膨胀作用,就是在
6、A内平移B,平移过程中B与A至少有一个公共点的所有参考点集合,其中集合A和集合B都在Z2中,膨胀效果如图5(b)所示。本文字符提取主要采用四次不同结构元素的闭运算,闭运算具有填充细小空洞,连接邻近物体,在不明显改变物体面积的情况下平滑其边界的作用,能够扩大前景收缩背景。闭运算就是对灰度图像先膨胀后腐蚀的运算方式,闭运算公式为:为了得到更加清晰的喷码字符,在闭运算操作之前要调用dots_image()算子对图像进行喷码圆点增强处理,突出图像中的点阵,然后调用threshold()算子对点阵增强后的图像进行阈值
7、处理,处理后的图像如图6所示。调用closing_rectangle1()算子使用水平矩形结构元素对字符进行闭运算,填充水平方向的空洞,同理使用竖直矩形结构元素进行闭运算,可以填充竖直方向的空洞。由于每个字符之间的间距较小,并且可能存在点阵倾斜、偏移的情况,如果只使用水平矩形结构元素或者竖直矩形结构元素膨胀,幅度过小无法使每个字符的点阵连在一起,幅度过大很可能使字符粘连,无法分割字符,所以选择使用对角线结构元素填充对角线上的空洞,这里首先调用gen_rectangle2()算子获得对角线结构元素,然后调用c
8、losing()算子,可以填充一条对角线上的空洞,同理重复以上操作填充另一对角线上的空洞,经过以上操作可以将每个字符连到一起以方便字符的提取,形态学处理后的图像如图7所示。2.5字符分割由于每个字符的高度和宽度是特定的,字符分割采用基于字符面积和高度的连通域分割,首先调用con?nection()算子将图像中的所有字符分割成单独的个体;然后调用select_shape()算子对面积和高度进行过滤,选出面积中像素在
此文档下载收益归作者所有