基于OpenCV的客车车号快速识别方法研究

2022-10-31 10:01卞亮中国铁路上海局集团有限公司南京站
上海铁道增刊 2022年2期
关键词:车号掩膜数字图像

卞亮 中国铁路上海局集团有限公司南京站

1 目前现状

当前铁路信息化建设广泛深入的开展,铁路客运编组统计信息系统、铁路编组站管理信息系统、货管系统等各信息系统间的整合及深度开发正逐步深入的进行。作为车辆车号的机器识别,相对较多的运用在货车车号的自动识别方面,而对客车编组中车号的识别,绝大部分车站还停留在人工现场核对的状态。对于利用车体视频图像,采用计算机视觉技术进行客车车号快速识别还未在铁路现场广泛运用。

2 车号识别的意义

目前,旅客列车运统1电子化已经投入现场使用,客车编组车号的编辑、上传、接收等环节均实现了信息化,但是在车号自动识别方面,虽然客车安装了无线射频(RFID)设备,但因车站安装的阅读器建设、维护成本等因素,当前只在个别车站投入使用,并未全面推广运用。客车车号的核对仍由作业人员现场核对,不仅增加现场作业人员的工作量,同时也产生了列车编组信息化的“梗阻”。因此,客车车号快速识别技术的研究,能够实现车号图像的计算机识别,促进旅客列车车号全过程信息化建设。

3 识别方法的选择

3.1 使用场景

客车车号识别是运用计算机视觉技术对始发旅客列车的编组内容(车号图像)进行自动识别。在现有的场景中,在客站站台端部设置高清摄像头,拍摄旅客列车进站时的车体视频,并对视频进行逐帧分析,运用计算机视觉(OpenCV)技术对读取到的视频帧中所包含的数字图像(车号信息)进行处理,分析计算出旅客列车中每辆客车的车号信息,从而生成旅客列车“客运统1”信息。该场景中,因列车的移动,造成图像帧内容变化较快,没有相对静态的视频影像,并且受到环境因素(光照、雨雪)的影响较大。

3.2 当前技术

目前的图像识别技术主要运用在人脸识别、文字识别、图形识别等方面,识别技术主要使用haar级联分类器、OCR光学字符识别、卷积神经网络等技术。这些技术成熟度高,原理及算法公开,但前期需要对数据进行训练,运算步骤较繁琐复杂,对硬件的要求较高。在当前应用场景中部署,现有硬件的运行时效性不高。

3.3 合适的方法

对于动态视频的分析,其本身需要程序的高响应度,同时还要考虑现场计算机的配置及网络带宽等外在因素的不利影响。为此,选择轻量化的计算步骤,较低的数据处理量,可以降低计算机的处理负担,加快视频帧的分析计算效率。遵循这一思路,结合现有图像处理的总体步骤,总结出“预处理-定位分割-对比识别”的方法,使用“梯度计算-轮廓查找-掩膜对比”的处理步骤,对视频数据进行车号识别快速处理。

4 实现步骤

通过cv2.VideoCapture()从现场视频源获取客车车辆图像,对视频数据按帧处理。原始图像如图1所示。

图1 原图

4.1 预处理

为加快图像数据的处理速度,将彩色图像转换成灰度图,同时利用cv2.filter2D()对图像进行卷积算法,算出图像中前景数字的边缘,生成二值图。

(1)视频采集到的图像数据通常是红绿蓝彩色三通道图像,为了简化运算步骤,加快图像数据的处理速度,首先将获取到的彩色图像转为灰度图,使用cv2.cvtColor()函数将BGR三通道彩色图转成单通道灰度图。同时考虑到车体外观受尘土颗粒、雨水水滴等因素的影响,图像中会出现随机噪音,为去除噪音降低图像后续的轮廓计算量,使用cv2.GaussianBlur()函数对单通道灰度图进行高斯滤波处理,去除图像中的噪音,高斯核选用(5,5)增强去噪效果。如图2所示。

图2 GaussianBlur图

