本发明涉及机器学习技术领域,尤其涉及基于图像聚类的残缺区域检测,基于生成对抗网络的残缺字符图像恢复方法。
背景技术:
字符是我们与外界沟通的重要媒介之一,人类获取的信息中有90%来源于眼睛捕捉到的画面,而字符无疑是最为重要的信息获取方式,也是我们和其他动物的一个重要的区分。随着计算机技术的发展,用计算机技术捕捉字符图像以及检测识别字符变得越来越成熟。然而,现实生活中,我们常常会遇到字符残缺的现象,一部分是由于在户外场景下,会受到风吹日晒等影响广告牌或者海报等受到破坏,另一方面则是在原有的字符上面被重新打印或者是涂鸦上了字符,使得原本的字符无法很好地辨识,如图1。
技术实现要素:
在现有的技术下,我们很难对这些已经破损的字符进行识别,识别的结果往往和真实的结果相差甚远,因此,本发明的目的是提供一种可用于对原有破损字符图像恢复的方法,方便后续计算机对字符的识别和理解。
本发明首先提出一种对残缺字符进行分割的方法,所述方法包括:
一种残缺字符图像分割方法,其特征在于包括如下步骤:
对原始图像进行二值化处理,将字符部分与背景图像进行区分;
对二值化的图像进行边缘检测,再对边缘检测后的图像进行霍夫变换,获取字符部分的倾斜角,对其进行倾斜矫正;
对倾斜矫正的图像进行竖直方向投影,得到像素级的投影直方图,在投影直方图中寻找合适的阈值对原始图像进行分割,得到单个残缺字符图像。
作为本发明的一种优选技术方案:所述方法还包括:针对光照不均的图像,进行顶帽变换以及局部二值化处理,有效地区分出字符区域和背景图像。
本发明还提出一种图像中字符残缺部分检测方法,其特征在于,对残缺字符图像进行k均值聚类,将每个像素点归属到背景区域、字符区域以及残缺区域其中之一,将字符区域,残缺区域以及背景区域做一个分离,所述残缺区域作为待恢复区域。
本发明提出一种单个残缺字符图像的恢复方法,所述方法包括如下步骤:
首先采集大量完整的单个字符图像,用其训练生成对抗网络wgan,这个网络包括一对生成器和判别器,对于生成器,给定一个输入向量,该生成器可以生成一幅单个字符的图像;对于判别器,给定一幅字符图像,它可以判定是真还是假(或者说真/假的可能性有多大);训练好wgan后,将其生成器和判别器的权值保持固定;
将一个随机给定的向量m输入到全连接神经网络f,得到输入给wgan生成器的输入向量n,通过生成器得到一幅单个字符图像,将这幅图像与待恢复的单个残缺字符图像进行比较,计算两者除去单个残缺字符图像待恢复区域以外的均方误差作为第一部分的损失函数;
将通过生成器生成的图像与单个残缺字符图像进行融合,在残缺字符图像待恢复区域填补上对应位置生成的图像,将融合后的图像送入判别器,得到是否是假的概率,作为第二部分损失函数;
将两部分的损失函数做加权和,作为整体的损失函数,通过梯度下降法优化全连接神经网络f的权值,通过多次迭代优化得到最终融合图像。
作为本发明的一种优选技术方案:所述方法还包括:在开始的时候随机生成一组向量{m},选取损失函数最小的向量作为最终的m并且保持固定,优化迭代的时候只优化全连接神经网络f的权值。
相比于现有技术,本发明技术方案通过先进行倾斜矫正再进行字符分割的方式能更好的对文本行进行分割;本发明技术通过聚类的方式能自适应地寻找图像中的字符残缺区域;本发明技术采用wgan对字符残缺区域进行填充处理,得到的填充效果更好,从而提升对破损的字符进行识别效果。
附图说明
图1是在原有字符基础上被印上其他字符的图像;
图2是分割后的单个字符图像;
图3是聚类后的单个字符图像;
图4为恢复后的样例图;
图5为wgan的结构示意图;
图6为本发明整个算法的流程示意图;
图7为字符分割的示意图。
具体实施方式
下面结合实施例及附图,对本发明技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明的保护范围。
实施例一
·字符图像数据集
本实例的数据集来自于工业场景中喷码到酒箱上的图像,为了得到破损的图像,我们对原有完整图像进行污染处理,使最终得到的图像会有不同程度破损,如图1
·实验环境
本实验在ubuntulinux16.04的服务器上进行,所需要的环境为python3.5以及pytorch0.4.0,opencv3.4.0
对残缺字符进行补全的方法流程如图6,具体包括以下步骤:
1.用大量的单个字符的图像训练wgan
收集获取大量的与恢复任务相关的单个字符图像,将其缩放至到64×64的尺寸,输入至wgan的模型中训练,wgan的结构示意图如图5,通过迭代优化wgan的目标函数,得到生成单个字符图像能力较好的生成器以及判别真假能力较好的判别器,优化的目标如下:
其中,d表示判别器,g表示生成器,x表示图像,pdata表示原始图像的集合,pg表示生成图像的集合,下标分别表示从原始图像集合中得到图像x和从生成的图像集合中得到图像x,e[·]表示求期望。
2.图像中字符的分割
整个字符分割的流程如图7所示
读取残缺字符的图像,通过顶帽变换以及局部二值化的方法将原始图像二值化,消除光照不均匀等因素的干扰。
对于二值化后的图像用canny算子进行边缘检测,提取得到图像的边缘,再对边缘图像进行霍夫变换,获取最长直线的倾斜角度(即图像中字符区域的倾斜角),通过旋转变换对其进行倾斜矫正。
对进行倾斜矫正后的二值化图像进行竖直方向的像素投影,如图7的投影直方图所示,寻找合适的阈值(使图像中的所有字符分开即可)对图像进行切分得到单个字符级别的残缺图像。
分割后的单个残缺字符图像如图2所示。
3.查找图像中待恢复区域
通过k均值聚类的方法将各单个残缺字符图像中的像素粗略地划分成三个簇,分别是字符区域,即残缺区域以及背景区域。聚类的优化目标是最小化各个类的平方误差:
其中k表示聚类的类别数目,ck表示第k个簇,x表示来自ck的某个像素点,uk表示第k个聚类均值向量
方法如下:
1)先随机设定3个点作为初始聚类中心
2)将每个点指派到最近的聚类中心,形成3个簇
3)重新计算每个簇的聚类中心
4)循环进行2)和3)操作,直至每个簇不发生变化或者达到最大迭代次数
如图3所示,最终我们可以获得3个簇分别为背景区域,字符区域以及残缺区域,残缺区域即单个残缺文字图像的待恢复区域。
4.对单个字符的残缺图像进行恢复
将3中检测到的残缺区域记为m,1-m为其他区域;
构建一个全连接神经网络记为f,其输入向量维数为||m||,其输出向量的维数与wgan生成器的输入向量维数相同都为||n||;
以下是残缺图像恢复方法的流程:
1)随机初始化一组向量{m}作为全连接神经网络f的输入
2)每个向量m通过f后得到对应的向量n作为wgan生成器g的输入
3)向量n通过生成器g后,得到一幅生成的单个字符图像记为b,待恢复的单个残缺字符图像记为a
4)比较a和b除去残缺区域部分的均方误差作为第一部分的损失函数l1,
用于比较两幅图像的相似程度
l1=mse((1-m)a,(1-m)b)
其中mse表示均方误差函数:
其中,xi,yi分别表示图像x的第i个像素和图像y的第i个像素,n代表图像中所有的像素点个数。
5)将b中对应着a的残缺部分的图像和a的其他部分图像融合成一幅完整的图像记作c
6)将融合的图像c输入wgan的判别器d,计算c为假图像的概率作为第二部分损失函数l2
l2=bce(d(c),0)
其中bce为二值交叉熵函数
7)将两个损失函数求加权和l,寻找{m}中使总的损失最小的m作为最终输入给全连接神经网络f的向量
l=l1+l2
8)将l反向传播到全连接神经网络f中,通过梯度下降的方法优化f,重复步骤2)~7)直至l不再变化或者达到最大迭代次数,得到最终融合图像,如图4。