字符检测范文

2024-09-15

字符检测范文(精选8篇)

字符检测 第1篇

在文档中,经常使用斜体字符来强调比较重要的内容,因此斜体字符的识别通常比正体字符具有更重要的意义。从形态特征上可知,斜体字符均向右倾斜一定的角度,导致大部分字符间的空隙消失而影响字符间的分割,并且5°以上的倾斜导致字符明显变性,而OCR系统中的字符训练过程通过不会考虑斜体字符。因此,现有的OCR系统对斜体字符的识别效果都不理想。

近年来,OCR技术飞速发展,基于OCR技术的应用也越来越广泛[1,2,3,4],同时,作为预处理阶段的斜体检测也得到越来越多的研究。与文本的倾斜检测[5,6]不同,常用的斜体检测方法主要有字符轮廓方向链码[7,8,9,10]、投影轮廓直方图[11,12,13]、投影轮廓梯度直方图[14]等。在手写体斜体字符的检测中,基于轮廓方向链码的方法被广泛采用。这种方法在文献[10]中被介绍用来直接计算斜体字符的倾斜角。文献[13]中直接利用投影轮廓直方图.文献[11]中则对连续的黑像素进行奖励,使得斜体与非斜体字符的投影值的差异性增大,提高检测的鲁棒性,而文献[13]主要是利用投影直方图的分布特性。在文献[14]中,一种基于平行四边形伸缩框的方法被介绍来检测斜体字符,这种方法看起来似乎很简单,而实际上如何得到平行四边形的伸缩框并不是一件容易的事,作者也没有进行任何说明。文献[15]采用一种新异的斜体识别方法,该方法首先获取图像的非水平部分,并计算出该部分的边缘,最后通过边缘的形态来估计字符的形态特征。文献[16]提出了一种基于字符重心位置的检测方法,该方法首先将字符分为上1/4和下1/4两部分,并又分别将它们分为左右两部分,通过统计这两部分的像素数,定义并计算出上下两部分的重心位置坐标,最后通过两重心的坐标计算出字符的倾斜角度。

斜体字符的纠正一般分为手动纠正和自动纠正。手动纠正即通过人工的方式检测出文档中的斜体字符,并给予字符倾斜的角度来实现纠正。自动纠正即由系统分析字符的形态特征,通过形态特征来判断字符是斜体还是正体,如果是斜体并计算出倾斜的角度,最后通过切换算法对斜体进行纠正。

上面介绍的方法大多是对整个图像文本或者文本行进行斜体检测时才能取得较好的效果,当检测区域较小或斜体和正体交错出现在同一行时,上述方法的检测效果很不理想。针对这些问题,本文提出了一种基于单个英文字符的斜体检测算法,并通过统计所有的斜体字符来计算字符的准确倾斜角度,最后使用切换算法对倾斜字符进行校正。

1 斜体单词的检测与校正

目前,斜体字符的检测方法可归纳为两类,直接法和比较法。直接法就是利用字符本身的特征判断字符的形态。比较法是指将字符本身和其他形态的字符进行比较来判断字符的形态,一般都采用和反倾斜的字符进行比较来判断。直接法计算简单,但检测效果不理想。比较法检测效果较好,但需要对多幅图像进行比较处理,算法相对复杂,但在可接受范围内,因此本文采用比较法对斜体进行检测。

1.1 比较法原理

斜体字符可通过对应的正体字符切变一定的角度得到,同理,正体字符也可通过对应的斜体字符反切变一定的角度得到。因此,可以通过比较原始字符和反切换字符的形态特征,来判断字符的形态。如果原始字符为正体,反切换后的字符更接近反斜体(其特征跟斜体相似),如图1所示。如果原始字符为斜体,反切换后的字符更接近正体,如图2所示;根据上面的分析,分别对原始字符与反切换后的字符进行特征提取,并分析比较它们的特征,如果原始字符比反切换后的字符更接近正体,则字符为正体,否则为斜体。下面将详细地介绍基于字符的比较法来检测斜体的原理与方法,其中主要包括对称检测和特征提取两个步骤。

1.2 基于字符的斜体检测

本文提出的斜体字符检测方法主要包括两个步骤,首先对英文字符进行对称检测,可以检测出一部分字符,然后将剩下的所有字符通过比较法检测出其形态。根据探索该方法时的逻辑先后关系,下面先介绍字符比较法的方法和原理。

1)基于比较法的斜体检测

由于需要对原始字符和反切换字符的形态特性进行比较,因此需先由原始字符生成对应的反切换字符。反切换的字符通过原始字符向左切变一定的角度得到,如图1所示,图中右边的是正体字符图像,左边的是其对应的反切换字符图像,图2中右边的是斜体字符图像,左边的是其对应的反切换字符图像。图像的切换算法是通过对图像的不同的行偏移不同的距离来实现,具体的计算方法如下:

其中[x,y]表示像素在原始图像中的位置,[x',y']表示点[x,y]在切换后图像中的位置,θ表示切换的角度。从式中可以看出,y=y',x+y×tanθ。因此切换只是图像像素在水平方向的变化,并且同一行数据在水平方向的偏移量都为y×tanθ,因此在实际的计算过程中不需要按式(1)来实现切换,只需计算出每一行对应的偏移量即可,然后将该行移动对应的距离即可。

在比较法的检测方法中,本文通过提取三种不同的特征来对原始字符和反切换字符进行比较,分别为垂直投影最大值、垂直投影的突变量和字符的宽度,这三个特征都是基于字符的垂直投影直方图计算而来,因此需先分别获取原始字符和反切换字符的垂直投影直方图,下面详细介绍这三个特征。

(1)垂直投影最大值

同一字符的正体和斜体在垂直笔迹上有明显区别,如图3所示,正体字符中有更多的更长的垂直笔迹,这些特征在垂直投影中体现为具有更多的更高的“顶峰”,如图中字符下面的垂直投影直方图所示。

根据上面分析,垂直投影的最大值能作为一种特征,来描述正体和斜体的区别。设正体字符的垂直投影最大值为Max1,斜体字符的垂直投影最大值为Max2,如果Max1大于Max2,设T1为1,否则T1为-1。为体现“顶峰”更多的特点,在获取垂直投影最大值的时候,可以选择前N个最大值,然后分别取均值代表Max1和Max2,能有效提高特征的稳定性。

(2)垂直投影的突变量

从图3中可以看出,正体字符的垂直投影直方图比较陡峭,即成柱状,而斜体字符的垂直投影直方图则相对比较平坦,即成三角状,因此可以利用此差异来区分正体和斜体。投影直方图的这种陡峭程度可以用二阶导数来描述,分别计算出正体和斜体垂直投影直方图的二阶导数,并分别选取各自的最大值。设正体字符和斜体字符对应的最大二阶导数分别为Max3和Max4,如果Max3大于Max4,设T2为1,否则为-1。跟垂直投影最大值一样,为得到稳定的特征,分别选取前N个最大的二阶导数并取均值来表示Max3和Max4。

(3)字符的宽度

