检查字形轮廓是否变形的方法及装置
技术领域
本发明涉及文字处理技术,尤其涉及一种检查字形轮廓是否变形的方法及装置。
背景技术
字库是外文字体、中文字体以及相关字符的电子文字字体集合库,被广泛用于计算机、网络及相关电子产品上。在对字库进行更新后,需要对更新后的字库进行质检。
现有技术中,在对文字进行质检时,首先使用软件自动对文字进行修正。例如曲线端点与控制点是否重合,控制线位于曲线异侧,控制线交叉等。对于字库中出现的这些问题,都需要通过加点或减点进行处理。同时,在处理的过程中,需要保持原来的字形轮廓不发生改变。为了检测字形轮廓是否发生变化,需要在软件处理完成后,由工作人员对修正后的文字轮廓进行检测,查看修正后的文字轮廓是否发生了改变。
但是,现有技术中通过人工检测文字轮廓是否发生变化的方式需要消耗大量的人工成本,而且容易出错,因此现有技术中对文字轮廓是否发生改变的检测方式效率较低。
发明内容
本发明提供一种检查字形轮廓是否变形的方法及装置,通过将字形转换为字形图像,再通过比对字形图像中包括的像素是否相同,能够准确的判断出第一字形与第二字形的轮廓是否相同,能够自动检查更新前以及更新后的字体轮廓是否一致,从而提高检测字形是否变形的效率。
本发明的第一个方面是提供一种检查字形轮廓是否变形的方法,包括:获取更新前的第一字形和更新后的第二字形,根据所述第一字形和所述第二字形分别生成像素大小相同的第一字形图像和第二字形图像;
根据所述第一字形图像中包括的第一像素信息、所述第二字形图像中包括的第二像素信息,确定所述第一字形图像与所述第二字形图像的差异信息;
根据所述差异信息确定所述第一字形与所述第二字形的轮廓是否相同。
本发明的另一个方面是提供一种检查字形轮廓是否变形的装置,包括:
获取模块,用于获取更新前的第一字形和更新后的第二字形;
生成模块,用于根据所述第一字形和所述第二字形分别生成像素大小相同的第一字形图像和第二字形图像;
确定模块,用于根据所述第一字形图像中包括的第一像素信息、所述第二字形图像中包括的第二像素信息,确定所述第一字形图像与所述第二字形图像的差异信息;
所述确定模块还用于根据所述差异信息确定所述第一字形与所述第二字形的轮廓是否相同。
本发明提供的方法及装置的技术效果是:
本实施例提供的检查字形轮廓是否变形的方法及装置,包括获取更新前的第一字形和更新后的第二字形,根据第一字形和第二字形分别生成像素大小相同的第一字形图像和第二字形图像;根据第一字形图像中包括的第一像素信息、第二字形图像中包括的第二像素信息,确定第一字形图像与第二字形图像的差异信息;根据差异信息确定第一字形与第二字形的轮廓是否相同。本实施例提供的方法,通过将字形转换为字形图像,再通过比对字形图像中包括的像素是否相同,能够准确的判断出第一字形与第二字形的轮廓是否相同。采用本实施例提供的方法及装置,能够自动检查更新前以及更新后的字体轮廓是否一致,从而解决现有技术中通过人工检测文字轮廓是否发生变化的方式需要消耗大量的人工成本,而且容易出错,导致检测效率较低的技术问题。
附图说明
图1为本发明一示例性实施例示出的检查字形轮廓是否变形的方法的流程图;
图2为本发明另一示例性实施例示出的检查字形轮廓是否变形的方法的流程图;
图3为本发明一示例性实施例示出的检查字形轮廓是否变形的装置的结构图;
图4为本发明另一示例性实施例示出的检查字形轮廓是否变形的装置的结构图。
具体实施方式
图1为本发明一示例性实施例示出的检查字形轮廓是否变形的方法的流程图。
如图1所示,本实施例提供的检查字形轮廓是否变形的方法,包括:
步骤101,获取更新前的第一字形和更新后的第二字形,根据第一字形和第二字形分别生成像素大小相同的第一字形图像和第二字形图像。
其中,将更新前和更新后的字库安装在检测系统中。检测系统可以是计算机系统。字库还包括字库名称,而且每个字库有唯一的名称,各个字库名称不重复,因此能够根据字库名称确定出唯一的字库。具体的,字库中包括多个字形,且每个字形都具有唯一的编码,可以用数字作为字形编码,例如,1可以代表“啊”。因此,可以通过编码确定出字库中的字形。
具体的,可以将本实施例提供的方法封装为软件,安装在检测系统中,从而使用户能够采用本实施例提供的方法检查更新前以及更新后的字库中字体轮廓是否发生变形。
进一步的,若仅检查一个更新后字形的轮廓是否发生变形,可以直接将更新前的字形和更新后的字形导入检测系统中。若是针对整个字库中的多个字形进行检测,则可以先将更新前、后的字库安装到检测系统中,再根据字库名称指定更新前的字库以及更新后的字库,再从中分别获取编码相同的更新前的第一字形和更新后的第二字形,再对第一字形和第二字形进行检测。
一般来说,字库中的字形是矢量图形,可以将矢量图形转换为位图图形。具体可以采用现有技术的方案将矢量图形转换为位图图形,从而得到与第一字形对应的第一字形图像,与第二字形对应的第二字形图像。为了能够准确的确定出两个字形轮廓是否发生变化,可以在生成字形图像时,生成像素大小相同的第一字形图像和第二字形图像,再比对像素大小相同的这两个字形图像。
另外,若字库中包括的字形本身就是位图图像,则可以获取更新前字库中的第一字形和更新后字库中的第二字形,并将第一字形确定为第一字形图像,第二字形确定为第二字形图像。
实际应用时,若第一字形的位图图像与第二字形的位图图像的像素不同,则可以对两个图像进行归一化处理,得到像素相同的第一字形图像和第二字形图像。
步骤102,根据第一字形图像中包括的第一像素信息、第二字形图像中包括的第二像素信息,确定第一字形图像与第二字形图像的差异信息。
实际应用时,第一字形图像中包括第一像素信息,第二字形图像中包括第二像素信息,可以对比第一像素信息和第二像素信息,从而确定出两个字形图像的差异。可以从第一字形图像中提取出第一像素信息,从第二字形图像中提取出第二像素信息。
其中,像素信息包括位置以及像素值,位置是指在字形图像中的位置。可以根据第一像素信息以及第二像素信息,逐一对比两个字形图像中相同位置的像素值,若每个位置的像素值都相同,则可以判断两个字形轮廓相同。例如,可以将第一字形图像中的像素值确定为P(i1,j1),第二字形图像中的像素值确定为Q(i2,j2),比对P(i1,j1)与Q(i2,j2)是否相同,其中,i1=i2,j1=j2,i、j用于表示像素位置。
具体的,若两个字形图像中相同位置的像素值不同,则可以进一步的判断该位置是否为相似点。可以根据第一字形图像和/或第二字形图像中该像素值不同的位置周边的像素值确定二者是否为相似点。例如,P(12,7)与Q(12,7)的值不同,则可以进一步的判断第一字形图像中P(12,7)的周边预设范围内是否包括与Q(12,7)相同的像素值,以及第二字形图像中Q(12,7)的周边预设范围内是否包括与P(12,7)相同的像素值,可以认为满足其中一种条件时,就认为P(12,7)与Q(12,7)为相似点,还可以认为同时满足两种条件的情况下,才认为P(12,7)与Q(12,7)是相似点。
若第一字形图像与第二字形图像在相同位置处的像素值不同,且不是相似点,则可以认为该像素点是不同点。
步骤103,根据差异信息确定第一字形与第二字形的轮廓是否相同。
可以根据确定的不同点的数量确定第一字形与第二字形的轮廓是否相同;若不同点的数量大于预设数值,则认为第一字形与第二字形的轮廓不同。
在确定第一字形与第二字形的轮廓是否相同时,还可以考虑相似点的数量,例如,若不同点数量小于预设数值,但是相似点数量大于预设差异参数,则也认为第一字形与第二字形的轮廓不相同。通过这样的判断方法,能够减少误判的情况方式,从而使得检查结果更加准确。
本实施例提供的检查字形轮廓是否变形的方法,包括获取更新前的第一字形和更新后的第二字形,根据第一字形和第二字形分别生成像素大小相同的第一字形图像和第二字形图像;根据第一字形图像中包括的第一像素信息、第二字形图像中包括的第二像素信息,确定第一字形图像与第二字形图像的差异信息;根据差异信息确定第一字形与第二字形的轮廓是否相同。本实施例提供的方法,通过将字形转换为字形图像,再通过比对字形图像中包括的像素是否相同,能够准确的判断出第一字形与第二字形的轮廓是否相同。采用本实施例提供的方法,能够自动检查更新前以及更新后的字体轮廓是否一致,从而解决现有技术中通过人工检测文字轮廓是否发生变化的方式需要消耗大量的人工成本,而且容易出错,导致检测效率较低的技术问题。
图2为本发明另一示例性实施例示出的检查字形轮廓是否变形的方法的流程图。
如图2所示,本实施例提供的检查字形轮廓是否变形的方法,包括:
步骤201,获取更新前的第一字形和更新后的第二字形,根据第一字形和第二字形分别生成像素大小相同的第一字形图像和第二字形图像。
步骤201与步骤101实现的具体原理和实现方式相同。
步骤202,判断第一字形图像与第二字形图像中是否包括空白图像。
其中,可以根据第一字形图像中的第一像素值信息,以及第二字形图像中的第二像素信息,判断第一字形图像与第二字形图像中是否包括同色或白色的空白图像。例如,可以判断第一字形图像以及第二字形图像中每个像素点的像素值是否均为(255,255,255),若是,则可以判断该字形图像为空白图像。
若是,则执行步骤203,否则,执行步骤204。
步骤203,判断第一字形图像与第二字形图像是否均为空白图像,若是,则确定第一字形图像与第二字形图像的轮廓相同,否则不同。
若判断第一字形图像与第二字形图像中仅包括一个空白图像,则二者图像肯定不同,则可以认为第一字形图像与第二字形图像的轮廓不同。在这种情况下可以向用户输出二者轮廓不同的信息,同时输出其中一个字形图像为空白图像的信息。
若第一字形图像与第二字形图像中不包括空白图像,即两个字形图像中均包括字形内容,则可以对比两个字形图像是否一致,若一致,则认为二者轮廓相同,否则,认为二者轮廓不同。
步骤204,对比第一字形图像、第二字形图像中相同位置的像素值是否相同,若不同,则将第一字形图像中的该位置确定为不同点,第二字形图像中该位置确定为第一不同点。
其中,可以将第一字形图像中的像素值记为P(i1,j1),其中,i1、j1为第一字形图像中的位置信息,例如,i1可以为横向坐标值,j1可以为纵向坐标值。还可以将第二字形图像中的像素值记为Q(i2,j2),其中,i2、j2为第二字形图像中的位置信息,并且,i2、j2与i1、j1表示同类的数据信息。
具体的,在i1=i2、j1=j2的情况下,可以根据P和Q的值,确定第一字形图像与第二字形图像中,相同位置的像素值是否相同。即:在i1=i2、j1=j2的情况下,若P和Q相同,则两个图像之间该位置的像素值相同,否则,两个图像之间该位置的像素值不同。若判断该位置的像素值不同,则将第一字形图像中的该位置确定为不同点,第二字形图像中该位置确定为第一不同点,例如,将第一字形图像中的P(15,25)确定为不同点,将第二字形图像中的Q(15,25)确定为第一不同点。
步骤205,获取第二字形图像中第一不同点周边预设范围内的多个像素值。
进一步的,在第二字形图像中确定出第一不同点以后,可以进一步的获取在该第一不同点周边位置的像素值。该周边位置是指距离第一不同点预设距离的范围。可以认为是以该第一不同点为中心,获取半径为预设距离的圆周范围内的多个像素值。另外,该周边位置还可以是以第一不同点为中心的正方形区域范围内,该正方形的边长为预设值,获取该正方形区域内的多个像素值。
步骤206,判断获取的多个像素值中,是否包括与第一字形图像中不同点相同的像素值。
将获取的像素值与第一字形图像中的不同点像素值进行比对,确定其中是否包括与不同点像素值相同的点。
若否,则执行步骤207;若是,则执行步骤208。
步骤207,更新预设范围。
在更新完预设范围后,根据更新后的预设范围继续执行步骤205,直到获取与第一字形图像中的不同点像素值相同的像素点。
实际应用时,更新预设范围是指扩大预设范围,即从更大的范围内获取更多的像素值,并将获取的像素值与第一字形图像中的不同点像素值进行比对。可以预先设置多个预设范围,根据多个预设范围逐步更新预设范围,例如,第一个预设范围的半径值为1,第二个预设范围的半径值为2,第三个预设范围的半径值为3。
步骤208,获取更新预设范围的更新次数,根据更新次数将第二字形图像中的第一不同点确定为第二不同点。
其中,若在第一次获取第二字形图像中第一不同点周边预设范围内的多个像素值时,就在这些像素值中确定出与第一字形图像中不同点相同的像素值,则认为更新次数为0。具体的更新次数为实际的更新预设范围次数。
具体的,可以设置上限阈值和下限阈值,上限阈值大于下限阈值。
若更新次数大于上限阈值,则可以直接将第一不同点确定为第二不同点。
若更新次数大于下限阈值且小于等于上限阈值,则确定第一次获取第一不同点周边预设范围内的像素点,与不同点像素值不同的第一数量值,以及,每次更新预设范围前、后之间的范围内的像素点中,与不同点像素值不同的第二数量值,并判断第一数量值与第二数量值是否均大于预设参数,若是,则将第一不同点确定为第二不同点。
其中,第一次获取第一不同点周边预设范围内的像素点为:获取最小的预设范围,并且根据该预设范围在第一不同点周边获取像素值时得到的像素值数量,再确定其中与第一字形图像中不同点像素值不相同的第一数量值,再确定该第一数量值是否大于预设参数;
具体的,在步骤206-207中,若在预设范围内没有找到与不同点像素值相同的像素点,则更新预设范围,使该预设范围变大,直到找到与不同点像素值相同的像素点为止。那么在更新前的预设范围与更新后的预设范围之间能够产生一个范围差,每次更新预设范围前、后之间的范围内的像素点即为该范围差内存在的像素点,再从中确定与第一字形图像中不同点像素值不相同的第二数量值,再确定该第二数量值是否大于预设参数。
进一步的,若第一数量值与第二数量值均大于预设参数,则将第一不同点确定为第二不同点。
在步骤206-207中,若在第一不同点周边的预设范围内没有找到与不同点像素值相同的像素点,则更新预设范围,直到找到为止。因此,在此过程中,只有最后一次更新的预设范围内包括与不同点像素值相同的像素点。若预设范围,或者更新前后的预设范围之间包括的像素值数量大于预设参数,那么可以认为该预设范围设置的较大,在较大的预设范围内无法找到与不同点像素值相同的像素点,则可以认为该相同位置处的像素值的确不同,因此,可以将第一不同点确定为第二不同点。
另外,当预设范围较小时,在该预设范围内得到的总的像素值数量则会较少。那么当预设范围较小时,可能需要多次更新预设范围,才能够找到与不同点像素值相同的像素点,若仅根据更新次数确定出第二不同点,再根据第二不同点的数量确定第一字形轮廓与第二字形轮廓是否相同,可能会在预设范围设定的较小时造成误判,导致检测结果不准确。
步骤209,若第二字形图像中包括的第二不同点数量大于预设数量,则确定第一字形与第二字形的轮廓不同。
在确定第一字形与第二字形的轮廓是否相同时,可以根据第二不同点的数量进行判断。可以将第二不同点的数量与预设数量进行比对,判断其是否大于预设数量,若是,则确定第一字形与第二字形的轮廓不同。若否,则可以确定第一字形与第二字形的轮廓相同。
若第二字形图像中包括的第二不同点数量小于等于预设数量,则结束。
本实施例提供的检查字形轮廓是否变形的方法中,上述实施例是以第一字形图像为基准,比对第二字形图像与第一字形图像是否一致实现的,还可以以第二字形图像为基准,比对第一字形图像与第二字形图像是否一致。具体的比对方法与上述实施方式相同,仅是将第一字形图像与第二字形图像换位即可。为了提高检查的准确性,可以通过两种比对方式对字形图像进行比对,若两次比对结果均为轮廓相同,则判断第一字形与第二字形轮廓相同,否则,判断第一字形与第二字形的轮廓不同。
步骤210,输出第一字形图像与第二字形图像的差异信息。
若判断第一字形与第二字形的轮廓不同,则可以执行本步骤,输出差异信息,否则结束。
若第一字形与第二字形的轮廓不同,则可以向用户输出具体的差异信息,从而使用户能够根据差异信息对字形进行调整。
具体的,可以通过界面显示的方式向用户输出差异信息,也可以在检查完字库中所有的字形后,将差异信息存储在文档中,用户可以输入打开差异文档的方式,查看各个字形的差异信息。
进一步的,在输出差异信息时,可以输出下述信息中的至少一种:
第二字形图像中包括的第二不同点数量、每次获取的第一不同点周边预设范围内的多个像素值的数量信息。
通过上述信息,能够使用户更直观的了解字形之间存在的差异。
图3为本发明一示例性实施例示出的检查字形轮廓是否变形的装置的结构图。
如图3所示,本实施例提供的检查字形轮廓是否变形的装置的结构图,包括:
获取模块31,用于获取更新前的第一字形和更新后的第二字形;
生成模块32,用于根据所述第一字形和所述第二字形分别生成像素大小相同的第一字形图像和第二字形图像;
确定模块33,用于根据所述第一字形图像中包括的第一像素信息、所述第二字形图像中包括的第二像素信息,确定所述第一字形图像与所述第二字形图像的差异信息;
所述确定模块33还用于根据所述差异信息确定所述第一字形与所述第二字形的轮廓是否相同。
其中,获取模块31、生成模块32、确定模块33依次连接。
本实施例提供的检查字形轮廓是否变形的装置,包括获取更新前的第一字形和更新后的第二字形,根据第一字形和第二字形分别生成像素大小相同的第一字形图像和第二字形图像;根据第一字形图像中包括的第一像素信息、第二字形图像中包括的第二像素信息,确定第一字形图像与第二字形图像的差异信息;根据差异信息确定第一字形与第二字形的轮廓是否相同。本实施例提供的方法,通过将字形转换为字形图像,再通过比对字形图像中包括的像素是否相同,能够准确的判断出第一字形与第二字形的轮廓是否相同。采用本实施例提供的方法,能够自动检查更新前以及更新后的字体轮廓是否一致,从而解决现有技术中通过人工检测文字轮廓是否发生变化的方式需要消耗大量的人工成本,而且容易出错,导致检测效率较低的技术问题。
本实施例提供的检查字形轮廓是否变形的装置的具体原理和实现方式均与图1所示的实施例类似,此处不再赘述。
图4为本发明另一示例性实施例示出的检查字形轮廓是否变形的装置的结构图。
如图4所示,在上述实施例的基础上,本实施例提供的装置,
所述确定模块33,包括:
对比单元331,用于对比所述第一字形图像、所述第二字形图像中相同位置的像素值是否相同;
若不同,则确定单元332将所述第一字形图像中的该位置确定为不同点,所述第二字形图像中该位置确定为第一不同点;
获取单元333,用于获取所述第二字形图像中所述第一不同点周边预设范围内的多个像素值,判断单元334用于判断获取的多个所述像素值中,是否包括与所述第一字形图像中所述不同点相同的像素值;若否,则更新单元335更新所述预设范围,所述获取单元333重新执行获取第二字形图像中所述第一不同点周边预设范围内的多个像素值的步骤;
所述获取单元333还用于获取更新所述预设范围的更新次数,根据所述更新次数将所述第二字形图像中的所述第一不同点确定为第二不同点。
其中,对比单元331、确定单元332、获取单元333、判断单元334、更新单元335依次连接,且获取单元333还与更新单元335连接。
可选的,所述获取单元333还用于:
若所述更新次数大于上限阈值,则将所述第一不同点确定为所述第二不同点;
若所述更新次数大于下限阈值且小于等于上限阈值,则确定第一次获取所述第一不同点周边预设范围内的像素点,与所述不同点像素值不同的第一数量值,以及,每次更新所述预设范围前、后之间的范围内的像素点中,与所述不同点像素值不同的第二数量值,并判断所述第一数量值与所述第二数量值是否均大于预设参数,若是,则将所述第一不同点确定为所述第二不同点。
所述确定模块33,还用于若所述第二字形图像中包括的所述第二不同点数量大于预设数量,则确定所述第一字形与所述第二字形的轮廓不同。
所述确定模块33,还用于判断所述第一字形图像与所述第二字形图像中是否包括空白图像;
若是,则判断所述第一字形图像与所述第二字形图像是否均为空白图像,若是,则确定所述第一字形图像与所述第二字形图像的轮廓相同,否则不同;
若否,则执行对比所述第一字形图像、所述第二字形图像中相同位置的像素值是否相同的步骤。
可选的,本实施例提供的装置,还包括输出模块34,若所述第一字形与所述第二字形的轮廓不同,则所述输出模块34用于输出所述第一字形图像与所述第二字形图像的差异信息。
其中,输出下述信息中的至少一种:
所述第二字形图像中包括的所述第二不同点数量、每次获取的所述第一不同点周边预设范围内的多个像素值的数量信息。
本实施例提供的检查字形轮廓是否变形的装置的具体原理和实现方式均与图2所示的实施例类似,此处不再赘述。
本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。