技术领域
[0001] 本发明涉及一种字符识别方法,尤其是涉及一种成捆棒材端面字符识别方法,属于字符识别领域。
相关背景技术
[0002] 特钢棒材是建筑、机械、汽车等行业不可或缺的材料。随着现代社会经济的不断发展,各个行业对不同特性钢材的需求量也日益增长,我国作为钢铁产量第一大国,特钢棒材
年产量在1500万吨以上。特钢棒材的型号和种类多样,钢铁生产厂家每天要生产数万根特
钢棒材,入库时的生产信息标记是以捆为单位,而特钢棒材在诸多领域有着重大的需求,改
变以往的成捆标记方式为单根标记方式是大势所趋。因此,国家科技部提出了在特钢棒材
精整生产中实现单根棒材全流程可追溯的战略要求。
[0003] 随着机器视觉技术的快速发展,其在钢铁生产行业的应用也越来越多。钢铁生产厂家在棒材精整生产时,在棒材端面进行编码标记并通过机器视觉技术完成编码的识别,
进而获取每根特钢棒材的生产日期、炉批号、型号等具体生产信息。因此,提出一种成捆棒
材端面字符识别方法,解决实现单根棒材全流程可追溯过程中的身份自动识别问题。
具体实施方式
[0015] 结合附图1说明本发明的具体操作。
[0016] 成捆棒材端面字符识别方法包括如下步骤:
[0017] (1)成捆棒材端面图像分割为单根棒材端面图像;
[0018] (2)单根棒材端面字符图像增强;
[0019] (3)单根棒材端面字符区域检测;
[0020] (4)单根棒材端面字符分割;
[0021] (5)单根棒材端面字符识别。
[0022] 以特钢棒材精整生产线成捆棒材端面标记字符图字符识别为例介绍本发明成捆特钢棒材端面字符识别方法。
[0023] 本发明所采用图像采集系统由型号为MER‑500‑14GM/C的大恒千兆网相机、型号为 M0814‑MP2的镜头、型号为CST‑RS12090‑B的蓝色环形光源、型号为CST‑DPS24120C‑4TD 的
光源控制器和研华工控机(CORE I5‑6500(65W)处理器、AIMB‑505G2工控主板、256G 2.5"
SATA固态硬盘以及8G DDR4内存)构成。
[0024] 本发明所处理的特钢棒材规格如下:
[0025] 单根特钢棒材直径范围:50mm‑260mm;
[0026] 成捆特钢棒材直径范围:小于360mm。
[0027] 本发明采用康迪牌型号为K68S的油墨喷码仪进行喷码,该喷码仪所用油墨颜色为白色,在特钢棒材端面进行字符喷印,所喷印字符由方形标志点、百位数字、十位数字、个位
数字及圆形标志点从左向右依次排列组成,字符区域宽度为35mm,字符高度为17mm。
[0028] 本发明为验证字符识别方法的可行性,在实验室模拟钢厂光照条件,通过图像采集系统得到多张成捆特钢棒材端面图像,为了识别棒材端面上字符信息,将成捆特钢棒材
端面图像分割为单根,对每一根特钢棒材进行图像增强、字符区域检测、字符分割以及字符
识别等流程最终完成成捆特钢棒材端面字符的识别。
[0029] 1成捆棒材端面图像分割为单根棒材端面图像
[0030] 成捆特钢棒材端面图像分割采用的方法是将补光后图像与补光前图像做减法得到每一根特钢棒材端面区域。
[0031] 在对补光后图像进行区域选取时由于特钢棒材端面为圆形区域,采用Hough变换圆形检测来完成单根特钢棒材端面区域的选取。首先,对成捆特钢棒材端面用光源进行补
光并通过图像采集系统采集图像,采用Hough变换圆形检测方法检测补光后每一根特钢棒
材端面区域并分割;然后,将得到的单根特钢棒材区域与未补光图像进行减法运算即可得
到单根特钢棒材端面。
[0032] 在MATLAB环境下使用imfindcircle函数完成单根特钢棒材端面区域的选取。代码如下:
[0033] I=imread('buguang.bmp');%读取补光后成捆特钢棒材端面图像。
[0034] T=0.7;%设置二值化参数。
[0035] J=im2bw(I,T);%成捆特钢棒材端面图像二值化。
[0036] J=bwareaopen(J,5000,8);%二值化后的图像进行开运算。
[0037] [centers,ra,~]=imfindcircles(J,[Rmin Rmax],'ObjectPolarity','bright','Sensitivity',0.965,'EdgeThreshold',0.4);%进行圆形检测,Rmin、 Rmax为
待检测圆形区域的半径范围,通过相机与特钢棒材端面之间的距离、相机焦距等参数计算
得到。
[0038] [centers,ra]=huofu_xiuzheng(centers,radii,J);%将检测到的不是特钢棒材端面圆形区域剔除。
[0039] II=imread(‘weibuguang.bmp’);%读取未补光成捆特钢棒材端面图像。
[0040] [a,~]=size(centers);%求取连通域个数。
[0041] for i=1:1:a
[0042] rect=[centers[i,1]‑ra[i]centers[i,2]‑ra[i]ra[i]ra[i]];%设置矩形区域。
[0043] III=imcrop[II,rect];%进行图像裁剪。
[0044] imwrite(III,’棒材’+i+’.bmp’);%保存裁剪后的图像。
[0045] endfor
[0046] 2单根棒材端面字符图像增强
[0047] 由于特钢棒材生产环境光照条件较为复杂,采集到的特钢棒材端面图像对比度较低,因此本发明采用一种基于小波变换的图像增强方法来完成特钢棒材端面低对比度图像
的增强,具体步骤如下:
[0048] (1)图像小波分解
[0049] 通过小波变换可以将图像分解为低频分量和高频分量,经过对各分量分析发现,低频分量中保留了图像的绝大部分信息,高频分量中存在是则是图像的噪声部分。在
MATLAB环境下采用dwt2函数可完成图像的小波分解,代码为:
[0050] [cA1,cH1,cV1,cD1]=dwt2(I,'harr');%cA1为图像分解后的低频信息分量,cH1为图像分解后的水平信息分量,cV1为图像分解后的竖直水平信息分量,cD1为图像分解后
的对角信息分量。
[0051] (2)将图像低频分量进行Gamma校正
[0052] Gamma校正可以通过调整参数实现图像暗区域和亮区域之间的对比度的调整。通过 Gamma校正将低频分量中的字符区域与背景区域之间的对比度提高。在MATLAB环境下进
行图像Gamma校正的代码为:
[0053] I1=I./255.0;%将图像灰度值范围调整到0到1。
[0054] Igammacorrection=imadjust(I1,[0 1.0],[0 1.0],3.5);%进行Gamma校正,经过大量试验发现,参数γ的取值为3.5时效果最好。
[0055] Igammacorrection=Igammacorrection.*255;%将图像灰度值范围调整到0到255。
[0056] I3=uint8(Igammacorrection);%转换图像格式便于观察显示。
[0057] (3)将图像高频分量进行中值滤波
[0058] 经过分析发现,图像的高频分量中存在的噪声主要为椒盐噪声,因此本发明采用中值滤波将噪声去除。MATLAB环境下使用medfilt2函数完成高频信息的中值滤波,代码为:
[0059] I_med=medfilt2(I3,[1,1]);%I3为图像高频分量图像,[1,1]为窗口大小。
[0060] (4)图像重构与二次中值滤波
[0061] 将处理完成的低频分量和高频分量进行图像重构得到新的特钢棒材端面图像,对其分析发现图像中仍然存在部分噪声,因此进行二次中值滤波,最终完成特钢棒材端面图
像的增强。在MATLAB环境下使用idwt函数对处理完成的图像各分量进行重构得到新的图
像,代码为:
[0062] ss=idwt(cA1,cH1,cV1,cD1,'harr');%将处理后的各图像分量进行重构。
[0063] 3单根棒材端面字符区域检测
[0064] 由于特钢棒材端面为圆形,存放过程中字符区域会呈现任意角度,因此本发明采用以下步骤完成端面字符区域的检测:
[0065] (1)字符区域初次检测
[0066] 采用基于MSER方法完成字符区域的初次检测,在MATLAB环境下,代码为:
[0067] I=imread(‘zifu.bmp’);%读取字符图像
[0068] mserRegions=detectMSERFeatures(I);%进行最大稳定极值区域的检测
[0069] mserRegionsPixels=vertcat(cell2mat(mserRegions.PixelList));%将检测到的最大稳定极值区域按照像素列表存储。
[0070] mserMask=false(size(I));%定义系数全为假的MSER区域。
[0071] ind=sub2ind(size(mserMask),mserRegionsPixels(:,2),mserRegionsPixels(:,1));%把mser区域的坐标系数取出来。
[0072] mserMask(ind)=true;%将相应系数的地方赋值为真,找到MSER区域。
[0073] figure;
[0074] imshow(mserMask);
[0075] (2)字符区域二次筛选
[0076] 字符区域的二次筛选是根据字符区域的长宽比rz、面积占比pz、连通域中心坐标(xz,yz) 等特征从初次筛选的区域中最终完成区域的筛选,经过大量试验发现,rz、pz及(xz,
yz)需满足: 0.3<rz<3、pz>0.6、|x0‑xz|<Δ、|y0‑yz|<Δ。其中,(x0,y0)为筛选区域边框的中心坐标,Δ为连通域中心点与筛选区域边框中心点的允许偏差。经过大量试验发现,Δ取
值在0到5之间时可以满足需求。
[0077] 4单根棒材端面字符分割
[0078] 经过字符区域检测得到的字符区域图像中,字符的角度任意,进行字符分割之前需要将字符区域进行校正,因此本发明采用以下步骤完成棒材端面字符分割:
[0079] (1)字符图像矫正
[0080] 根据本发明采用的特钢棒材端面标记方案可知,在进行字符区域图像校正时是根据方形标志点和圆形标志点来完成的。首先,在MATLAB环境下使用edge函数并选择Canny算
子完成字符区域中边缘信息的检测;其次,将检测到的闭合边缘进行填充,并根据双标志点
的连通域面积以及双标志点连通域中心点的距离完成双标志点的选取;最后,以方形标志
点为起点、圆形标志点为终点构建一向量A,过两标志点连线的中点构造水平向量B,方向从
左到右,计算向量A与向量B的夹角θ,将字符图像旋转θ,得到校正后的图像。
[0081] 经过大量试验发现,双标志点选取时连通域面积S和双标志点连通域中心点距离d需满足:d=max(dij)、20<S<80,其中dij表示任意两个不同连通域之间的距离,i,j分别为
两个连通域的编号。
[0082] (2)基于投影法字符分割
[0083] 基于投影的字符分割是指基于图像灰度值分布直方图进行分析,找到字符之间的分割点,以此为界限进行字符分割。本发明针对校正后的字符区域图像,首先,计算字符区
域的水平投影并完成字符区域的水平分割;然后,计算字符区域图像的竖直投影;最后,根
据标志点的宽度W标范围、字符“1”的宽度范围W1、字符“0”、“2”、“3”、“4”、“5”、“6”、“7”、“8”、
9”的宽度范围W其他完成字符区域的竖直分割,将字符区域分割成为单个字符。经过大量试验
发现,当W标、W1、W其他分别满足:6≤W标≤10、9≤W1≤11、17≤W其他≤23时,效果最好。
[0084] 5单根棒材端面字符识别
[0085] 为了使最终的字符识别结果有较高的准确率,本发明采用基于SVM分类器的字符识别方法完成字符的识别,具体步骤包括:
[0086] (1)训练SVM分类器
[0087] 本发明为提高SVM分类器的创建和训练效率,在MATLAB环境中,将字符图像归一化,通过fitcecoc函数完成SVM分类器的训练,使用save函数将训练完成的文件保存,用于
后续的识别,代码为:
[0088] clear,clc,close all;
[0089] k=1;
[0090] for m=0:9
[0091] for n=1:150
[0092] f=imread(strcat('nums\',int2str(m),'\',int2str(n),'.bmp'));%读取样本图像。
[0093] f=guiyihua(f);%将图像进行归一化处理,是样本图像大小一致。
[0094] xx=double(f(:));
[0095] P(k,:)=xx';
[0096] T(k,1)=m;
[0097] k=k+1;
[0098] end
[0099] end
[0100] net=fitcecoc(P,T);%进行训练。
[0101] save mynet net;%保存训练好的分类器。
[0102] (2)使用SVM分类器进行字符识别
[0103] 将待识别的字符图像归一化处理,利用predict函数完成字符识别,代码为:
[0104] xs=[splitfs,points];
[0105] fonts='0123456789';
[0106] load mynet;%加载训练好的分类器文件。
[0107] for m_18=1:size(xs,2)‑1
[0108] g=xs{m_18};
[0109] g=double(picPretreatment(g));
[0110] lastresult=predict(net,g(:)');%进行字符识别。
[0111] endresult=string(lastresult);%输出识别结果。
[0112] end
[0113] endresult。