朱玉强 范翠丽
摘 要 为解决原文传递业务中使用手机拍摄所得文本图像的倾斜、畸变等问题,在使用铁架台固定手机采集图像环境下,使用Python及其第三方图像处理库编制程序,对采集图像进行批量自动几何校正,在拓展手机摄像头扫描功能的同时提升了读者阅读体验,取得较好效果。
关键词 文本图像 几何校正 原文传递 图像处理
分类号 G255.1
DOI 10.16810/j.cnki.1672-514X.2021.06.009
Abstract In order to solve the problems of skew and distortion in the text image captured by mobile phone in the original text transmission business, Python and its third-party image processing library are used to program the collected images in batch under the environment of fixed mobile phone image acquisition with iron frame platform, which can expand the scanning function of mobile phone camera and improve readers reading experience, and achieve good results.
Keywords Text image. Geometric correction. Original text transmission business. Image processing.
图书馆文献传递工作中,“复制——非返还”型业务以传递电子文献为主。由传统纸质文献转为电子文献,大多借助扫描仪完成,其优点为数据质量统一、资料平整清晰,缺点为扫描耗时长、工作效率偏低。随着智能手机日益普及及手机摄像头像素越来越高,文献传递员遇到用户“只想看一眼,不用多高清”的需求时,可以用手机随手拍发给用户,快速便捷,缺点为成像距离不同、易倾斜易畸变等。本文通过编制程序,自动批量校正手机拍摄文本图片,兼顾手机拍照的便利性与扫描仪成像的易读性,有助于提高图书馆文献传递员工作效率和读者体验。
1 研究背景
传统平板式扫描仪成像质量高但效率偏低,價格相对昂贵,低价位设备大多需连接电脑工作。便携式扫描仪携带方便,工作速度一般高于平板式扫描仪,但画质稍逊。高拍仪价格及成像质量介于平板式扫描仪与便携式扫描仪之间,一般自带图片倾斜旋转功能,但也需连接电脑才能工作。上述3种扫描仪平均像素基本都高于手机平均像素,成像质量也高于手机拍照质量。
已知华为、小米、VIVO、苹果、魅族、flyme等手机原生内置“文档校正”(或“文档矫正”等类似叫法)功能,即用户拍照后,内置软件可自动或半自动校正图片倾斜、梯形或桶形畸变等[1]。另有很多运行于Android或IOS平台的第三方App,主打扩展手机摄像头扫描功能,如“扫描全能王”“全能扫描王”“扫描文件全能王”[2],“vFlat”等实现了“文档校正”功能[3]。不以扫描为主打功能但带有“文档校正”功能的第三方App还有印象笔记等[4]。上述手机或App每当用户拍摄完毕即弹出窗口提示交互操作,一般不支持批量自动处理图片,不方便处理大宗相同或近似质量文档。
“文档校正”功能属于图像处理范畴,其核心原理为在原图中计算并划定待处理像素点,遍历各点,根据一定算法将各点映射到理想图片中坐标点并重排构建,使用一定算法自动生成像素点填充理想图片中可能出现的“孔洞”。束彩炜以验证有效的图像几何校正算法编写程序,应用于Android智能手机,实现了图像校正功能[5]。刘铃等使用Harris角点检测方法对扫描后倾斜的文档进行校正,取得良好效果[6]。王兆亮基于Snakes模型对中文扭曲文档图像进行校正,提升了校正后OCR文字识别率[7]。罗晓萍利用向上优先区域生长法搜索行间留白的文档图像,分割得到弯曲行图像,进而拆分并重新拼接为校正后的新图像[8]。冯雷使用hough变换对倾斜文档图像快速校正,提高了分割和识别精度[9]。何希平等提出一种倾斜校正算法实现图像旋转变换,同时解决由于整数运算所造成的“锯齿”现象[10]。曾凡锋等根据形态学特征在复杂版面中定位文本行、提取文本线,以文本线为基准进行校正并重构图像[11]。向世明等针对积厚文档不能紧贴于扫描平面导致出现黑色阴影及文本扭曲现象,采用分块自动阈值算法去除阴影,通过估计的几何参数和分片四边形映射方法纠正扭曲,取得较好效果[12]。
本文利用智能手机,充分拓展摄像头扫描的功能,基于Python并利用其效率较高的第三方图像处理库编程[13],对手机拍摄文本图像进行批量自动几何校正,并将其应用于图书馆原文传递业务,取得了良好效果。
2 程序设计思路及实施方案
系统总体目标为将使用智能手机拍摄的、具有相同或相似质量的文本型图片自动批量校正并个性化,实现图片旋转、畸变校正、亮度对比度调整、加水印、转PDF、文字识别等功能。为获取大致相同质量的图片数据,本文模拟高拍仪摄像头布局方案,将智能手机固定于铁架台上,使手机屏幕朝上平行于铁架台底座,启用后置摄像头方便取景,用户可单击触摸屏或另接自拍杆使用物理按键拍摄。系统由图像采集、同步电脑、图像处理3层结构组成,如图1所示。图像采集由智能手机拍摄完成;同步电脑模块将手机图片导入电脑;图像处理为核心模块,实现自动校正等个性化功能。
3 关键方法与技术
3.1 旋转图片
所拍摄图片往往存在不同角度的倾斜,可使用“霍夫变换”检测图片中直线[14],通过求直线斜率得到旋转角正切值,使用反三角函数计算旋转角,自动旋转实现校正。Python核心算法如下:
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) # 将BGR格式图片转为灰度图片
edges = cv2.Canny(gray,50,150,apertureSize = 3) # 使用Canny算子獲取图片边缘
lines = cv2.HoughLines(edges,1,np.pi/180,0) # 使用霍夫变换检测直线
for p,e in lines[0]:
a = np.cos(e)
b = np.sin(e)
x0 = a*p
y0 = b*p
x1 = int(x0 + 1000*(-b))
y1 = int(y0 + 1000*(a))
x2 = int(x0 - 1000*(-b))
y2 = int(y0 - 1000*(a))
tg = float(y2-y1)/(x2-x1) # 求直线斜率,即旋转角正切值
r_angle = math.degrees(math.atan(tg)) # 取反正切值得旋转角
如图2所示,倾斜图片经程序自动顺时针旋转约3度已被校正,右图中铅垂线为程序自绘霍夫线。为突出效果,保留了图片旋转后的黑色背景,实际工作中将黑色替换为白色、再使用三方库PIL的im.crop方法剪切边界可提升读者体验。
3.2 切割双面拍摄图片为单面
原则上将双面图片折半处理即为单面图片,为精确切割,先使用3.1所述方法按需旋转图片,再使用“最小面积外接矩形法”取各单页轮廓,按取回矩形的四个角点坐标进行精准切割。Python核心算法如下:
m, n = cv2.threshold(cv2.cvtColor(img, cv2.COLOR_BGR2GRAY), 127, 255, cv2.THRESH_BINARY) # 二值化图片
o, h = cv2.findContours(n, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) # 找图片轮廓
for c in o:
r = cv2.minAreaRect(c) # 找最小区域
b = cv2.boxPoints(r) # 算最小面积矩形坐标
b = np.int0(b)
cv2.drawContours(img, [b], -1, (0, 255, 0), 2) # 绘矩形
处理结果如图3所示,双面拍摄的图片上已绘制两个矩形外框,取各矩形顶点坐标,使用三方库PIL的im.crop方法各自剪切成单面文档即可。
3.3 梯形图片自动校正
将手机摄像头利用铁架台、自拍杆等辅助工具支撑好,使之与被拍摄纸张平行,可有效防止图片出现梯形畸变。算法原理为,取原图四个角点坐标,计算各角点在校正后理想图片中映射位置,并将原图四个角点内部各像素点逐一填补到校正后图片中。核心代码如下:
point1 = np.array([[150,100],[418,108],[0,512],[404,573]],dtype = "float32") # 原图四角坐标:左上/右上/左下/右下
point2 = np.array([[0,0],[295,-25],[0,500],[380,510]],
dtype = "float32") # 欲调整图片四角坐标M = cv2.getPerspectiveTransform(point1,point2) # 透视变换核心命令一
out_img = cv2.warpPerspective(img,M,(w,h)) # 透视变换核心命令二
如3.2所述,图片四个角点坐标可通过cv2.minAreaRect()“找最小区域”的方法获得,取回矩形不唯一时,最大外轮廓四个角点坐标可通过各矩形轮廓角点加和求出,此不赘述。梯形校正效果如图4所示,可再用PIL的im.crop方法进一步剪切。
3.4 桶形图片自动校正
桶形畸变属径向畸变之一种,畸变沿透镜半径方向发生。如所拍摄资料过厚,拍照时书页未被压实,图片容易出现桶形畸变。自动校正原理为,忽略切向畸变和离心畸变,仅考虑径向畸变,使用以下公式计算原图片像素点与校正后图片像素点对应关系:
其中,r2=x原2+y原2,k1、k2、k3为径向畸变系数。本文忽略k2和k3对结果影响(影响非常小),使用Matlab仿真得到k1值。对于相同手机、拍摄位置固定的情形,k1值为同一常数。灰度校正采用最邻近插值法,“孔洞”填充采取8领域内均值滤波。桶形校正后,可按3.3所述方法再进行一次梯形校正,效果如图5所示。虽未被完全“平整化”,但已基本达到文献传阅需求,可再用PIL的im.crop方法进一步剪切。
3.5 个性功能
程序可实现个性功能,如文字识别、加水印、转PDF、亮度对比度调节等。在Python中,可通过三方库pytesseract调用Tesseract-OCR,利用经过训练的语言包(*.traineddata文件)进行中英文、数字识别;可通过三方库PIL的draw.text方法添加文字水印;可通过三方库fitz和pymupdf将JPG批量转PDF;可通过三方库matplotlib调节图片亮度与对比度;可通过三方库selenium操作http://send.firefox.com网页,后台静默上传生成的PDF文档并自动生成下载链接供读者使用等,此不赘述。
4 应用效果评价
程序主体使用Python编写,过程调用了Matlab仿真结果,各模块可稳定运行于32位和64位Windows7和Windows10操作系统。文中图片除图1外均使用三星GT-I9118单一后置摄像头拍摄,摄像头参数为500万像素,图像尺寸平均2560像素宽、1920像素高,水平与垂直分辨率均为72DPI,位深度为24。旋转图片、切割双面图片功能对不同批次作业通用,无需调整任何代码段;梯形图片与桶形图片校正功能,需根据所拍摄图片微调部分参数,自动化率不低于95%。抽检自动处理后图片,根据图像评价的5分制“全优度尺度”[15],图片合格率不低于98%。
“复制——非返还”型原文传递业务需要扫描速度快、成像质量适中的扫描工具及图像处理软件,本文拓展智能手机摄像头功能作扫描仪用,编制程序自动批量校正手机拍摄图像,基于原文传递业务需求提供加水印、转PDF等个性化功能,实践表明程序处理后图片可基本平衡大部分原文传递业务对工作时间和阅读体验需求,自动化程度高,具有推广性。然而程序对梯形和桶形图像的处理尚未实现全自动,仍需人工微调少量參数,尚待完善。
参考文献:
阿里巴巴(中国)网络技术有限公司.手机_淘宝
搜索[EB/OL].[2020-07-05].https://s.taobao.com/search?q=%E6%89%8B%E6%9C%BA&imgfile=&js=1&stats_click=search_radio_all%3A1&initiative_id=staobaoz_20200704&ie=utf8.
百度在线网络技术(北京)有限公司.百度手机助手,安卓软件,安卓游戏,下载[EB/OL].[2020-07-05].https://shouji.baidu.com/s?wd=%E6%89%AB%E6%8F%8F&data_type=app&f=header_all%40input.
小众软件.vFlat —会弯曲校正、移除手指头的纸质书籍扫描仪(Android)[EB/OL].[2020-07-05].https://www.appinn.com/vflat-book-scanner-for-android/.
北京印象笔记科技有限公司.一站式完成知识信息的收集备份、高效记录、分享、多端同步和永久保存[EB/OL].[2020-07-05].https://www.yinxiang.com/product/main/.
束彩炜.基于智能手机的多视角文档图像几何校正[D].南京:南京邮电大学,2019.
刘铃,陈立峰,彭向前.基于角点检测的倾斜文档校正[J].机电信息,2019(27):136-137,139.
王兆亮.基于Snakes模型的中文扭曲文档图像校正技术研究[D].北京:北方工业大学,2017.
罗晓萍.基于行间留白的文档图像校正方法[J].计算机工程,2017,43(4):277-280,286.
冯雷,耿英楠.基于hough变换的倾斜文档图像快速校正[J].内蒙古师范大学学报(自然科学汉文版),2017,46(2):219-222.
何希平,李云峰,朱庆生.彩色文档图像的倾斜自动校正算法[J].中国图象图形学报,2006(3):367-371,297.
曾凡锋,段漾波.一种复杂版面扭曲文档图像快速校正方法[J].计算机应用与软件,2016,33(6):172-175,286.
向世明,赵国英,陈睿,等.积厚文档扫描图像校正[J].计算机辅助设计与图形学学报,2005,17(1):42-48.
深圳华秋电子有限公司. Python中最常用十大图像处理库详细介绍[EB/OL].[2020-07-05].http://m.elecfans.com/article/986147.html.
DUDA R O , HART P E. Use of the hough transform to detect lines and curves in pictures[J]. ACM Community Management,1972,15(1):11-15.
一牛网.图像质量评价的两个方法_一牛网[EB/OL].[2020-07-05].http://bbs.16rd.com/blog-32023-2989.html.