仔细观察斜体字符的特征可知,前一字符的顶部,往往因为切变换与下一字符的底部在垂直方向上重合。在不同的倾斜角度或者不同字符情况下,有时不会出现前一字符覆盖后一字符的现象,但他们之间的距离会变得更近,并且此情况也适用在由正体字符反切换得到的字符上,因此可以利用此特征来区分正体与斜体,如图4所示,灰度矩形条表示字符间的间隙。

斜体字符间的距离变小是因为字符经过切变换,在水平方向有一定的延伸导致,因此可用字符在水平方向的宽度来描述此特征。设原始字符的宽度为W5,反切换字符的宽度为W6,如果W5大于W6,则T3为-1,否则为1。

2)斜体字符检测方法

通过上述的分析,可得到描述字符特征的T1、T2和T3,下面将通过这三个特征初步判断字符的形态。通过前面的分析可知,T1、T2、T3为1表示原始字符为正体,-1则表示原始字符为斜体,因此T1、T2、T3中为1的值越多,则原始字符具有更多的正体特征,否则具有更多的斜体特征。设字符的特征T=T1+T2+T3,当T大于0时,原始字符为正体,否则为斜体。

在52个英文字母中(A-Z和a-z),通过上述方法能检测其中45个字符,剩下的7个字符(v,w,x,A,V,W,X)无法通过该方法正确识别。针对这些字符,本文提出了一种特殊的检测方法。从这些字符的正体形态分析可知,这些字符具有严格的左右对称性,其对应的斜体字符具有关于某条倾斜直线对称的特性,下面将详细分析基于字符对称性的斜体检测原理及方法。

如图5所示的正体字符,其字符具有严格的左右对称性,本文采用了一种左右映射比的方法来检测字符的对称性。首先计算出字符对称轴,由于是左右对称,可设对称轴为x=a,因此只需计算出a即可。由对称的特性可知,字符的重心必在对称轴上,因此可以通过计算字符的重心(a,b)来获得对称轴,其重心的计算公式如下:

其中(xi,yi)表示图像中的像素坐标,n表示字符图像中的像素数目。获取对称轴x=a后,即可通过对称轴来计算字符的对称程度。设对称轴将字符分为左右两部份,Right(xi,yi)为字符右边存在的点,则该点关于对称轴对称的点为Left(2a-xi,yi),如果该点为字符上的点,则统计为该点为对称点,否则为非对称点。对字符的每个点做上述对称检测,统计出对称点的总数目Mirror,设Num为字符的总点数,则字符的对称程度表示为c=Mirror/Num,c值越大表示对称程度越大,当c=1时,表示字符完全对称。

如图6所示的斜体字符,其字符由于切变换而不再具有左右对称性,但根据切变换的原理可知,同一行的像素点平移的距离相同,因此对于每一行像素点而言,仍然具有左右对称性,并且其对称中心为切换前的中心加上该行的平移量。根据上面的分析,每行的对称点都是由该行的原始对称中心加上该行的平移量,反过来可知,原始的对称点集加上相应的平移量即得到了新的对称性点集,用直线方程表示如后面的式(4),即原始的x=a对称轴,通过一定角度的切变换形成了斜体字符的对称轴。

接下来将介绍如何得到斜体字符的对称轴,首先设字符的切换角度为θ,如果能够知道对称轴经过的一点,那么就能用θ和这个点通过点斜式计算出对称轴的直线方程。设斜体字符的重心为(a',b'),可通过式(2)获取(与正体获取算法一样),根据切变的性质可知b'=b,在计算重心a'的时候,如果用平移前的坐标则可表示如式(3)所示,其中(a,b)表示对应的正体字符的重心。由此可知斜体字符的重心可通过正体字符重心平移对应的水平位置量得到,而正体字符的重心经过其字符的对称轴,又根据前面推断的正体对称轴与斜体对称轴的关系可知,斜体字符的重心也经过其对称轴。因此可根据θ和(a',b')计算出斜体字符的对称轴,如式(4)所示。然后利用对称轴来计算斜体字符的对称性,在计算每行的对称性时,需先根据对称轴方程计算出x轴方向的对称中心,然后通过对称中心来判断每个像素是否存在对应的镜像点,与正体字符计算的方式一样,通过统计计算出字符的对称性参数C。

根据上面的分析,即可方便地判断出如图5和图6所示的字符的形态。首先对原始字符分别进行正体对称检测和斜体对称检测,其中在斜体检测的过程中采用θ=15度(大量的斜体切换角度在12-18之间,上下相差3度不影响算法的准确性),如果检测的对称度C正>C斜并且C正>0.9,则该字符为正体。如果C斜>C正并且C斜>0.9,则该字符为斜体。

在能够正确检测具有对称性字符的基础上,并结合前面特征提取的方法就能有效地检测出所有字符的形态特征。首先使用对称性检测方法,识别出具有对称性的字符的形态,然后剩下的字符再提取T1、T2、T3特征,即可有效地检测出所有字符的形态。

1.3 斜体单词的检测方法

为了进一步提高斜体字符识别的准确率,本文提出了一种基于单词的识别方法。在实际文档中,斜体字符总是以单词为最小单位而出现,即不会存在一个单词中既有斜体字符又有正体字符。因此可以首先将文档中的内容按单词为单位进行切分,然后再将单词切分为单个字符,可采用基于连通域的分割方法。设单词一共切分为N个字符,最后将N个字符分别采用上述的方法进行斜体检测,设一共得到Nitalic个斜体字符,如果Nitalic>N/2,则认为该单词为斜体单词,否则为正体字符。

1.4 斜体字符的矫正

不同文档的斜体字符的切变角度通常并不一致,采用固定的角度对斜体字符进行校正显然是行不通的,因此需先计算出斜体字符的切变角度。研究发现,虽然不同文档的切变角度不同,但同一文档的斜体切变角度都会保持一致,因此可以针对单个文档计算一个切变角度,可以有效提高检测角度的准确性。

根据上面的分析,收集检测出的所有斜体字符,然后对这些字符计算出一个统一的切变角度。经分析,斜体字符的切变角度范围在12~18度之间,并从根据这些角度分别对斜体字符进行纠正,共得到7种不同角度的“正体”字符。为得到最确切的切换角度,对上述七种“正体”分别计算其特征值Max5,并取其中最大的Max5对应的角度为精确切换角度,最后依此角度对所有的斜体单词根据式(1)进行纠正。

2 实验结果与分析

为了评估该方法检测斜体的效果,采用了三种不同的数据对该方法进行测试,分别为正体字符文档、斜体字符文档和正体与斜体混合文档。其中正体的检测准确率为97.9%,斜体的检测准确率为98.1%,正体与斜体混合的检测准确率为96.3%,图7和图8所示为正体与斜体混合文档的检测结果及纠正后的结果。

在正体文档的检测过程中,由于有些文档的字符存在粘连现象,导致字符不能正确分割,特别是由图5所示的那些“假斜体”字符组成的单词,例如way,very等单词,当它们连为一体时,会存在一定的误判。在斜体文档的检测过程中,出现误判的情况和正体文档一样,但准确率比正体检测稍高,主要是因为分割的单词会更长(即单词没有正确分开),而这非常有利于单词的正确检测,例如,“very beautiful“能成功检测出来,但单独的“very”容易检测失败。在正体与斜体的混合文档中,同样会存在上述的问题,但准确率相对偏低,这个因为往往在单词的分割过程中,有时不能有效地将斜体和正体单词分开,例如“i beautiful”被分割成同一单词时,会检测成正体。