(2)为快速区分出图像中前景数字位置,对图像颜色、边缘轮廓等特征进行选择比较,发现使用图像的梯度特征,能有效的辨别出前景图像。图像梯度,如果把图像看成二维离散函数,图像梯度其实就是这个二维离散函数的求导。使用cv2.filter2D()卷积函数对GaussianBlur图进行卷积计算,求得图像梯度。对比HPF(High Pass Filter,高通滤波器或梯度滤波器):Sobel算子、Scharr算子及Laplacian算子的运算结果,考虑到视频图像在室外环境下,干扰因素较多的情况,经过测试使用kirsch算子对图像进行卷积运算,会取得完整的图像梯度。kirsch算子采用8个模板对图像上的每一个像素点进行卷积求导数,这8个模板代表8个方向,对图像上的8个特定边缘方向作出最大响应。图像像素点经卷积运算后取该点8个方向的最大值,然后对最大值超过255的像素点统一设置上限值255,对最大值小于50的像素点置0,得到kirsch图像。如图3所示。

图3 kirsch图

4.2 定位分割

得到kirsch图像后,为区别前景数字和其它影像,先要对kirsch图进行轮廓查找,利用轮廓函数计算出前景数字的轮廓位置和大小,从而独立的标注出各个数字。然后利用车号数字呈横向等距排列的特点,计算出各轮廓矩形框扩展后,该框中其它轮廓中心点的数量,从而定位、分割客车车号。

(1)得到kirsch图像后,只是辨别出了前后景物间的边缘,对于前景图像本身,还没有独立的标注。为快速区分出单独的前景图像,加快客车车号识别实效,使用图像的轮廓特征来算出kirsch图中各个独立的前景图像。采用cv2.findContours()函数,其中寻找轮廓的模式为“只检测外轮廓”(mode:cv2.RETR_EXTERNAL),轮廓的保存方式为“只保留端点”(method:cv2.CHAIN_APPROX_SIMPLE),计算出图像中前景事物的轮廓,但是其计算的轮廓列表中包含其它前景图像,如:黄色菱形腰线、车种字母等。为剔除无用的前景图像,使用sorted()函数先对前景轮廓列表按照面积大小(key=cv2.contourArea)进行排序。通过比对排序后的轮廓发现,客车车号轮廓包含在前30个轮廓数据中。为减少计算量,加速图像处理速度,在sorted()计算结果中取前30个轮廓数据生成车号数字轮廓列表。

(2)在车号数字轮廓列表中,6个车号数字轮廓在列表中不连续,无法使用轮廓面积来定位每个车号数字。通过对数字车号轮廓相对位置的分析发现,6个数字的轮廓横向排列,同时6个数字轮廓矩形中心点的Y轴数值近似相等,且最左侧1位数字的轮廓矩形框沿X轴正方向扩展6倍后,其右侧5个数字的轮廓矩形中心点均在该框内,所以可以利用车号数字呈“横向等距排列”这一特点,定位数字轮廓及其顺序。依次计算车号数字轮廓列表中的每一个轮廓,将轮廓矩形框在X轴正方向上扩展6倍,同时轮廓矩形框在Y轴方向上保持不变,生成“查找框”,再逐一计算车号数字轮廓列表中轮廓矩形中心点是否在“查找框”中,全部轮廓中心点均计算完毕后,为避免车种字母等其它轮廓矩形造成的误算,需要利用数字轮廓矩形的高度(Y轴高度)与6个数字的整体轮廓矩形宽度(X轴宽度)的比值来剔除误算的影响。当轮廓中心点数量为6且X轴宽度小于6倍Y轴高度时,说明该“查找框”为最左侧1位数字的轮廓矩形生成而来。该“查找框”包含6个车号数字,即“横向等距特征算法”,从而定位车号的图像位置。如图4所示。

图4 车号定位图

