试卷自适应分割算法的设计与实现
2021-05-08许传林
刘 红, 许传林
(上海电机学院 电子信息学院, 上海201306)
网上阅卷已成为各类考试的重要趋势。针对图片中的文本行检测,近年来国内外的研究人员做了大量的工作。其中,基于纹理的方法和基于区域的方法是文本检测的两大传统方法[1]。基于区域的方法是将图像进行字符区域的划分,再拼接形成文本区域[2];基于纹理的方法是扫描整个图像,将文本作为一种纹理处理,从而实现图像中文本区域与非文本区域的分离[3]。
检测到的文本图像不能直接发送到OCR软件进行识别,与文档图像中的文本相比,它具有更为复杂的背景。照相机获取图像时由于视角问题以及相机硬件的不足都会影响成像的结果。虽然有方法支持灰度图像中文本的识别,但是当文本背景较复杂时,其识别效果并不十分理想。现有的商用OCR软件大多只能处理背景干净的二值图像[4]。对于在图像中检测到的文本行,应将其与背景分离[5]。
在图像处理和计算机视觉范畴,图像分割始终是一个基础和关键问题。例如,医学图像分割、数字图像编辑、军事目标辨认、人体活动跟踪等,随着图像分割的应用领域越来越多样化,采用的技术也越来越先进。
前景是被显示和表达的主体,背景可以理解为主体存在的环境。图像分割是一项主要的图像技术,具有普遍的理论研究和现实使用价值。大量的数字图像处理方法可以用于目标的分割和提取,在计算机视觉、模式识别等范畴应用广泛。图像分割是为了提取有意义的特点区域或需要利用的特点区域,引起很多研究者的注意[6]。
1 算法总体设计
基于试卷的自适应分割算法的实现是针对前景的检测和分离的需要,涉及一些相关的图像处理方法。算法的重中之重是对前景的边缘检测、识别和处理,涉及到的图像处理算法有图像的灰度化、图像二值化、图像增强(拉普拉斯变换)、直线检测及轮廓检测、图像校正(透视变换)等。实现过程中还包括一些求解四边形面积、图像旋转等功能。算法处理流程如图1所示。
图1 算法处理流程
2 算法设计与实现
2.1 图像二值化
二值化实现过程:输入原始图像—图像灰度化—求解阈值—分割图像—输出二值化图像。
OpenCV用C++语言开发集成,重要接口也是C++语言,但它仍有很多C语言接口。这个库另有大量的python、Java等接口[7]。本文采用OpenCV库中的CVtColor函数,将该函数中的code参数设置为CV_BGR2GRAY,实现图像灰度化,再采用用户自己计算阈值的方法对灰度图进行二值化[8]。本文图像灰度化的原理是根据图像RGB三通道的亮度值用不同的权重加权后平均,获得更符合实际的灰度图[9]。计算阈值的方法是先用numpy库中的reshape函数将数字图像转化为一维数组,再通过求其转换数组所有元素的平均值得到阈值。最后用OpenCV 库中的threshold函数进行图像二值化的实现。二值化测试如图2所示。
图2 图像二值化测试
2.2 图像增强
图像增强的实现过程:输入二值化图像-高斯滤波-拉普拉斯变换—输出增强图像。
图像增强是指凸显图像中的主要信息。在图像增强的算法中,直方图均衡化是较常使用的方式,它只会加强原始图像中局部的对比度,对于输入的二值化图像会得到更好更快的处理结果[10]。本文采用高斯滤波去除图像噪声[11],再用拉普拉斯变换和OpenCV库中的ConvertScaleAbs函数实现图像增强。图像降噪用OpenCV 中的GaussianBlur函数实现。在应用高斯滤波函数时定义高斯核的大小为Size(5,5);拉普拉斯变换采用Laplacian函数实现,定义图像深度为CV_16S以避免外溢,Sobel算子的内核大小设置为3;位深转化convertScaleAbs函数可将任意类型的数据转化为CV_8UC1。图像增强可以增加图像的对比度,调节各类参数使图像的线条凸显,便于后续直线检测的需要。图像增强测试如图3所示。
图3 图像增强测试
2.3 直线检测及轮廓识别
直线检测及轮廓识别的实现过程:输入增强图像—图像灰度化—边缘检测—霍夫曼直线检测—绘制线条—输出带轮廓图像。
Hough变换是常用的直线检测算法,其算法的实质是将图像空间中的直线检测问题转化为代数空间中的峰值问题[12]。本文采用OpenCV 库中的Canny函数和Houghlinesp函数检测二值化图像中的线条[13]。用line函数将检测到的直线进行绘制,再通过FindContours函数从图像中得到轮廓数量及对应各个轮廓的属性。对于所需轮廓的提取,需要在检测过程中判断是否为所需的轮廓,即目标轮廓。调节函数参数检测出所有外轮廓,其中,面积最大的轮廓即为实际所需分离的前景,并求出该前景的极值点,即前景的4个顶点[14]。直线检测及轮廓检测测试如图4所示。
2.4 图像校正
图像校正的过程:输入原图像—获取变换前后矩阵位置—生成透视变换矩阵—透视变换—输出校正图像。
本文采用OpenCV 库中的WarpPerspective函数和GetPerspectiveTransform 函数实现图像的透视变换。GetPerspectiveTransform 函数由4对点得到透射变换矩阵,WarpPerspective对图像进行透视变换。
图4 轮廓检测测试
图片进行轮廓识别后未必可以返回实际所需的极值点(前景的4个顶点坐标)。进行图像校正时,本文将需要校正的原图像和旋转一定角度的Hough图像作为参数输入,获得旋转图像中轮廓的4个极值点后进行透视变换,得到校正好的图像。校正后的图像如图5所示。
图5 校正图像
2.5 适宜图像校正角度寻找
适宜图像校正角度寻找的过程:输入带轮廓图像—图像旋转—轮廓检测—获取轮廓极值点及轮廓面积S1—求极值点围成四边形面积S2—记录比值S1/S2—统计比值众数—输出旋转角度。
在图像处理过程中进行轮廓检测最终得到的极值点(前景的4个顶点)有时并不能满足实际需求。本文将原图像按适当比例进行一定角度的旋转来测试其极值点是否为实际所需的前景图像的4个顶点[15]。测试方法为在图像旋转的过程中,利用海伦公式算出轮廓检测的极值点围成的四边形面积,将其与轮廓检测所返回的轮廓面积相比得到一个参数,当这个参数固定不变时,对应的旋转角度即为适宜的旋转角度。在寻找适宜角度的过程中可以发现,适宜图像校正的旋转角度是一个区间范围。
3 结 语
计算机图形学、图像处理技术和人工智能技术的快速发展,使图像前景和背景目标分割技术不断进步。本文源于OCR 自动识别系统中的前景和背景分离的需要,输入扫描或拍摄到包含背景的文本图片,输出为裁剪和旋转校正后的文本图片(不包含背景)。初期算法普适性不强,且对图像输入要求较高,经过后期不断的完善,除了一些干扰较大的图像校正效果不太理想外,整体的功能相对完善,基本可以实现输入和输出的要求,对一些旋转一定角度的图片也可以准确的识别和校正。