3 结语

字符检测 第2篇

目的

测试一个对象是否是字符串

方法

Python的字符串的基类是basestring,包括了str和unicode类型,一般可以采用以下方法:

代码如下:

def isAString(anobj):

return isinstance(anobj,basestring)

不过以上方法对于UserString类的实例,无能无力。

代码如下:

In [30]: b=UserString.UserString(‘abc‘)

In [31]: isAString(b)

Out[31]: False

In [32]: type(b)

Out[32]:

Python中常用的鸭子判断法:如果它走路像鸭子,叫声像鸭子,就可以认为它是鸭子了。

代码如下:

def isStringLike(anobj):

try:

anobj.lower + anobj + ‘ ‘

except:

return False

else:

return True

测试结果如下:

代码如下:

>>>import UserString

>>>b=UserString.UserString(‘abc‘)

>>>isStringLike(b)

True

>>>

关于风格

根据自己的语气去执行任务,在此过程中检测并处理由于不匹配产生的所有错误和异常,

这种处理方式称为:

代码如下:

EAFP:It‘s easier to ask forgiveness than permission.

try/except是保证该风格的关键工具。

八卦一下,关于UserString类

对于2.X版本:Python文档中提到,如果不涉及到2.2以前的版本,请考虑直接使用str类型来代替UserString类型。

对于3.X版本:该模块已经移到collection模块中。

该类主要有两种方法:

代码如下:

class UserString.UserString([sequence])

具体使用前面已经举例,注意可以使用str()转化为str类型

代码如下:

class UserString.MutableString([sequence])

字符串也可以变哦!Look here:

代码如下:

a=UserString.MutableString(‘abc‘)

a[0]=‘c‘

In [10]: a

Out[10]: ‘cbc‘

Python文档上有行黑体字,原来已经是弃用的方法,3.0就没有了:

代码如下:

字符检测 第3篇

随着Web应用以及黑客攻击技术的迅速发展,安全焦点正逐步从传统的网络安全转移到应用安全,各类面向Web安全的攻防技术开始层出不穷,其中Web应用脚本的攻防已成为当前的一个研究热点。Java Script脚本在各类Web浏览器中已得到广泛应用,成为Web安全攻击的一个重要载体。为了躲避用户端的杀毒软件、木马防治工具等检测,Java Script恶意脚本往往执行复杂的代码混淆变换[1],使基于特征匹配的传统方法无法检测,例如目前公开的在线Java Script代码混淆工具可参考文献[2,3]。为此,最新已有学者开展了基于机器学习的Java Script代码混淆检测研究[4,5],利用混淆代码的字节特征,提取有效的特征样本,并利用分类方法学习和判定脚本是否被混淆,此类方法有助于检测未知恶意代码,但特征提取和分类模型构建较为复杂且需人工参与,不利于系统开发和实现。另外,有学者将机器学习与N-gram[6]统计方法相结合研究JS恶意代码检测,虽然可获得较单纯的机器学习方法更高的精度,但执行效率不高[7,8]。因此,本文的工作将集中研究Java Script代码混淆技术及其快速检测方法,提出一种基于N-gram熵的快速字符统计方法,可直接判定Java Script代码的混淆性。本文提出的基于Ngram字符熵的方法不仅在计算性能上较SVM、k-NN等机器学习方法具有明显的优势,在分类正确性方面也可通过组合参数的调整获得最优效果。

1 Java Script 代码混淆研究现状

1. 1 混淆方法

Java Script是一种在浏览器端被动态解释执行的脚本语言,攻击者为躲避安全检测,常采用代码混淆技术。代码混淆是一种为了避免安全系统检测而改变数据形态的技术。例如,将“ATTACK”字符串改变为“ x65T x84ACK”等。由于Java Script引擎直接支持对字符串的解释,因此JS代码混淆技术具有多样化特征,反混淆具有相当的难度。下面总结当前较为流行的代码混淆技术。

内容重组方法内容重组法是最直接的网页木马迷惑方法,其根据脚本语言的语法规则改变程序内容,但不改变程序语句含义,主要存在如下三种方法:

( 1) 修改变量名恶意脚本中总含有一些变量,通过改变这些变量名可以改变程序的内容,但不改变程序的含义,例如:著名的木马MS06014,有一段语 句var sun = df. Create Object( “Micsoft. XMLHTTP”,“”) ; sun是一个变量名,把sun改成另一个变量名。显然变量名改变了,但是程序的含义并没有发生变化。此方法可以绕开部分杀毒软件的检测。

( 2) 打乱语序法通过改变脚本程序语句之间的语序,可改变程序的内容但不改变程序含义。

( 3) 常数变引法脚本程序中有变量也有常量,例如eval( “151 146 50”) 中有常数151 146 50,可以通过预先定义变量的方法,例如var str =“151 146 50”,需要用到这些常数时直接引用该变量,即eval( str) ,以此绕开部分安全系统的检测。

特殊符号方法Java Script程序段插入某些特殊符号,不会对程序的执行产生任何影响。黑客可以利用脚本语言的这一特性,对恶意脚本进行混淆,主要有以下四种方法:

( 1) 插入回车法Java Script是一种逐行执行的解释性语言,但在解析前的预处理阶段并非逐行扫描,例如: eval( “我是黑客”) 。

( 2) 插入空格法在合适位置插入空格或tab符不会影响程序执行,例如: alert ( “我是黑客”) 。

( 3) 插入空字符NULL字符可以在脚本的任意位置插入,插入后可大大增加脚本程序的可读性。

( 4) 插入语句法在脚本插入几行没有操作码的语句,脚本可正常执行,以此实现混淆。

转义字符方法Java Script语言含有转义字符“”,使用规则与C语言基本类似,主要规则如下:

( 1) 特殊字符“rn”代表回车换行,“0”代表字符中结束,“””代表双引号等。

( 2) “数字”字符ACSII码的八进制形式。例如,eval( “151 146 50”) 是一段利用八进制进行混淆的恶意脚本。

( 3) “x数字”字符ACSII码的十六进制形式,例如,varQN8 = newA ctive XObject( " x4d x50 x53 x2e x53 x74 x6f x72 x6d x50 x6c x61 x79 x65 x72" ) ,是一段利用16进制进行混淆的恶意脚本。

( 4) “u双字节数字”“u”后跟一个双字节数字,u代表UNICODE( 一个字符占用2个字节) 。例如,document. write( ‘u003c u0073 u0063 u0072……’) ,是一段采用UNICODE进行混淆的恶意脚本。

页面编码方法页面编码法是也一种重要的恶意脚本混淆方法。浏览器根据网页的编码方式解码网页内容,使网页不显示乱码,而杀毒软件则是根据脚本的源代码来执行特征码匹配算法。因此,攻击者可利用网页源程序和特定的编码方式,制作出安全检测系统不可识别,但浏览器识别的恶意脚本代码。