(3)采用“查找框”定位车号图像后,比较各数字轮廓矩形X轴数值的大小(左侧数值较小,右侧数值较大)确定数字的排列顺序。同时根据轮廓矩形的位置信息,从灰度图中裁出单独的数字图像,使用cv2.threshold()函数,操作类型为type:cv2.THRESH_BINARY_INV+cv2.THRESH_OTSU,对裁出的单独数字图像进行二值化(白底黑字),并调整为指定格式大小(72,144)。此时单独数字图像无边框,使用cv2.copyMakeBorder()给单独数字图像四周增加4个像素白色边框,其格式大小调整为(80,152)。再使用cv2.erode()对单独数字图像进行形态学腐蚀处理,使黑色字体膨胀。如图5所示。

图5 单独数字图

4.3 掩膜对比

将标准数字模板制作成掩膜,然后通过单独数字图像与标准数字模板像素进行二进制“与”操作,判断单独数字图像的数值字符,即“数字掩膜比对”计算出客车车号。

(1)标准数字模板的制作。通过对常规车号图像的裁剪,制作成指定格式大小(80,152)的单独数值图像,同时对图像使用cv2.threshold()函数进行二值化(黑底白字)处理后,生成标准数字模板。如图6所示。

图6 标准数字模板

(2)掩膜运算。按照数字轮廓矩形X轴数值确定的数字排列顺序,从左至右逐个使用单独数字图像与标准数字模板进行二进制“与”操作。使用cv2.bitwise_and()函数将单独数字图像和标准数字“与”运算,因标准数字模板是黑底白字,单独数字图像是经腐蚀处理的白底黑字,数字图像中黑色字体经过膨胀,数字图像和对应的标准数字进行像素“与”运算后,其“与”运算的结果应为全黑,而数字图像和其它标准数字的“与”运算会出现白色像素区域,掩膜运算后得到bitwise_and结果图像。以单独数字图像“3”为例,其与标准数字模板掩膜运算后结果图像,如图7所示。

图7 bitwise_and结果图像

(3)分析对比。单独数字图像与标准数字模板掩膜运算后,因单独数字图像进行腐蚀处理,黑色字体膨胀,其bitwise_and结果图像中对应的数字图像将整体覆盖,如图7中标准数字模板“3”的结果图像全黑。在实际计算过程中,考虑到图像拍摄角度带来的单独数字图像形变及随机噪音等不利因素的影响,其全黑图像的计算结果中,会出现个别白色像素。可以使用矩阵求和函数np.sum()计算bitwise_and结果图像中白色像素的数量。再通过查找比对bitwise_and结果图像中白色像素数量最少的图像,确定单独数字图像对应的数字字符。图7中“3”的白色像素最少,所以单独数值图像的字符是“3”。其余车号数字字符亦通过“数字掩膜比对”的方法计算得到,从而生成完整的客车车号“351600”。

5 结束语

通过使用计算机视觉(OpenCV)技术,对客车车体视频图像进行“预处理-定位分割-对比识别”,从而计算出前景数字图像的数字字符,得到客车的车号。该算法步骤较为简捷,能够较快的对视频信息进行处理,同时对硬件的要求较低。客车车号快速识别的研究,可以较为便捷的实现旅客列车“客运统1”的全过程信息化,减少现场客车现车核对的工作负担,打通当前客车车号信息化中的“堵点”。客车车号快速识别的研究给铁路客车车号作业信息化的建设带来更多的思路和方法。

猜你喜欢
车号掩膜数字图像
利用掩膜和单应矩阵提高LK光流追踪效果
基于最近邻值和枚举法的车号字符分割及拼接方法*
宽周期掩膜法HVPE侧向外延自支撑GaN的研究
铁路车号识别设备太阳能供电技术的探讨
基于数学形态学与投影法的高速列车车号定位研究
ARGUS-100 艺术品鉴证数字图像比对系统
动车组车号识别与定位仿真子系统的研究
光纤激光掩膜微细电解复合加工装置研发
基于块效应测度的JPEG数字图像盲取证
数字图像修复在图像压缩上的应用