TFR 算法的身份证照图像处理方法
2020-04-03兰红黄敏
兰红, 黄敏
(江西理工大学信息工程学院,江西 赣州341000)
0 引 言
二代居民身份证及其他证件照需符合标准格式, 《中华人民共和国第二代居民身份证数字相片技术标准》[1]对相片图像文件给出了具体要求。以往进行证件照拍摄, 需要前往照相馆, 或借助Photoshop 等工具进行图像处理,费时耗力,成本较高。虽然有些软件已有将普通相片自动处理成较正式的相片的功能,但是处理效果还达不到身份证证件照的要求,而且目前直接将所拍相片自动处理成符合身份证相片的相关文献较少。
针对以上问题,文献[2]提出了基于Sobel 边缘检测算子对证件照进行轮廓识别的Android 平台证件照拍摄处理一体化解决方案,该方案能够满足普通单人照的处理与制作需求, 如简历上的相片,但是无法达到公民二代证的证件照要求。 文献[3]提出了一种基于人脸检测的批量证件照并行自动裁剪方案,该方案能够将大批量非证件照裁剪成符合各种要求的标准证件照,但是侧重于证件照的裁剪并未对相片进行内容处理,如遇到背景色不符合规定的相片则无法将之处理成合格身份证照。
文中提出了TFR 算法的身份证照图像处理方法,TFR 算法融合了头顶距裁剪算法 (简称T 算法)、改进的FloodFill 算法(简称F 算法)和均值RGB 换肤算法(简称R 算法)。 TFR 算法分三步对相片进行处理:第一步,针对身份证照中头像大小及位置要求,提出了T 算法,将不合格相片根据身份证照要求进行图片裁剪;第二步,针对身份证照的纯白色背景要求,提出了F 算法,将裁剪好的相片用该算法将身份证照背景色替换成纯白色背景;第三步,针对身份证照中人脸的肤色要求,提出了R 算法,使身份证照中人脸的肤色达到证件照的要求。
1 头顶距裁剪T 算法
标准[1]中对相片中头像大小及位置要求如下:人像在相片矩形框内水平居中,脸部宽(207±14) px,头顶发迹距相片上边沿(简称为头顶距)7~21 px,相片下边缘以刚露出锁骨或者衬衣领尖为准。文献[3]中提出的裁剪算法列出了根据证件照的高宽比来进行裁剪, 其中人在相片中的位置要求并未详细说明。文中提出了一种基于头顶距的图像裁剪算法T算法,对不符合标准[1]中对头像大小及位置要求的相片进行裁剪,使之符合标准。
1.1 参数定义
1)设定二代标准证件照参数
宽Ws=358 px,高Hs=441 px。
2)定义可变参数
Wsf:标准照中人脸宽度像素值,Yst:标准照中头顶距;
Xf:人脸区域左上角的横坐标,Wf:人脸区域的宽度。
1.2 头顶定位
设Ia表示裁剪前图像,头顶定位算法的设计目的就是求取头顶距Yt,算法描述如下。
Input:Ia//原始图像
Output:1)Yt//头顶距
2)Ib//标记头顶距图像
处理过程:
1)读取原始图像:read(Ia);
2)将图像Ia转换成灰度图Ig;
3)去除噪声,使用图像金字塔对灰度图Ig进行去噪处理,得到没有噪声的图像In;
4)边界识别,使用Canny 算子对图像In进行边界识别,得到边界图像Ie;
5)遍历获取头顶距参数Yt;
6)根据头顶距参数在原始图像Ia作出标记,生成图像Ib。
1.3 图像缩放
根据Ia的人脸区域宽度Wf和标准照人脸区域宽度Wsf可得到一个缩放比Rp:
将Ia用缩放比Rp整体缩放为人脸宽度满足标准照要求的Ic,此时Ic的人脸区域左上角的横坐标变为X′f,头顶距变为Y′t:
基于图像Ic, 根据裁剪点P 的坐标以及Ws和Hs裁剪图像,得到图像Id。 其中P 点坐标的求取如公式(4)、公式(5)所示,其中Xp代表横坐标,Yp代表纵坐标。
1.4 算法效果
图1 中给出了4 幅图(文中图像都随机选取于网络), 分别表示输入时不合格图像(裁剪前图像Ia)、经过头顶定位算法获得的图像(头顶定位图像Ib)、按照图像缩放比Rp缩放后得到的图像(缩放图像Ic)以及通过完整的裁剪算法输出的图像(裁剪后图像Id)。图1(a)图片尺寸过大、含有不均匀蓝色背景且图片像素为1504×1000 px;图1(b)中人像头顶红色横线是图1(a)经过头顶定位算法标注出来的;图1(c)经过缩放后像素变为752×500 px;图1(d)是在图1(c)基础上裁剪后得到的,满足标准[1]中对图片的长宽规格358×441 px。
图1 裁剪算法图像
2 改进FloodFill 的F 算法
图1(d)的Id满足标准[1]中的头像大小及位置要求,以及图像文件要求中的图像长宽规格,但Id中存在不均匀的背景颜色,不符合标准[1]中背景色为白色的要求。因此,对Id进行背景色处理,将其不均匀的蓝色背景替换成均匀的白色背景。 采用FloodFill 算法进行背景替换。
2.1 FloodFill 算法介绍
FloodFill 算法又称泛洪算法, 属于一种特殊的深度优先遍历算法, 采用了水流从水源近处流向远处的原理[4-6]。 应用于图像处理中,就是自动选中和种子点相连的区域, 接着将该区域替换成指定的颜色[7-9]。
定义一个种子点seedPoint 和一个掩膜mask,当邻域和种子点像素相差在[-loDiff,+upDiff]的时候就用newVal 来填充这个点。 其中seedPoint、mask、loDiff、upDiff 和newVal 都是FloodFill 算法的自定义参数。 直接调用FloodFill 算法处理图像会导致人像部分被填充(过填充)或者背景未被完全填充(欠填充),单纯使用FloodFill 算法无法达到预期效果,尤其是背景复杂的情况。 本文针对要处理的图像,对FloodFill 算法进行了一些改进,在它基础上增加了图像预处理步骤, 并且与Canny 算子相结合使用, 使得该算法能够更好的实现想要的效果。
2.2 改进的FloodFill 算法背景替换
为了使FloodFill 算法的效果达到:①图像背景色被完全填充为白色; ②人像部分不能填充破坏。文中对待处理图像进行了图像预处理,具体步骤如图2 所示。
图2 F 算法流程
设读入图像为f(x,y),对图像进行高斯滤波得到g(x,y),计算公式为:
对图像g(x,y)进行灰度转换,运用文献[8]中的灰度转换公式,得到灰度图G(x,y),其计算公式为:
利用金字塔算法对灰度图G(x,y)进行缩放,其中P′(x,y)为缩小过程,P(x,y)为放大过程,从而去除噪声,算法公式为:
用形态结构元素B 对无噪声图P(x,y)作形态学闭运算,得到预处理后的图像E(x,y):
E(x,y)=close[P(x,y),B]= erode{dilate[P(x,y),B],B} (10)
2.3 算法效果图
以图1(d)中的Id为实验图像,图3(a)是使用未改进的FloodFill 算法处理图像的效果图。 图3(a)中矩形标记出的区域也被填充为白色, 处理效果不理想, 这是由于人耳的耳垂部分有一个由凸变凹再变凸的形态学渐变。图3(b)是经过改进的FloodFill 算法处理后的效果图,处理效果达到要求。
图3 F 算法替换背景效果对比
3 均值RGB 换肤R 算法
原始相片经过裁剪和替换背景后可得到如图3(b)所示的效果图,已基本满足二代证的要求,但是因为人脸肤色偏蓝,不满足“二代身份证检测平台”肤色条件。因此,还需对相片中人像进行肤色调整。 文中提出的R 算法,首先根据大量合格相片人脸区域求取RGB 像素平均值, 确定最佳人脸RGB 值; 然后计算肤色不合格相片人脸区域平均RGB 值,根据不合格相片人脸平均RGB 值和最佳人脸RGB 值的差值,对不合格相片的RGB 值进行均衡化处理,达到调整肤色的目的。
均值RGB 肤色调整算法描述如下:
Input : If//输入图像(肤色不合格)
Output: Ig//输出图像(肤色合格)
处理过程:
Step1:GetFaceRGB; //根据获得的参数计算出输入图像脸部区域平均的RGB 值
for (int i=x;i<w;i++)//脸部区域宽度遍历
for (int j=y;j<h;j++) //脸部区域高度遍历
//分别求取脸部区域RGB 像素点均值。
TotalR+=R[i][j]; TotalG+=G[i][j]; TotalB+=B[i][j];AR=TotalR/(w*h); AG=TotalG/(w*h); AB= TotalB/(w*h);
Step2:GetPassRGB; //利用Step1 的求均值方法, 选取大量合格图片的脸部图像求得AR、AG、AB, 再求和取均值获得最佳脸部平均RGB 值PR、PG、PB。
Step3:Get Difference value; //计 算 差 值R=PR-AR、G=PG-AG、B=PB-AB。
Step4:ReplaceRGB; //将If每 个 像 素 遍 历 判断,根据差值改变人像的RGB 值。
Step5:Write(Ig); //将改变RGB 值后的图像写入图像Ig并输出
将图4(a)按上面R 算法进行图像处理,即可得到肤色合格的相片,如图4(b)所示。
图4 肤色调整对比
4 实验效果分析
4.1 有效性与实用性实验
为了验证本文算法的有效性与实用性, 算法是在Window10 操作系统平台上,采用Visual Studio[10]工具,使用C# 语言[11-12]和EmguCV[13-14]封装类库相结合[15]实现的。文中随机选取了100 张不符合标准的普通相片(包括相机、手机、电脑等常见设备拍摄的照片),以其中的3 张为例,运用本文改进的身份证照图像处理方法处理这些相片,处理效果如图5~图7 所示。
图5(a)和图6(a)所示为相机拍摄相片,而图7(a)所示为用手机拍摄的相片,它们都不符合二代居民身份证的标准。通过本文身份证照图像处理方法处理,分别得到图5(b)~图7(b)效果图。
将处理好的图片上传至“赣州市第二代居民身份证相片检测平台”,返回结果如图8 所示,图8 右侧显示的所有文件均是通过本文方法处理后的图片,返回结果基本都是合格,但背景过于复杂的相片无法处理成合格身份证照,成功率为95%。 证明了本文算法的有效性,可以将不合格相片处理成合格的身份证照。
4.2 对比性实验
为了验证本分算法的创新性, 分别和文献[2]、文献[3]以及现有市场上的一些证件照制作软件进行处理效果对比。 为了保证一致性和公平性,采用4.1 节随机选取的100 张不合格相片作为待处理相片,分别使用各证件照处理方法进行处理效果对比试验,得到表1 所示的对比结果。
图5 相机照片男性处理结果
图6 相机照片女性处理结果
图7 手机照片处理结果
图8 证件照合格结果
表1 实现结果对比表
根据不同的方法得出的实验结果,对其处理的照片不合格进行了原因分析:文献[2]提出的算法仅对相片进行了压缩和简单背景替换,未对相片进行二代证件照标准裁剪和肤色处理;文献[3]提出的算法仅对相片进行了标准化裁剪,未对相片内容进行处理(如肤色处理);智能证件照APP 单纯去除背景以及对头部占图片尺寸进行限制处理,未对头顶距及人脸宽度等细节做限制处理;电子证件照制作APP 符合标准[1]中的大部分规定,但头顶距过大达不到7~21 px 的要求。由于通过以上算法或软件处理后生成的证件照都无法满足标准[1]中的所有条件,因此导致所有处理后的相片都不合格。最美证件照制作APP 和证件照研究院APP 只能对手机拍摄的相片进行处理,其他设备(如相机)拍摄的相片无法处理, 由于待处理照片中存在大量非手机拍摄相片,导致它们的合格率都未超过50%。 本文处理算法对于一些背景太过复杂,或者女性头发过于缭乱的相片, 本文提出的F 算法还无法完美的处理,因此无法达到100%的合格率, 需要后序进行改进。但是对背景相对简单、头发不过于缭乱的相片处理效果良好。
5 结 论
为了将不合格相片处理成合格身份证照,提出了基于3 种算法的身份证照图像处理方法,共分为3 个具体步骤来处理不合格相片:图片裁剪、背景替换和肤色调整。每个步骤根据面临不同的问题都提出了解决办法以及相应的算法,并且成功地实现了将不合格相片处理成合格的身份证照。但是本文算法还存在的不足之处:F 算法对相片背景相对复杂、头发过于缭乱等情况处理效果不佳,需要改进。本文主要通过二代居民身份证的证件照为例来实现,其他证件照更加容易处理,由于其他证件照的要求没有二代居民身份证的严格,可以从本文中删减一些步骤来处理不合格相片。运用本文的流程和算法处理相片,能够快速批量的自动生成合格证件照,能够替代传统实体照相馆作用,降低了人力资源消耗,节省用户大量的时间和体力成本,具有非常好的实用性和现实意义。