关联数组方法Java Script将对象看做特殊的数组,称为关联数组。通常访问对象的属性使用点运算符“. ”。例如,object. property,这里的属性名称是一个标识符。将对象看成数组后就可以用索引运算符“; ]”直接访问对象的属性。例如,object; “property”],这里的object是一个关联数组。由于关联数组法将对象的引用从原来的标识符引用变成了字符串索引引用,将Java Script脚本转变为字符串混淆形式也是恶意脚本免杀的方法。例如,document. createE lement( “object”) ,将它用关联数组法变形后得到: document; “createE lement”]( “object”) 。更进一步,若再使用内容重组法得到: document; “cre” + “ate”+ ”Element”]( “o”+ ”bje”+ ct”) ,再结合转义字符法得到:

document; “ x63 x72 x65”+“ate”+ ” x45 x6C x65 ”+ ”ment”]( “o”+ ” x62 x6A x65”+ ”ct”) 。

加密混淆方法使用网页木马加密技术也可使恶意代码易于躲避杀毒软件的检测。Java Script语言本身自带加密和解密函数,分别为escape和unescape函数。其中函数escape的编码规则如下:

( 1) 扫描字符串,遇到字母和数字,直接跳过,不进行编码。

( 2) 遇到“@ * _ + . /”这些字符也直接跳过。

如果字符ASCII码在0 - 256之间,则以% XX形式输出,其中XX为ASCII码; 若ASCII码值大于或等于256,则以“% u双字节数字输出”。

1. 2 反混淆方法

为对抗各种Java Script代码混淆技术,各大杀毒软件公司都在研究反混淆技术。一般来讲,每种代码混淆技术都有相对应的反混淆技术,下面给出对各类反混淆技术的简要分析:

内容重组法的反混淆内容重组法是一种简单依赖脚本语法的代码混淆方法。混淆只能对付完全基于字符串匹配的恶意脚本,可直接被人读懂,能把原来一些无意义的变量名变换成有意义的变量名。

转义字符法的反混淆可使用相应的编码工具对恶意脚本进行反混淆。

插入符号法的反混淆插入字符具有多样性,反混淆也没有统一的方法。可使用工具对网页进行处理,区分注释、多余空格、回车、tab等内容,最后剩下的就是恶意脚本的内容。

页面编码法的反混淆经过编码处理过的恶意脚本代码基本无法被阅读,也无法利用脚本语法的规则进行还原,一般页面编码法反混淆技术可以自定义解码程序或者换一种编码方式进行解码。

关联数组法的反混淆先用转义字符还原技术替换掉所有转义字符,然后用内容重组法还原技术整理恶意脚本,处理后此时的恶意脚本就能够直接被理解。

加密混淆法的反混淆对于采用escape函数进行迷惑的恶意脚本代码,可直接使用JS语言提供的解密函数unescape进行解密。

不难发现,对综合利用了上述各类混淆技术的混淆代码,很难直接给出反混淆的方法,对给混淆检测带来较大困难。例如,根据文献[1]提供的综合混淆方法,代码var str =“hello”经混淆后变为:

eval( function( p,a,c,k,e,d) { e = function( c) { return } ; if( ! ″. replace( /^ /,String) ) { while( c - - ) { d[C]= k[C]‖c} k = ; function( e) { returnd; e]} ]; e = function( ) { return' w + '} ; c = 1} ; while( c - - ) { if( k[C]){ p = p. replace( new RegE xp( ' b' + e( c) + ' b','g') ,k[C]) } } returnp} ( '0 1 = " 2" ; ',3,3,'var | str | hello'. split( ' | ') ,0,{ } ) )

一般而言,JS恶意代码基本都经过复杂的混淆变化,因此,自动判断JS代码是否被混淆可谓恶意代码分析提供直接参考。根据上述的混淆方法分析,任何混淆后的代码与源代码相比,其代码量及代码字符的分布均会发生明显变化,因而从代码字符熵的角度来分析代码混淆将是一种最直接的方法。

2 Java Script 代码混淆字符熵检测方法

2. 1 Java Script 代码的单字符熵

熵是香农信息论里的基本概念,已被广泛应用于各种数据分析模型。一般Java Script代码经混淆后的代码字节数量会明显增长( 如本文第1节实例) ,因此从信息论角度,代码中的字符熵也将发生较明显的变化。下面将以128个ASCII码可读字符为研究对象,分析Java Script代码中的单个ASCII码字符熵。

假设一个Java Script代码C包含的所有ASCII码字符的总数为L,即为每个字符在C中出现次数c1,c2,…,c128的总和。给出单个字符熵的计算公式如下:

显然,根据单个字符熵的公式定义,代码中ASCII码字符的分布越平均,代码字符熵就越大,反之越小( 趋向于零) 。当完全均匀分布时,E( C) 的理论最大值可达到log2128 = 7。根据Java Script代码是否经过压缩优化,我们随机选择了两组分别包含1000个良性Java Script代码的样本( 其中一组经压缩优化,另一组未经压缩) ,分别利用文献[1]和文献[2]的混淆方法随机对1000个样本执行了代码混淆,分别得到两组混淆脚本样本,统计ASCII字符熵的结果如图1所示。由图1( a) 和( b) 知,混淆后的代码字符熵基本维持在5. 5左右较为稳定,而未混淆代码字符熵则通常小于5,其中经过压缩优化的部分源代码的字符熵大于5,说明代码压缩优化在一定程度上与混淆相似,可消除代码中可能出现的重复语法结构,因而提高了代码的可读字符熵。图1( b) 则显示了一般的Java Script源码与混淆代码的可读字符熵具有以5为界的不同分布。

2. 2 Java Script 代码的字符串 N-gram 熵

N-gram是一种用于自然语言处理的常用模型[5 ],该模型基于一种假设: 第n个词的出现仅与前面n - 1个词相关,而与其它任何词都不相关,因此整句出现的概率即为各个词出现概率的乘积,这里的概率可直接通过语料中统计n个词同时出现的次数得到。例如,对字符串: abcbcfg,不同的N-gram序列片段分别为:

N-gram的值即为所有序列中不同片段的总个数,例如上例中的1-gram = 5,2-gram = 5,3-gram = 5,4-gram = 4。通常,考虑到统计效率,n的取值不大于5。

记一个Java Script代码C的N-gram的值为N,所有不同的N-gram片段的个数分别记为f1,f2,…,fN,所有不同N-gram片段个数的总和为T。我们给出N-gram熵的通用计算公式如下:

采用2. 1小节的Java Script样本,分别对源代码和混淆代码统计N-gram熵的结果如图2所示。N-gram模型考虑了Java Script代码中出现的所有可能的字节序列片段,较ASCII码字符能更全面地分析代码的字节特征。由图2知,1-gram熵的分布与ASCII码字符熵基本保持一致; 2-gram熵与1-gram熵一样对代码的混淆与否具有较强的区分度,但混淆代码的熵较小; 3gram和4-gram的混淆代码熵则更明显较良性代码熵低,由图示的分布可知均具有较好的线性区分度。

2. 3 基于字符熵的代码混淆检测方法

由图2( a) 知,1-gram熵值的分布对混淆和良性具有明显的阈值分界,而由图2( b) 、( c) 和( d) 的分布知,利用线性回归分析等可建立2-gram、3-gram和4-gram熵对代码混淆和良性的分类模型。基于检测模型的简洁性,本文直接利用平均熵作为阈值判定混淆脚本,给出如表1所示的不同熵阈值判定规则。在http: / / vx. netlux. org网站上随机获取1000个Java Script混淆代码( 恶意脚本) 进行测试,结果如表1所示,可读字符熵和1-gram熵获得最好的分类效果。

若系统需严格控制误报率而对漏报率不敏感,则可进一步组合N-gram熵阈值来判定混淆脚本。为检测效果,我们又随机抓取了不同的1000个Java Script混淆代码( 恶意脚本) ,根据不同的阈值组合判定结果如表2所示。从实验结果看,熵阈值组合个数的增加并未能有效增加判定的正确率。考虑计算性能和分类效果,组合可读字符熵和1-gram熵可获得最佳效果,可有效应用于Java Script脚本的混淆检测。

2. 4 检测精度与计算性能讨论

下面仍以http: / /vx. netlux. org网站上随机获取的1000个Java Script混淆代码为例,在主机配置为Intel i5CPU、3. 20 GHz、4 GB内存的32位Windows 7操作系统上,实现了文献[7]提到的的基基于于NN--ggrraamm的的SSVVMM和和kk--NNNN两两种种机机器器学学习习方方法法,,实实验验检检测测的的正确率和时间耗费结果如表3所示。实验结果发现,结合SVM和k-NN两种典型的机器学习方法,在检测精度方面较单纯利用字符熵的方法具有明显优势,但运算耗费也明显大于字符熵方法,而字符熵与N-gram熵的组合方案则同时兼顾了较高的检测精度和运算时间性能。因此,对偏重于检测实时性要求的一些特定应用场合,利用本文提出的纯字符熵方案可有效提升检测性能,而字符熵和N-gram的组合方案则更适用于检测精度和执行效率兼顾的应用场合。

3 结 语

本文首先总结了当前Java Script的各种混淆方法,并给出了各自技术特点及反混淆思路分析。根据代码混淆的共同特点,结合N-gram统计模型,提出了基于代码熵的混淆检测方法,直接根据代码N-gram熵的大小可有效判定是否混淆。尽管本文方法无法降低漏报,但可以较好控制误报率,并具有简洁、高效、易行等特点,无需样本库即可直接判定代码是否混淆,有利于更有效地检测和分析Java Script恶意脚本。

参考文献

[1]吴丹飞,王春刚,郝兴伟.恶意代码的变形技术研究[J].计算机应用与软件,2012,29(3):74-77.

[2]Free Obfuscator[OL].http://www.minifyjs.com/javascript-obfuscator/.

[3]Javascript Obfuscator[OL].http://javascriptobfuscator.com/.

[4]Choi Y H,Kim T G,Choi S J.Automatic Detection for Javascript Obfuscation Attacks in Web Pages through String Pattern Analysis[J].International Journal of Security and Its Applications,2010,4(2):13-26.

[5]Kim B I,Im C T,Jung H C.Suspicious malicious web site detection with strength analysis of a Javascript obfuscation[J].International journal of advanced science and technology,2011,26:19-32.

[6]Ching S.N-Gram Statistics for Natural Language Understanding and Text Processingp[J].IEEE Transactions on Pattern Analysis and Machine Intelligence,1979,1(2):164-172.

[7]Choi J,Kim H,Choi C.Efficient malicious code detection using ngram analysis and SVM[C]//2011 14th International Conference on Network-Based Information Systems(NBi S).IEEE,2011:618-621.

字符检测 第4篇

2014-03-03python基础教程之元组操作使用详解

-12-12python zip文件 压缩

-11-11python迭代器的使用方法实例

2013-12-12二种python发送邮件实例讲解(python发邮件附件可以使用email模块

2014-06-06python网络编程学习笔记(二):socket建立网络客户端

2013-03-03python发送邮件的实例代码(支持html、图片、附件)

2014-03-03python操作日期和时间的方法

2013-11-11跨平台python异步回调机制实现和使用方法

字符检测 第5篇

文中研制了一套基于机器视觉的液晶屏字符缺陷检测装置。首先对采集到的图像进行校正,使图像转化为水平视角,并进行阈值分割[5]-[6],提取出标准模板图像,之后运用图像匹配技术[7,8,9,10]],采用基于液晶屏字符特征的图像匹配,将标准模板图像匹配到待检测图像中,最后对数字和汉字分别进行相应的缺陷检测判断,并将检测结果显示在上位机界面。

1 检测装置总体设计

检测装置框架构成如图1所示,主要包括USB相机、光源、PC机、待检液晶屏工装板。装置启动时,计算机给工装板发送上电命令,然后发送相应显示状态命令,相机将采集到的图片上传给计算机,计算机进行相应的图像处理后做出判断,将检测结果实时显示在软件界面上。检测系统实物图如图2所示。

2 检测算法设计

2.1 校正

受液晶屏工装板本身视角影响,相机倾斜安装,导致采集到的图像是倾斜的(如图3(a)所示),为了便于后续图像处理,有必要对采集到的图像进行校正,将图像的倾斜角度转为水平视角。通过相机标定得到的内外参数,然后对采集到图像进行校正,校正后的图像效果如图3(b)所示。



2.2 图像分割

图像分割是把图像中具有特殊涵义的不同区域区分开来,这些区域是互不相交的,每一个区域都满足特定区域的一致性。通过前期处理后得到的图像背景和目标具有强的对比度,易于区分,本文采用全局阈值分割法进行图像分割,设预处理后得到的图像的灰度值P分布为区间[P1,P2],设定的阈值最大值为PMAX,最小值为PMIN,若灰度值P满足如下条件:

灰度值P将会被分割出来,分割后得到的二值化图像如图4所示。

2.3 图像匹配

图像匹配是寻找不同时间、不同传感器(成像设备)或不同条件下(照度、摄像位置和角度等)获取的两幅或多幅图像之间的变换函数,目的是使得图像中相应目标的位置对准。图像匹配的精度决定了后续检测的准确性。

本文采用基于液晶屏字符形状的图像匹配,该匹配算法主要包括以下过程:(a)确定ROI(Region of Interest感兴趣区域)区域;(b)从图像中获取ROI区域的图像,并求取该区域中心的坐标(Row,Col);(c)根据(b)中得到的图像创建模板;(d)读取待匹配图像,进行匹配,获得模板在待匹配图像中的位置参数坐标(Row[i],Col[i])、角度Ang[i]和缩放比例因子Scale[i],其中i为模板在待匹配图像中匹配成功的数目;(e)首先求取刚性变换矩阵HMATIX,HMATIX矩阵形式如式(1)所示:

其中H(t)为平移变换矩阵,H(R)为旋转变换矩阵,HMATIX与(b)和(d)得到的相关参数关系如式(2)所示:

得到刚性变换矩阵后,由于不同位置匹配得到的缩放比例因子Scale[i]不同,因此需要将比例因子添加到刚性变换矩阵,得到新的矩阵HMATIXSCALE与之前的刚性变换矩阵关系如式(3)所示:

其中S是一个2*2比例因子矩阵,其形式如式(4)所示:

得到矩阵HMATIXSCALE后,就可以进行仿射变换,显示匹配结果。用图像分割得到的图像(图4)与待检测图像匹配,匹配效果如下图5(a)、(b)所示,模板图像与待检测图像具有良好的对应关系。

2.4 缺陷检测

经图像匹配后,液晶屏中字符在图像中的位置就得以确定,就可以根据各自特点进行相应的缺陷检测,二者检测如下所述。

1)数字缺陷检测

数字缺陷检测是通过得到待检图像中的数字部分后,与对应状态的标准数字模板作差,对作差结果进行开操作,求取开操作后的面积,与设定面积阈值作比较,从而判断是否存在缺陷。图6是某一次试验其中一片液晶屏的检测结果,其中白色部分是缺陷位置所在。

2)汉字缺陷检测

汉字缺陷检测与数字缺陷检测相比较,对工装板的位置非常敏感,考虑到实际流水线检测的条件,工装板或多或少的在位置上存在左右偏移,因而对预先划分的汉字区域有必要进行扩大,这样才能保证工装板在存在偏移的情况下能够提取完整的汉字,故对标准汉字模板区域进行适当的膨胀。图7是某一次试验其中一片液晶屏的检测结果,其中白色部分是缺陷位置所在。

3 实验

考虑到检测液晶屏工装板尺寸较大(一块工装板有8片液晶屏),以及液晶屏本身视角影响,本装置采用双相机,相机为大恒图像水星系列工业相机,型号为MER-500-7UM/UC-L,该相机为USB 2.0接口数字摄像机,能稳定工作在各种恶劣环境下,可靠性高。

上位机软件运用vs2005开发平台,采用vc++语言编程,软件界面实时显示图像采集窗口和检测结果,当字符显示存在缺陷时,相应汉字会变红,相应数字部分会出现“ERROR”。

为了检验装置检测的准确性,厂家提供了200块具有各种代表性字符缺陷的工装板,其中有180块是存在缺陷的工装板,20块是合格的工装板,存在缺陷的工装板全部检出,并准确地显示出缺陷所在位置。同时通过对检测一块工装板11种显示状态的时间进行计算,平均每块工装板的检测时间为35s,与人工检测方式相比明显缩短了检测时间。图8(b)是某一时刻相机采集到的图像,其中白色部分是缺陷位置所在,图8(a)是对应的检测结果。



4 结束语

针对液晶屏字符显示缺陷检测的问题,通过图像匹配技术确定相应字符的显示位置,根据数字和汉字的特点分别设计相应的检测算法,最后以面积为特征值来判定是否存在缺陷。在此基础上搭建了机器视觉检测平台,检测效率较人工方式明显提高,同时具有较高的准确率,能够满足工业自动化在线检测要求。

摘要:针对目前液晶屏字符显示缺陷检测主要依靠人工方式,效率低,主观性强,设计了一套基于机器视觉的自动化在线检测装置。文章介绍了整个装置的总体框架和检测方法,对采集的图像进行校正、阈值分割等预处理,然后进行图像匹配,最终作出是否存在缺陷的判定。通过实验,该装置能够准确实现对8片液晶屏不同状态的同时检测,并显示缺陷所在位置。

关键词:机器视觉,液晶屏,字符缺陷,图像匹配

参考文献

[1]钱慰宗.显示器件综述[J].计算机应用,2006,26(8):1964-1971.

[2]Chang Do Jung,Seun Kim,Hee Yul Lee.Fourier Spectrumbased Periodic Cell Patter Elimination in Thin Film TransistorLiquid Crystal Display Cell Image[C].IEEE International Con-ference on Consumer Electronics,201l:871-872.

[3]毕昕,丁汉.TFT—LCD Mura缺陷机器视觉检测方法[J].机械工程学报,2010,46(12):13-19.

[4]刘毅,郑学仁.液晶屏显示缺陷自动检测系统的设计[J].微计算机信息,2008,24(7):249-251.

[5]冈萨雷斯.数字图像处理[M].北京:电子工业出版社,2007.

[6]韩思奇,王蕾.图像分割的阈值法综述[J].系统工程与电子技术,2002,24(6):91-94,102.

[7]Rueckert D,Aljabar P.Nonrigid registration of medical imag-es:theory.methods.and applications[J].IEEE Signal Pro-cessing Magazine,2010,27(4):113—119.

[8]Thomton J,Savvidos M.A Bayesian approach to deformed pat-tern matching of iris image[J].IEEE Pattern Analysis MachineIntelligence,2007,29(4):596-606.

[9]Kolmogorov V.Graph based algorithms for scene reconstruc-tion from two or more views[D].The Graduate School of Cor-nell University,2004.

字符检测 第6篇

信息媒体的数字化为信息的存取提供了极大的便利性, 同时也显著提高了信息表达的效率和准确性。特别是随着计算机网络通讯技术的发展, 数据的交换和传输变成了一个相对简单的过程, 人们借助于计算机、数字扫描仪、打印机等电子设备可以方便、迅速地将数字信息传输到所期望的地方。随之而来的副作用是这些数字形式的数据文件或作品使有恶意的个人和团体有可能在没有得到作品所有者的许可下拷贝和传播有版权的内容, 例如, 现代盗版者仅需轻点几下鼠标就可以获得与原版一样的复制品, 并以此获取暴利;而一些具有特殊意义的信息, 如涉及司法诉讼、政府机要等信息, 则会遭到恶意攻击和篡改伪造等等。这一系列数字化技术本身的可复制和广泛传播的特性所带来的负面效应, 已成为信息产业健康持续发展的一大障碍, 目前, 数字媒体的信息安全、知识产权保护和认证问题变得日益突出, 且已成为数字世界中一个非常重要和紧迫的议题。

在多媒体中加入数字水印可以确立版权所有者、认证多媒体来源的真实性、识别购买者、提供关于数字内容的其他附加信息、确认所有权认证和跟踪侵权行为。它在篡改鉴定、数据的分级访问、数据跟踪和检测、商业和视频广播、Internet数字媒体的服务付费、电子商务认证鉴定等方面具有十分广阔的应用前景。自1993年以来, 该技术已经引起工业界的浓厚兴趣, 并日益成为国际上非常活跃的研究领域。

本文研究基于数字符号水印加密的商业谈判语音文件篡改检测技术。

二、商业谈判语音文件篡改检测的水印加密方法

对商业谈判语音文件, 特别是具有特定保存和传输需求的商业谈判语音文件, 在不影响其实际播放效果的前提下, 检验文件内容是否被篡改的方法, 可以概括为三步:一是对作为检测对象的商业谈判语音文件进行波形提取, 获取它的波形几何特征、拓朴特征、各种变换特征等;二是对特征点例如波形零点集合的某一指定子集合嵌入字符水印, 由于嵌入的水印信息相比于原始波形噪音极小, 以致于不影响原始波形的播放效果;三是提取嵌入的字符水印, 分析其被污染或破坏程度、状态, 而辨别原始商业谈判语音文件是否被篡改、被篡改的程度内容形式等。

不失一般性为着简便, 我们以音乐文件“我们的祖国.wam”为例, 借助matlab软件, 进行不影响播放效果的字符水印加密, 以提取的字符水印是否被破坏来辨别代表原始商业谈判语音文件的音乐文件“我们的祖国.wam”是否被篡改。

第一步:提取原始商业谈判语音文件的波形如图1;分析波形几何特征、拓朴特征、各种变换特征, 如波形的零点集合 (约有2200个零点) 。

第二步:对波形的零点集合的一个子集合例如零点序列中每过199个零点选择一个作为嵌入字符水印的节点, 共嵌入11个字符水印:“yjq19580505@126.com”;由于离散零点嵌入的字符水印信息对原始商业谈判语音文件所加的噪音极小, 以致于不影响原始文件的播放效果 (图2) 。

第三步:提取嵌入的字符水印:“yjq19580505@126.com”;与原始水印信号相比较, 辨别加入字符水印的商业谈判语音文件是否被篡改。

这种水印加密技术由于零点嵌入而具有的优点之一, 是鲁棒性较强, 抗攻击性较好。

三、结论

商业谈判语音文件嵌入字符水印, 是实现商业谈判语音文件篡改检测的重要途径;借助matlab软件的语音信息变换技术, 可以简捷方便地实现商业谈判语音文件篡改检测鉴定和保护。

摘要:本文研究商业谈判语音文件篡改检测技术:对需要保存或传输的商业谈判语音文件, 借助计算机技术进行波形提取, 查找其波形零点集合, 在这一集合的指定子集合处嵌入字符水印信息, 这一波形变换, 由于嵌入字符信息的附加噪音相比于原始波形极小, 不影响这一商业谈判语音文件的实际表达效果;提取嵌入的字符水印信息, 以字符水印信息是否被破坏来检测原始商业谈判语音文件是否被篡改;对一个典型事例的实际操作证明这一技术的有效性。

关键词:商业谈判语音文件,字符水印,篡改检测技术,matlab

参考文献

数字字符切分中小数点处理 第7篇

根据黑点数统计进行投影的直线切分方法是一种比较直观和简单的方法,其基本思路为:先对图像进行垂直投影,然后再根据其对应的投影曲线,选取曲线中大波谷作为切分区域。在一般情况下,字符串中的字符间隙都是没有笔画部分,经过垂直投影后在间隙处出现大波谷的部分,根据大波谷来判断进行切分是可以正确切分这些没有粘连和重叠区域的数字串,对于有粘连和重叠区域的数字字符串就无法正确切分了。所以对于印刷体的数字串或者字符间距较大的数字串、书写工整的数字串的切分这种切分,方法都适用。

该文主要研究小数点造成数字字符粘连情况下的直线切分法实现字符切分,采用小面积剔除方法将小数点剔除来解决小数点造成的字符粘连问题,保证字符能顺利切分。

1 直线切分方法

该文使用直线切分方法对数字字符进行切分。直线切分方法是一种相对比较传统的数字字符切分方法,它对简单的二维目标切分非常有效。切分过程中的主要难点在于判断是否有数字字符粘连或者断裂,以及粘连,断裂的数字的处理。

统计图像在水平和竖直方向上的投影,是很常用的一种简单实用方法。它的基本思想是统计出图像在水平投影和竖直投影,然后再分析投影统计值的变化,来具体分析出含有七段式数字显示仪表中的数字字符的位置。这种方法处理的图像主要是二值图像。将经过灰度处理、二值化、膨胀、腐蚀和平滑后的图像用来切分,经过这些预处理后的图像如图1。

把图1这类经过预处理得到的图像设为A,令图像A的行数为row,列数为col。在图像中,用P(i,j)表示第i行第j列像素点的像素值。通过投影的定义,得到水平方向的投影为:

竖直方向投影为:

由式(1)和式(2)可以得出,水平方向上的投影是图像A列数的一个函数。其中第i行对应的投影值,是这一行中黑色像素点的个数。竖直方向上的投影,是图像A行数的一个函数。其中第j列对应的投影值,是这一列中黑色像素点的个数。

使用公式(1)和(2)对待切分数字字符图像进行投影统计,得到图像的水平和竖直投影如图2和3。

由图像的竖直投影可知数字与数字之间存在空白,那么沿着这些空白将数字字符切分,同时依据水平方向投影截去图像上下的空白,得到数字字符切分结果如图4。

2 粘连字符切分

但是,预处理后的图像在使用投影法切分字符的时候,发现会出现字符粘连的在一起。在图像膨胀处理的时候,为了消除七段码之间的间隙、孔洞,但同时将小数点也采取了膨胀处理,导致小数点与前后两个数字字符粘连在一起,如图5。这样的字符粘连在一起使得字符切分的时候前面两个字符没有切分开来,如图6,这样就会造成字符无法识别。

字符切分直接影响字符识别的正确率,如图6这种类型情况就必须将小数点影响解决才能正确切分字符。那么就得在预处理中图像膨胀前将小数点去掉。

此时考虑单个字符与小数点的区别,发现小数点所占面积远小于字符所占面积,如图7。

由图7可以看出,小数点的面积在七段码数字中面积最小,采取剔除小面积区域方法将小数点删除,解决字符粘连的问题,再进行膨胀就不会出现字符粘连情况。字符切分情况如图8。

3 结语

结合直线切分方法,利用水平投影与竖直投影,解决了包含小数点时造成字符粘连的问题,将数字字符从图像中提取出来,为后续作字符识别提供保障。小面积剔除法去除小数点,解决粘连问题效果良好。

参考文献

[1]张春伶.图像分割算法综述与探索[J].科技创新与应用,2012(10):55-56.

[2]丁可.数字图像处理技术研究与发展方向[J].经济研究导刊,2013(18):246-247.

[3]张淑娟.基于边缘检测的图像处理软件的开发及优化[J].电子测试,2013(24):3-4.

基于形状的字符识别算法 第8篇

关键词:字符识别,形状特征,凹凸性特征,凹凸对称性,凹凸区域夹角

0 引言

字符特征的提取是字符识别中的关键技术。目前应用较为广泛的是提取字符轮廓特征为主的方法,如采用链码描述字符线条、平面曲线及区域边界等[1,2,3]。此类方法可以较好地提取景物的轮廓,但对于字符大小、倾斜等因素较为敏感,因此需要经过归一化、倾斜校正和细化等预处理。这些处理过程较为繁琐,特别是细化过程,无论是并行算法[4]或是模板匹配算法[5],最终获取理想的单像素图像非常困难,对于字符的准确识别造成不利影响。文献[6-7]所提基于字符形状的识别算法,根据字符的整体形状特征,如字符的凹凸性,提取字符特征,不受字符大小、倾斜的影响,省去归一化、倾斜校正和细化处理,提高字符识别的速度,是一类较为简单、实用的方法。

采用以字符凹凸性特征提取为主的方法识别字符,简单易行。但在分类识别时,需用辅助方法,如文献[6]使用弯曲度计算提取直线特征,文献[7]使用链码描述提取直线和角点等。这些辅助方法除了需要额外的处理时间之外,实际上仍受到字符大小、倾斜等因素的影响。文献[6]所提算法在字符笔画弯曲度计算中,会受到字符倾斜的影响;文献[7]提出的算法,链码描述直线特征需将字符细化。

对此,本文提出采用新的字符凹凸性特征分析与提取方法,针对25个大写英文字符(不包含“I”)及10个阿拉伯数字(0~9),探讨该种方法的可行性及优势。

1 字符形状的凹凸性描述

字符形状的凹凸性特征指字符呈现于人眼的凹凸曲直性。字符的凹凸性特征描述有多种方法[8,9,10],本文采用背景赋值法。首先逐像素扫描图像并选择背景点(像素值为1),从该像素向其8邻域方向作射线,判断射线是否与图像前景点(像素值为0)相交,将有交点的射线数作为背景值赋值给当前背景点。图1(a)所示的图案进行背景赋值后得到图1(b)所示的赋值背景图像。根据背景赋值,可实现对字符的凹凸性特征描述。

图1(b)中,背景值为8的区域表示该区域的点向8个方向所做射线均与前景点相交,即该点被字符的笔划包围,为圈区域,如图1(a)中的L1、L2。背景值为5~7的点则处于字符笔划的凹陷区,为凹区域,如图1(a)中的LC、RC、UC、DC。显然,不同字符呈现的凹凸性特征具有明显的区别,且抗变性强。

本文采用圈区域数量、凹区域数量及方向、圈区域的大小、凹凸对称性、凹凸区域夹角、凹凸区域位置和宽高比共7个特征识别字符。

2 凹凸性特征提取

(1)圈区域L

如上所述,背景赋值为8即认为是圈区域。但在实践中发现如Arial等部分字体,由于笔划包裹性较强,字符中存在凹陷较深的区域,简单地按照背景赋值法赋值则会将其凹区域的边缘赋值为8,导致圈区域的误判。如图2(a)所示字符“6”。

为避免该问题出现,增加了二次赋值步骤,即对于赋值为8的像素,还要检测其8邻域是否在圈内,将不在圈内的像素赋值为9,认定其为凹区域,如图2(b)所示。

(2)凹区域C

图1(a)中存在4个特征不同的凹区域,为加以区别,做如下定义:

左凹LC:左侧无字符笔划的凹区域;

右凹RC:右侧无字符笔划的凹区域;

上凹UC:上方无字符笔划的凹区域;

下凹DC:下方无字符笔划的凹区域。

(3)圈的大小LV

有圈的字符较多,显然圈的大小可作为重要特征区别不同字符。如D、O为大圈,4、R为小圈。定义LV为圈区域面积与字符面积之比,若为大圈,而0.7则为小圈。

(4)凹凸对称性CS

对于凹凸性特征相似的字符,如5和S,识别难度较大。文献[6]采用计算水平交点数的方法区别。此种方法具有一定局限性,如5和S下部都有2个交点,而上部虽然交点数有差异,但较难精确测算,同时受到字符倾斜等因素影响会出现误判。

研究中发现如5和S、2和Z,虽然特征相近,但大多数常见字体中S和Z的上下凹区域均对称,而5和2则不对称,如图3所示。

因此定义凹凸对称性CS,计算字符两个不同凹区域的相似程度以区别这些字符。简单起见,定义字符上下凹区域的面积之比为对称性CS,若CS=1则表示对称。也可根据具体情况设置CS门限以体现字符凹凸对称程度。

(5)凹凸区域夹角CA

字符U和V、H和N特征相近。但“V”、“N”中存在锐角凹区域,即左右两侧笔划夹角成锐角,而“H”中存在直角凹区域,如图4所示。

图5所示为8邻域示意图。

若p1在赋值背景的凹凸区域中,其8邻域中某像素是笔划的则给对应邻域赋值为1,是凹区域的则给对应邻域赋值为0。那么在锐角凹区域中总会找到一点满足CA>5;而直角凹区域中总会找到一点满足CA=5;在不含锐角/直角的凹区域则找不到这样的像素。

(6)凹凸区域位置CP

定义CP<0.5表示凹凸区域在字符图像上半部分,CP>0.5则表示凹凸区域在图像的下半部分。

(7)宽高比CR

字符0和O可用宽高比区别,设若CR<0.75对应0,CR>0.75对应O。

3 实验结果与分析

通过对35个字符的凹凸性特征提取和分析,设计多级分类器,每级使用一项或几项特征条件,将字符逐级分类识别。在VC6.0环境中,针对大量包含常见字体的32×32字符图像进行识别的实验。

3.1 一级分类

以无圈、有圈(1圈/2圈)作为分类特征,将字符分为3类,如表1所示。

3.2 二级分类

二级分类结果如表2所示。二级分类根据一级分类结果中的字符凹凸性特征,灵活选用分类特征进行逐级分类,将一级分类中的3类字符分别分为多个子类,如表所示。

对于类1,先筛选出含有左凹区域的字符得到子类1-1;在剩余字符中分别依据含有1个和2个右凹区域得到子类1-2、1-3;含有上凹或下凹区域的字符分为子类1-4;不含凹区域的只有字符“1”,作为子类1-5。对于类2则选用含有大或小圈区域作为分类特征,得到子类2-1和2-2。而类3中只有两个字符,显然含有左凹的为“8”,不含左凹的为“B”。

3.3 三级分类

三级分类结果如表3所示。

二级分类后无法区别的字符进行三级分类,见表3。除“N”、“H”、“V”、“U”外,“D”和“0”、“O”也采用计算凹凸区域夹角的方法区分,避免了采用链码或曲率检测直线,更加简单实用。

3.4 四级分类

如表4所示,所有字符已完全被区分开。

4 结语

多级分类识别全部采用字符形状的凹凸性特征,35个字符全部正确识别,不受字符图像的大小、倾斜影响。特别是采用凹凸对称性、凹凸区域夹角作为分类特征识别字符,有效扩展了凹凸性特征的可区分范围,体现了基于字符形状的识别方法的优越性。

参考文献

[1]王萍,刘恒,狄光敏.基于简约码特性树的字母和数字识别[J].天津大学学报,2008,41(6):667-672.

[2]宋加涛,刘济林.车辆牌照上英文和数字字符的结构特征分析及提取[J].中国图象图形学报,2002,7(9):945-949.

[3]周治紧,李玉鑑.基于投影归一化的字符特征提取方法[J].计算机工程,2006,32(2):197-199.

[4]喻擎苍,苏斌,李华强.改进的符号图像并行细化算法[J].计算机工程与设计,2009,30(3):723-724.

[5]梅园,孙怀江,夏德深.一种基于改进后模板的图像快速细化算法[J].中国图象图形学报,2006,11(9):1306-1311.

[6]胡金蓉,周激流,王玲,等.一种新的基于字符形状特征的高效车牌识别算法[J].计算机应用研究,2010,27(6):2398-2400.

[7]朱绍文,陈光喜.一种简单的基于字符形状的验证码识别技术[J].桂林电子科技大学学报,2010,30(2):59-62.

[8]CHEN Yi kai,WANG Jing fa.Segmentation of single or multi ple touching handwritten numeral string using background andfore ground analysis[J].IEEE Transactions on Pattern Analysisand Machine Intelligence,2000,22(11):1304-1317.

[9]TOY F H,CAO L J.Descending support vector machines for financial time series forecasting[J].Neural Processing Letters,2002,13(15):179-195.

上一篇:图书馆学会的经营之道下一篇:应急通讯