2008年12月30日星期二

基于粗糙集和BP网络的车牌字符识别

1、引言

  车牌字符识别是车牌识别系统中重要组成部分之一,是模式识别的一个应用领域,车牌字符样本集是字符集合的一个有限子集,包括汉字约 50个,字母A–Z,数字0–9,属于特定的有限字符集识别问题。目前最常用的车牌字符识别方法主要有模板匹配法、基于字符特征的识别方法和神经网络法 等。模板匹配法简单,实用于一些特定情况,如尺寸固定、车牌位置水平不发生旋转等情况,当车牌字符图象轻微扭曲变形、笔画粗细不均甚至缺损断裂时,容易产 生误识别。文献1作者把K近领法用到车牌字符识别中,K近领法是典型的统计学习方法,在分类领域中经常用到,主要思想是先对待识别字符进行特征提取、建 库,然后计算待测样本的特征与模式库中特征的相似度,最后根据判别函数来识别待测样本属于哪一类。基于字符特征的识别方法主要有PCA法和ICA法,文献 2就是采用了独立分量法(ICA)对车牌字符进行识别。神经网络方法具有较强的并行数据处理能力、容错能力和泛化能力。但是神经网络是一种弱学习算法,分 类精度也不高,文献3针对这一弱点提出了一种改进的BP神经网络方法用于车牌字符识别中。

  粗糙集(Rough Set)理论是波兰数学家Z.Pawlak于1982年提出的,是一种新的处理含糊性和不确定性问题的数学工具[4]。

  本文提出一种基于粗糙集和神经网络相结合的车牌字符识别方法,首先对车牌字符图象进行定位、预处理、分割以及归一化等操作,然后基于粗糙集理论对经过 归一化处理的二值化图象进行特征提取,构造决策表,并对其进行属性约简,最后用约简后的属性构造BP神经网络分类器。该方法通过粗糙集减少了条件属性个 数,简化了BP神经网络分类器的网络结构,提高了字符识别的泛化能力。

2、粗糙集相关知识[5,6]

  定义1. 设是一个信息系统,U表示对象的非空有限集合,称论域; = Φ,C称为条件属性集合,D称为决策属性集。具有条件属性和决策属性的信息系统称为决策表。,Va是属性a的值域;f表示是一个信息函数,它为每个对象的每个属性赋予一个信息值。

  定义2. 设集合,R是一个等价关系,称 = 为集合X的R下近似集;称为集合X的R上近似集。称集合 = 为X的R边界域;称= 为X的R正域;称= U-为X的R负域。

  定义3. 知识的依赖性可形式化地定义如下:令K=(U,R)是一个知识库,P、Q R。

  1) 知识Q依赖于知识P(记作PQ)当且仅当IND(P)IND(Q)。

  2) 知识Q与知识P等价(记作P≡Q)当且仅当PQ且QP。

  3) 知识Q与知识P独立(记作P≠Q)当且仅当PQ与QP均不成立。

  当知识Q依赖于知识P时,也可以说知识Q是由知识P导出的。

  有时候知识的依赖性可能是部分的,这意味着知识Q仅有部分是由知识P导出的,这可以由知识的正域来定义:令K=(U,R)是一个知识库,P、QR。

  当k==时,我们称知识Q是k度依赖于知识P的,记作PQ。当k=1时,我们称Q完全依赖于P;当0< <1时,称Q粗糙依赖于P;当k=0时,称Q完全独立于P。

  系数可以看作Q和P之间的依赖度。

3、车牌字符识别方法

  车牌字符识别是车牌识别系统中的核心内容,一般车牌字符识别包括如下步骤:首先对采集到的车牌图象进行定位、预处理、字符分割以及 归一化处理等,每个字符变成大小相同的字符,然后在归一化后的二值图象中进行特征提取,所提取的特征中并不是都同等重要,在保证属性集和决策集关系不变的 前提下,利用粗糙集对所采集到的特征进行属性约简。最后用约简后的属性作为神经网络的输入,构造神经网络字符分类器。字符识别原理如图1。


图1 字符识别原理



3.1 提取字符特征建立决策表

  字符特征的提取有多种方法,目前常用的方法有:逐像素特征提取法、骨架特征提取法、垂直方向数据统计特征提取法、13特征点提取法、粗网格特征提取法 等。本文采用粗网格特征提取法对归一化的二值图象进行特征提取。首先把字符平均分成16×16个网格,再把这16×16个网格的字符平均分成16个4×4 的象素大小的子图象,统计每一份内黑色像素点的个数,而每个网格反映的是字符的部分特征,所以需要把所有网格组合起来作为字符的统计特征,最后得到 16×16维的字符特征。然后以这16个特征作为条件属性,字符的种类作为决策属性。条件属性集为,属性值集合为,决策属性集为,即字符的真实值。

3.2 离散化决策表


  运用粗糙集理论时,要求决策表中的条件属性必须是离散化属性,本文采用遗传算法进行属性离散化。遗传算法是一种非常有效的搜索和优化技术, 有着隐含并行性、鲁棒性和全局搜索等特点,所以在粗糙集中应用遗传算法进行连续属性离散化,主要是由于其具有全局寻优能力,它将所有属性值编码成个体位 串,得到关于所有属性的全局离散化结构,避免了属性局部离散独立性所带来的弊端[7]。本文首先按照文献[8]介绍的方法求出候选断点集,从候选断点集中 选一个尽可能小的结果断点子集来对决策系统进行离散化。实验表明:最佳离散区间为3。

3.3 决策表的约简

  目前在决策表中的条件属性并不是同等重要的,在保证决策表不可分辨关系不变的前提下,对决策表进行属性约简。本文中利用知识的依赖性对决策表中的条件属性进行简化。具体算法如下:

  ⑴ 在原决策表T中计算根据条件属性划分的等价类,以及不同条件属性组合下划分的等价类

  ⑵ 计算根据决策属性D对论域划分的等价类

  ⑶ 根据相对约简和依赖度的定义,计算条件属性C和决策属性D的依赖度k,
k=(1)
  
  若k=1,则称决策属性D完全依赖于条件属性C,若0<k<1,则称决策属性D 粗糙依赖于条件属性C,若k=0,则称决策属性D完全独立于条件属性C。

  ⑷ 依次删除原决策表T中的每个条件属性Ci,并计算删除该条件属性后的正域,= ,则说明该属性Ci在决策表中是不必要的,C-{Ci}是C的D约简,C的D核也是C-{Ci},若,说明该属性在决策表中是必要的;

  ⑸ 当所有条件属性都经过步骤⑷处理后,将不必要的属性去掉,得到了约简后的决策表T’,在约简后的决策表T’中只有四个条件属性。

3.4 BP神经网络字符分类器的设计

  神经网络许多特性通过隐含层而体现出来,以字母、数字分类器为例,构造了含一个隐含层的三层BP神经网络,包括输入层、隐含层、输出层。具体算法如下[9]:

  输入 训练样本集T,由约简后的车牌字符属性构成

  输出 识别的车牌字符

  ⑴ 初始化各层的权系数和偏置。

  ⑵ 输入训练样本:输入T中的一个样本和期望输出

  ⑶ 正向传播过程:对给定训练模式输入,计算网络的输出模式。计算公式如下:

(2)


  其中为t时刻单元i与单元j间的权系数,θi(t)为t时刻单元j的偏置,为 时刻第k-1层单元i的输出。对于输入单元来说,输出等于输入,

  ⑷ 反向传播过程:ⅰ.计算每层单元的误差;ⅱ.修正权值和各单元偏置;

  输出层单元为:

 (3)



  隐含层单元为:

 (4)



  权系数修改:

(5)

(6)



  ⑸ 判断是否满足要求,若满足,算法结束,不满足,返回⑵(算法中m=3)。

4、字符识别实验及结果


  实验的编程环境是MATLAB7.0,车牌字符样本来自于随机拍摄,样本总数为300幅,训练样本为200幅,测试样本为100幅。训练次数为 1000次,网络的权值和阈值为随机选取,各层的激活函数依次为双曲正切S型函数tansig.m和线性函数purelin.m。本文采用了附加动量法, 各参数依次设定为:误差目标goal=10-3;学习速率η=0.1;学习速率的递增乘因子η_inc=1.15;学习速率的递减乘因子 η_dec=0.8;动量因子mc=0.95。图2为其中一幅车牌的识别结果。



图2 字符识别结果



  实验前每幅车牌均经过定位、预处理、分割和归一化等处理。然后分别经过三种不同方法构造的分类器,其中一种是直接用BP神经网络构建的分类器,另外一种是直接用粗糙集构造的分类器,最后一种是本文所提出的方法。实验结果如表1:

表1 实验结果



  从表1的约简结果和识别结果可见,只用BP神经网络得到的识别率是最低的,后两种方法识别率接近,说明增加属性冗余度对这粗糙集的影响不太大,但是利用粗糙集消除冗余属性有助于提高神经网络的识别率,进而提高网络的泛化能力。

5、结论

  只用BP神经网络构造分类器,神经网络不仅结构复杂,训练时间长,而且识别率较低;只用粗糙集构造车牌字符分类器,能够有效约简冗余属性,简化了决策 算法,提高了运行时间,但是算法自适应能力较弱;用粗糙集优化神经网络可以提高网络的泛化能力,简化网络结构,缩短训练时间,而且在识别率方面也有很大提 高。该方法对于正常无损坏车牌,识别率很好,对于长时间受外界因素影响而损坏的车牌,识别率还有待提高。(转自中华电子网)

2008年12月28日星期日

基于AdaBoost的车牌字符识别模型研究

作者:李晶、陈媛媛  单位:中北大学信息与通信工程学院、山西省光电信息与仪器工程技术研究中心  转载:仪器仪表学报

1、引言

  车牌字符识别是车牌识别系统中重要组成部分之一,是模式识别的一个应用领域,车牌字符样本集是字符集合的一个有限子集,包括汉字约50个,字母A– Z,数字0–9,属于特定的有限字符集识别问题。目前最常用的车牌字符识别方法主要有模板匹配法、基于字符特征的识别方法和神经网络法等。模板匹配法简 单,实用于一些特定情况,如尺寸固定、车牌位置水平不发生旋转等情况,当车牌字符图象轻微扭曲变形、笔画粗细不均甚至缺损断裂时,容易产生误识别。文献1 作者把K近领法用到车牌字符识别中,K近领法是典型的统计学习方法,在分类领域中经常用到,主要思想是先对待识别字符进行特征提取、建库,然后计算待测样 本的特征与模式库中特征的相似度,最后根据判别函数来识别待测样本属于哪一类。基于字符特征的识别方法主要有PCA法和ICA法,文献2就是采用了独立分 量法(ICA)对车牌字符进行识别。神经网络方法具有较强的并行数据处理能力、容错能力和泛化能力。但是神经网络是一种弱学习算法,分类精度也不高,文献 3针对这一弱点提出了一种改进的BP神经网络方法用于车牌字符识别中。

  Boosting是一种框架算法,它主要通过对样本集的操作来生成一系列分类器。理论证明,只要每个弱分类器分类能力比随机猜测略好,当弱分类器个数趋向于无穷时,强分类器的错误率将趋于零[4]

  基于以上分析本文提出一种基于AdaBoost的车牌字符识别方法,该方法把BP弱分类器置于AdaBoost框架中,通过AdaBoost框架对样 本的操作,T次迭代后,产生n个分类器,然后AdaBoost算法将这n个分类器进行加权融合,最终产生一个分类器,实验证明该分类器具有较高的识别率。

2、Boosting算法

2.1 基本概念

  分类器(classifier):在已有数据的基础上学会一个分类函数或构造一个分类模型。该函数或模型能够把数据库中的数据记录映射到给定类别中的某一个,从而可以应用于数据分类或预测。分类器实质是一个数学模型。

  训练集(training set) 由一组数据库记录或元组构成,每个记录是一个由有关字段值组成的特征向量,训练集是构造分类器的基础。

  测试集(testing set) 由已知属性的样本组成的集合,作为测试过程的输入数据。
PAC模型 Probably Approximately Correct,一种近似学习模型[5]

  弱分类器(weak classifier) PAC学习模型中,对一定分布的训练样本给出弱假设判断(识别错误率小于1/2,即准确率仅强于随机猜测)。

  强分类器(strong classifier) PAC学习模型中,若存在一个多项式级的学习算法来识别一组概念,且能够给出稳定的高识别率的分类器(识别准确率很高并能在多项式时间内完成)。

2.2 Boosting算法

  Boosting是提高预测学习系统预测能力的有效工具,由Freund和Schapire于1990年提出,其代表算法分为AdaBoost和Boost-by-majority两个系列[6]。 Boosting算法通过对训练集操作产生多个假设,建立分类器集合。AdaBoost在训练集上维护一套概率分布,通过成员分类器在训练集上的错误率来 调整训练集上的概率分布。权重改变的作用使得被误分的例子上放置更多的权重,在分类器正确的例子上减少其权重,最后通过每个分类器的加权投票建立最终分类 器。Boosting算法一般用于提高不稳定的分类器的性能。

  Boosting算法速度快,简单,易于编程,除了迭代次数 外不需要调整参数。它不需要弱分类器的先验知识,因此可以灵活地和任意方法结合寻找弱假设。

3、AdaBoost算法分析

3.1 AdaBoost算法

  AdaBoost(Adaptive Boost)算法是Freund和Schapire于1995年提出的[7],该算法是Boosting家族算法中具有代表性的算法,其基本思想是:

  ⑴给定弱分类器和训练集 ,xi ∈X表示样本集合,该集合带有类别标号,,此时表示二值分类问题,是多类问题的扩展,+1表示正例,-1表示反例;

  ⑵初始化,训练集初始分布为1/m,每个训练例的权重为1/m;

  ⑶调用弱分类器,对训练集进行训练,得到弱假设序列:hi
  
  ⑷经过T次迭代,每次迭代根据训练错误率更新训练集权重,给错误分类的训练例赋予较大权重,此后按照新的分布进行训练;从而得到新的假设序列h1,h2...ht。

  ⑸经过带权重的投票方式最终得到一个假设H。

  带权重的投票方式可以自动调整H的精确性,给定弱分类器的前提下,随着迭代次数的增加,最终得到的假设 的错误率按照指数规律递减[7]

3.2 算法理论分析

  Freund和Schapire证明了AdaBoost生成的最终分类器的训练误差最大为[8]

(1)
  其中εt为ht的训练误差,,公式(1)表明只要弱分类器稍好于随机猜测,训练误差将随 按照指数规律递减。AdaBoost之前的Boosting算法要求预先知道γt的下限,在实际问题中这一点很难做到。AdaBoost算法没有此要求。

  Freund和Schapire还利用VC维从训练误差角度分析Boosting的泛化误差(generalization error),VC维是学习算法的复杂度以及学习能力的度量[8],假设训练集中样本个数为m,弱分类器的VC维为d,迭代次数为T,则泛化误差最多为:

(2)
  表示对训练集的经验概率。公式(2)说明若训练迭代次数过多,Boosting将导致过适应即退化现象(over-fitting)。因此必须恰当选择迭代次数T。

4、车牌字符识别系统建模

  车牌字符识别是车牌识别系统中的核心内容,一般车牌字符识别包括如下步骤:首先对采集到的车牌图象进行定位、预处理、字符分割以及归一化处理等,每个 字符变成大小相同的字符,然后在归一化后的二值图象中进行特征提取,属性优化,最后用优化后的属性作为经AdaBoost提升后的BP神经网络的输入,构 造神经网络字符分类器。字符识别原理如图1。


图1 字符识别原理

4.1 提取字符特征

  字符特征的提取有多种方法,目前常用的方法有:逐像素特征提取法、骨架特征提取法、垂直方向数据统计特征提取法、13特征点提取法、粗网格特征提取法 等。本文采用粗网格特征提取法对归一化的二值图象进行特征提取。首先把字符平均分成16×16个网格,再把这16×16个网格的字符平均分成16个4×4 的象素大小的子图象,统计每一份内黑色像素点的个数,而每个网格反映的是字符的部分特征,所以需要把所有网格组合起来作为字符的统计特征,最后得到 16×16维的字符特征。然后以这16个特征作为条件属性,字符的种类作为决策属性。条件属性集为,属性值集合为,决策属性集为,即字符的真实值。决策表构造好之后用粗糙集对属性进行约简、优化,限于篇幅不再赘述。

4.2 AdaBoost算法提升BP算法

  具体算法如下[7] :

  输入 训练集,由车牌字符属性构成


  类标号:,训练集分布D,迭代次数T。

  弱分类器:BP神经网络。

  初始化 赋予训练集初始分布

  For

  Step1:调用BP弱分类器,使用分发权值向量Dt训练BP弱分类器,得到假设

  Step2:计算ht的错误率:
(3)
  若εt>0.5,则设T=t-1并退出循环。

  Step3:置(4)

  Step4:计算新的权重向量:

(5)
  输 假设:

(6)
  没有先验知识的情况下,初始分布为等概率分布,分发权值向量Dt总和为1,ωt为分类器权值,准确率越高分类器权重越大。

5、字符识别实验及结果

5.1 实验设计

  本实验分为两步:即训练和识别。首先用AdaBoost算法对BP分类器进行训练,经过T 次迭代后得到分类规则H,然后用H对测试集分类,给出分类结果。具体方法如下:

  训练阶段:⑴训练集即车牌字符属性集作为输入,m为训练样本集样本个数;⑵初始化权重分布;⑶用BP神经网络训练得到弱假设ht;⑷计算ht的错误率:⑸根据错误率调整权重;⑹计算新的权重;⑺重复⑶~⑹ T次;⑻得到新规则h1,h2,...,ht;⑼采用权重投票方式得出最终分类规则H。

  识别阶段:⑴测试集也为车牌字符属性集作为输入n为测试集样本个数;⑵用上述训练得到的规则H进行识别;⑶得出识别结果。

5.2 实验结果

  实验中,车牌字符样本来自于随机拍摄,样本总数为300幅,训练样本为200幅,测试样本为100幅。训练次数为1500次,网络的权值和阈值为随机 选取。BP网络采用三层结构;输入层、隐含层、输出层,各层的激活函数依次为双曲正切S型函数tansig.m和线性函数purelin.m。对优化后字 符属性做了如下实验:⑴BP神经网络识别;⑵BP算法作为弱分类器用AdaBoost提升后进行训练识别的方法,⑶模板匹配法作为弱分类器用 AdaBoost提升后进行训练识别的方法。

  实验目的:⑴比较用AdaBoost提升前、提升后识别准确率的变化;⑵比较不同弱分类器用AdaBoost提升后识别准确率的变化。

  实验前每幅车牌均经过定位、预处理、分割和归一化等处理。然后分别经过上述三种不同方法构造的分类器,实验结果如表1:

表1 实验结果

  从表1的识别结果可见,只用BP神经网络得到的识别率是最低的,而且训练迭代次数较多,说明用AdaBoost算法提升弱分类器比单一分类器分类效果 好,而后两种方法中BP神经网络作为弱分类器比模板匹配作为弱分类器效果好,这说明了运用AdaBoost框架算法最终识别效果还和弱分类器的选择有关, 另外从平均识别时间角度看,本文提出的算法识别时间是最短的。

6、结论

  AdaBoost框架算法具有速度快、简单等优点,除了迭代次数 外不需调整参数,不需要弱分类器的先验知识,可以灵活地与任意算法结合寻找弱假设,给定足够数据以及一个中等精度的弱分类器,它可以把该弱分类器提升为强 分类器,从而提高识别效果,但是AdaBoost框架算法也有不足之处,当样本存在较大噪声或者有错误样本时,训练所得规则偏向这个假样本,进而导致分类 器对其它正常数据不能准确分类,发生退化现象,如何避免这种情况发生,是今后的工作重点之一。

参考文献

  [1] 杨晓敏,何小海,吴炜,陈默,薛磊.一种基于相似度判据的K近邻分类器的车牌字符识别方法[J].四川大学学报(自然科学版),2006,43(5):1043-1047
  [2] 李旻,吴炜,杨晓敏,周红,龙建忠.基于独立分量分析的车牌字符识别[J].四川大学学报(自然科学版),2006,43(6):1259-1263
  [3] 胡乃平,王丽,周艳平.一种改进的BP算法及其在车牌识别中的应用[J].微计算机信息,2006,22(9-1):313-314
  [4] Lebanon G., Lafferty J., Boosting and maximum likelihood for exponential models [A]. Advances in Neural Information Processing Systems[C],2001
  [5] Valiant L G., A Theory of the Learnable. Communication of the ACM 1984,27(22):1134-1142
  [6] Schapire R. E., The Strength of weak Learnability. Machine Learning, 1990,5(2):197-227
  [7] Freund Y., Schapire R. E. A., Decision-Theoretic Generalization of On-Line Learning and an Application to Boosting Journal of Computer and System Sciences,1997,55(1):119-139
  [8] Schapire R. E., Freund Y., Bartlett P., Lee W. S., Boosting the Margin: a New Explanation for the Effectiveness of Voting Methods The Annals of Statistics,1998,26(5):1651-1686
  

2008年12月15日星期一

史蒂夫•乔布斯与禅宗美学

史蒂夫•乔布斯与禅宗美学
此段文字节选自《演说之禅:职场必知的幻灯片秘笈》一书

苹果公司的创建者之一、公司现任CEO史蒂夫•乔布斯是当今全球商业领域中最优秀的演说者之一。乔布斯的演说思路清晰,主题明确,内容简约、扣题,广为外 界好评与称赞。人们在他的演说过后还会时常津津乐道于其中的某些内容,饶有兴味地回顾一番。这些都得归功于乔布斯采用的简单明了、易于理解的演说原则,使 得媒体、观众和用户无不留下深刻的印象。如果你都不知道演说的内容,又如何与人交流呢?无论在语言上还是视觉上,乔布斯的公开演说无不让人觉得清晰明确, 印象深刻。而这正是一名伟大领袖杰出的表现。本•麦康奈尔(Ben McConnell)和杰基•休芭(Jackie Huba)在《C行销:如何让客户成为企业产品及服务的福音传播者》(Creating Customer Evangelists)一书中这样评价乔布斯:
“乔布斯正做出了一位领导者所应该做的:阐明公司的理念,确保每个人都理解。”
乔布斯在演说时使用的许多幻灯片都能体现清晰和透彻的特点。毫不夸张地说,他设计的幻灯片无不符合禅宗的美学原则,即:约束,简约,智慧而有力地利用留白。
当今最杰出的商人之一兼慈善家——比尔•盖茨,却是反面教材的典型代表。他和其公司员工在进行幻灯片演说时,使用PPT的方式和其他成千上万的人一样,却 无法获得应有的效果或达到演说的本来目的。他们犯的毛病很普遍:在一张幻灯片上放了太多的东西,使用了过多的列表(包括长句)、配色以及蹩脚的图片,视觉 信息也不够突出,因此总体给人留下不佳的印象。
史蒂夫•乔布斯和比尔•盖茨为了辅佐演说都会使用幻灯片。两者的最大区别是,前者使用的幻灯片会占据演说的较大部分。但这些幻灯片并没有把乔布斯压得喘不 过气来,反而成了他演说中必不可少的部分。对乔布斯来说,幻灯片的作用已经超出了简单的提示或者修饰作用,更重要的是,能够帮助他更好地讲述故事和完成演 说。同时,乔布斯在演说时十分注重与观众进行自然而坦率的互动,这也是为什么他很少朝着荧屏、背对观众讲话的原因。其实,乔布斯的演说倒和乔治•卢卡斯的 电影有着许多相似之处,比如荧屏都是被用来协助他们讲述故事的。只不过乔治•卢卡斯使用的是演员、画面以及特效去传达思想,而乔布斯则用幻灯片和话语去自 然地阐述故事,两者的搭配往往天衣无缝。
相比乔布斯,比尔•盖茨的幻灯片有时就缺乏简约之美,导致无法取得应有的效果。盖茨使用的有些幻灯片根本就是多余的;多数情况下只是作为装饰和点缀罢了。 在许多情况下,他其实只要搬个凳子坐下来,和听众一起分享自己的想法,并回答他们提出的问题就行了,那样的效果可能会更好。并不是所有的演说都要使用幻灯 片,不过一旦采用,它们就应该成为演说内容的一部分,而不是无关的装饰或点缀。
我很喜欢比尔•盖茨,听微软的员工说他为人友善,和他谈话也特别惬意。但那只是一对一的情况。当要做公开演说且要用到幻灯片的时候,他还有许多要向乔布斯 学习的,学习后者如何做出与众不同的演说。其实比尔•盖茨的演说不能说差,可以用“中庸”和“传统”来形容。但比尔•盖茨本身是个与众不同的人,他的演说 自然也应超凡脱俗。
如果你打算在一大群人面前大谈公司战略或内置软件等重要话题的话,你所配合使用的幻灯片至少也应是深思熟虑后的产物,而不是仅仅将其作为装饰或点缀。

2008年12月7日星期日

小波:看森林,也看树木

小波:看森林,也看树木

Wavelets: Seeing the forest and the trees

摘自博客:http://www.china-vision.net/blog/user1/8/index.html

19981115这一天,Walt Disney Pictures Pixar Animation Studios一起发布了一部全部由计算机漫画而制的电影,名字叫《一只甲壳虫的生活》(A Bug’s life),这是DisneyPixar的第二次合作,跟三年前制片人Toy Story的突破一样,它开创了一个新的视角。一位评论家说:“《一只甲壳虫的生活》有许多漂亮的视觉创新,有错综复杂的细节,会使得大人们跟小孩子一样,从开始到结束都在观看;而且还从一些新的、迄今没有的柔和光谱中折射出的搞笑颜色。”

只 有最懂计算机图形学的常看电影的人才会提出许多数学建模的想法,这会使得在生动的蚂蚁故事中有可能发展所有特性,更不用说它们的许多结构,它们的无数的表 情,还有它们跳跃、迁徙和围绕在一起鸣叫的方式。尽管这也出现了,一种特殊的建模技术使得它在电影中首次应用。一种计算机漫画方法是充分利用了一种叫做小 波的数学程序的聚集性。

思 考小波的一种方法是考虑我们的眼睛是怎样看世界的。在现实世界中,你能在不同效果下和不同的分辨率下观察一座森林,就像在看一幅幅图片一样,比如,从一架 飞过乡村的喷气式飞机的窗口看去,森林就是一张绿色的遮蓬;从一辆地上的车子的窗口看,“遮蓬”又成了许许多多的树,而且如果你停下车,走的更近去看,你 就会看到树枝和树叶,然后你用一个放大镜再去看,你可能又会在一片叶子的尾端发现挂着一颗露珠。随着你不断地缩小尺寸,你能发现你以前不曾看到的细节。之 后,用一张照片再去像刚才那样去做,你会很失望。放大照片去更接近一颗树,你看到的是一颗更模糊的树,树枝、树叶以及叶子上的露珠就看不到。尽管我们的眼 睛能在不同分辨率下看到森林,但是照相机却只能一次拍一幅照片。

计算机做的并不比照相机好。事实上,它们的分辨率级别是很低的。在一个计算机场景中,图片变成了一个像素集合体,这些像素比原始的粗糙的多。

然而,不久各处的计算机将能做摄影家做梦都想做的事情。它们将能显示一座森林的交互式图像,就是观察者能放大去得到树木,树枝,甚至更为详细的树叶。它们之所以能做到是因为小波能压缩用来存储一幅图像的数据量,为一幅更详细的图像分配更少的空间。

尽 管作为一个组织的研究话题,小波还不到二十年,但是它从很多相关的概念发起,其间发展经历了两个多世纪,不断地被那些想在它们各种各样的约束中解决技术问 题的科学家重新发现。信号处理器开掘了在电话线上传输清晰信息的道路,石油勘探家想要一个解释地震踪迹的更好方法。这时小波还没有成为在科学家中家喻户晓 的词,直到其理论从众多的应用中解放出来,并且被合成一个纯数学理论。反过来说,这个合成物打开了科学家发现新应用的视野,比如,在今天,小波不仅应用于 计算机图像处理和模仿,而且也被FBI用来编码三百万的指纹数据。在将来,科学家们会利用小波分析去诊断乳腺癌,寻找心脏异常性和预报天气。

改变现实(Transforming Reality

小 波分析允许研究者们去隔离和操作隐藏在众多数据之中的模式的特殊类型,我们的眼睛能以同样的方法在森林中挑出树木,或者我们的耳朵能在交响曲中分辨出笛 声。理解小波是怎样做这个的一种方法是开始在两种不同声音之间,比如叉子的音调和人声,找出不同点,之后敲打叉子,你会听到一种持续很长时间的纯音调。在 数学理论中,这样的音调称为频率局部化,它由单个无更高频率音调的音符组成。相比之下,一个人说的话仅仅持续一秒钟,因此称为时间域局部化,它在频率域里 没有局部化是因为说的话不是一个单音调,而是有许多不同频率的音调结合在一起的音调。

19世纪,数学家认为现实中的叉子音调是完美的,这个理论就是著名的傅立叶分析。Jean Baptiste Joseph Fourier, 一位法国数学家,在1807年声称任何反复波形(或者周期函数),像叉子发出的声波,能被一个无限的各种频率的正弦波和余弦波之合来表示。

傅 立叶理论的一个熟悉阐述是在音乐中发生的。当时一位音乐家演奏一个音符,他创造了一个不规则形状的声波,同样形状的波,只要音乐家持续演奏这个音符会不断 重复。因此,通过傅立叶,这个音符被分解成正弦波与余弦波之和。最低频率的波称为这个音符的基频,最高频率的波称为泛音(overtones),比如,A音符在小提琴或长笛上演奏,就有一个周期为440HZ的基频和一个周期为880HZ1320HZ等等的泛音,即使用小提琴和用长笛演奏同一音符,它们听起来也会不同,因为它们的泛音有不同的强度或幅度。正如在20世纪60年代音乐合成家阐述的一样,小提琴或长笛的一个信服的模仿能通过重新合并合适幅度的纯正弦波来完成。当然,这是在1807年傅立叶所预测到的。

之 后数学家们把傅立叶思想扩展到非周期函数(或波形),它们会随着时间不断改变,并不是重复同样的形状。最现实的波形是这样的类型:一辆摩托车先加速,然后 减速,不断往复这样发出的声音。在图像中也是一样,在重复和不重复之间的区别是重要的,一个重复的模式可能被视为纹理或背景,而不重复的会被看作对象而被 挑选出来。周期性的或重复的波由一系列离散的泛音组成,它们能被用于表示一幅图像中的重复的模式。非周期特征涉及到更多的复杂的频率谱,称为傅立叶变换, 正如太阳光能被分离成不同颜色的光谱。The Fourier transform portrays the structure of a periodic wave in a much more revealing and concentrated from than a traditional graph of a wave would. 举例来说,摩托车发出的声音在傅立叶变换中,在一个特定的频率下会显示出一个峰值。

傅立叶变换一直在被关注。在19世纪,傅立叶在物理学和工程学上解决了许多问题。它的主导地位使得科学家们和工程师们把它作为分析任何现象的完美方法。这个普遍看法迫使了一个对这个方法的封闭检查。结果在20世纪,数学家、物理学家和工程师发现了傅立叶的缺陷,即傅立叶变换在重造瞬间信号和有突然变化的信号时存在困难,比如说出的话或轻敲鼓的声音。音乐合成家仍然不能匹配音乐厅里小提琴家的演奏,因为小提琴家的演奏含有暂态的特征,比如弓与弦的接触,这些用正弦波很难表示。

这个问题里面的原理能有著名的Heisenberg Indeterminacy Principle来阐述。在1927年,物理学家Werner Heisenberg认 为从理论上讲一个物体的位置和速度不能同时被精确地测量。用信号处理来说,意思是在一个信号要同时知道某精确频率和该频率发生的精确时刻是不可能的。为了 知道它的频率,信号必须按时延拓,反之亦然。在音乐形式里,意思是任何有短暂持续时间的信号必须有一个复杂的频谱,它由各种各样的正弦波组成。反过来说, 任何由一些正弦波简单合成的信号必须在时间域里有复杂的呈现。因此,我们不能期望用叉子的管弦乐来重造鼓发出的声音。

无名主意(An idea with No Name)

整个20世 纪,不同领域的科学家,为了允许数据的表达适合信息的本性,他们都在努力挣脱这些限制。从本质上讲,他们既想获得低分辨率下的森林,即重复的背景信号,也 想获得高分辨率下的树,即背景中个别的局部变量。尽管科学家都试图去解决这个问题,特别是他们研究的领域。他们开始得出了一个相同的结论,就是傅立叶变换 自身的缺陷;他们也有了共同的解决方法,即把信号分割成没有纯正弦波的组件,它将有可能浓缩时域和频域的信息。这就是将要称之为小波的思想。

第一个进入小波的是一个名叫Alfred HaarHungarian数学家,他在1909年发明了现在称为Haar小波的函数。这些函数由简单的短时正负交替脉冲组成。尽管Haar小波的短时脉冲作为小波理论来教会很好,但它们对大多数应用来说是无用的,因为它们有明显的跳跃线而不是平滑的曲线。例如,用Haar小波重构的图像像一个廉价的计算器显示,而且一个长笛声音的Haar小波重构太刺耳。

在接下来的几十年里,小波理论的其他先驱者时而不时地发表一些理论文章。在20世纪30年代,英国数学家John LittlewoodR.E.A.C Paley发明了一种通过octaves群组频率的方法,这样可以创造一个有很好频率局部化的信号(它的频谱在于一个octave之间),而且在时间域里也相对的局部化。在1946年,一位British-Hungarian物理学家Dennis Gabor发明了Gabor变换,类似于傅立叶变换,它把一个波分割成时间频率包或者相邻的状态,最大可能地同时在时间和频率里具有局部化。在20世纪70年代和80年代,信号处理和图像处理组织发明了他们自己的小波分析版本,接着称为“子带编码”,“积分镜像滤波器”和“金字塔式算法”。

虽然不是完全一样,但所有这些技术有相似的特性,它们把信号分解或转换成能在任何时间间隔局部化的组件,也能拉伸或连接一起来分析不同分辨率下的信号,这些小波的先驱还有另外一个共同点,即除了个别的专门组织外,没有人知道它们。但到了1984年,小波理论终于出现了。

伟大的合成(The Great Synthesis

Jean Morlet不打算去开始一个科学方法的研究,他仅仅是试图去帮地质学家找到一个更好的勘探石油的方法。

石油地质学家通常通过大的噪声来定位地下石油的开采点。因为声波经过不同的材料,其传输速度是不一样的,地质学家能推断出地表下的哪种材料能传送地震波到地面,并且测量它们有多快反射。如果这种波能非常快的通过一层,它可能是一个盐包,它包裹着地下石油层。

要 描绘出地质学家是怎样传输一个声波的,这是一个机灵的数学问题。工程师通常用傅立叶分析来解决这个问题。不幸的是,地震信号包含许多暂态量,像波形从一个 岩石层传到另一个岩石层发生的突然改变。这些暂态量包含地质学家寻找的信息,通常是岩石层的位置信息,但傅立叶分析会把空间信息延拓到所有位置。

一位Elf-Aquitaine工程师Morlet发明了分析地震信号的自己的方法,它创造了在空间定位的组件,他称之为“不变形状的小波”(wavelets of constant shape),它们因Morlet小 波而闻名。不论这些组件在时间域里被拉伸、压缩、或平移,它们都维持相同的形状。小波的其他家族都能采用一个不同的形状来建造,称之为母小波,可在时间域 里拉伸、压缩和平移。研究者发现母小波的精确形状严重影响着近似的精度和压缩特性。早期版本小波之间的许多不同之处简单地可归结为母校包的选择不同。

Morlet的方法不在课本中,但似乎很有效。在他个人计算机上,他能把一个波形分成小波包,然后把它们重新集合成原始波形。但他不满足于经验证据,开始询问其他科学家,这种方法是否有数学依据。

MorletAlex Grossmann那里找到了他想要的答案,他是一位位于Centre de Physique Théorique in Marseilles的物理学家。在这一年里,GrossmannMorlet一起工作来证实波形能够从它们的小波分解中重构。事实上,小波变换被证明比傅立叶变换优越,因为小波变换对计算中的错误不怎么敏感。傅立叶系数的截断或一个错误能把一个平滑信号转变成跳跃的信号,反之亦然,小波就可以避免这灾难性的后果。

MorletGrossmann1984年发表的文章首次使用“小波”这个词,当时还在École Normale Supérieure de CachanYues Meyer,他是个广受尊敬的小波理论的发现者之一,在这年秋天听说了前面两位的文章。他第一个认识到Morlet小波与早期的数学小波之间的联系,比如在LittlewoodPaley的著作中的那些。(的确,MeyerMorletGrossmann的文章发表之前已经计算了16个分离的小波概念的重现)

Meyer继续发明了一类新小波,具有数学上的正交性,这使得小波变换很容易地像傅立叶变换那样操作。(正交性就是被一个小波俘获的信息对另一个小波俘获的信息是完全独立的)也许更重要的是他成了融入小波组织的纽带。

1986年,Meyer的学生Stéphane Mallat,当时正在攻读计算机领域的博士,把小波理论与已经存在的子带编码和积分镜像滤波器联系起来,组成了图像处理组织的小波版本。多分辨率分析的思想就是在不同尺度的分辨率下看信号,这个对图像处理领域的专家已经很熟悉。MallatMeyer的帮助下得出了小波在多分辨率分析过程中的隐蔽性。

幸亏Mallat的工作,小波变得更容易。一个不知道母小波公式的人就能做小波分析。分析过程简化为简单的操作,就是把像素一起平均分组,反复不断地找出它们的不同之处。小波语言对那些对像“滤波器”,“高通频率”,“低通频率”这样的词汇熟悉的电子工程师来说也更简便。

小波方法的最后的伟大部分是在1987年开始来做的,当时Ingrid Daubechies 正在纽约大学的Courant 研究院访问,之后又到在AT&T的贝尔实验室赴约,她发明了一类新小波,它们不仅正交(像Meyer小波一样),而且能用简单的数字滤波器的观点来实现,事实上是用短数字滤波器,这类新小波能跟Haar小波一样地去编程和使用,但却没有Haar小波的跳跃。现在的信号处理器有一个理想工具,就是把数字或数据分解成各种尺度下的contributions的方法。结合DaubechiesMallat的思想,这有一个简单的正交变换,能够用现代数字计算机快速的计算。

Daubechies小波有惊奇的特性,比如与分形理论有着亲密的联系。如果放大它们的波形,不管放大多大倍数,都能看到有特征的锯齿形摆动(characteristic jagged wiggles)。细节的精致复杂性意味着对这些小波来说有不简单的表达式,它们是难看的和不对称的,19世纪的数学家会从惊骇中反驳它们。但是像Model-TFord,它们因有用而漂亮。Daubechies小波把理论转化成实践工具,能被很容易地编程,能被只有很少数学训练的任何科学家使用。

小波是怎样工作的?(How Do Wavelets work?

到目前为止,小波的最多应用(“Killer app”)一直是数字图像压缩。它们是新JPEG2000数字图像标准的核心,WSQ(wavelet scalar quantization)方法被FBI用 来压缩指纹数据库。在这个里面,小波被认为是图像的建造用的砖。一幅森林图像能从最宽的小波中获得:森林的一列绿,天空的一抹蓝。更为详细的是,更锐利的 小波能帮助辨别树,用更精细的小波可把树干和树枝添加到图像中。像一个绘画用的单个笔刷一样,每个小波不是图像本身,但是众多小波在一起就能重建任何东 西。不像绘画中的一支笔刷,一个小波能被做成任意小;一个小波没有物理尺寸限制是因为它在计算机内存中是以一系列简单的01存储的。

与普遍的想法相反,小波它们本身不能压缩一幅图像,它们的工作是使压缩成为可能。要理解为什么,先假设一幅图像被一系列间隔的数字所编码,比如13798862。如果每个数字代表一个像素的亮暗程度,用0代表白,15代表黑,则这个字符串代表某一类在一个亮度背景下(1的,2的和3的)对象(7的,8的和9的)。

多分辨率分析最简单形式对图像的滤波是通过把每一个相邻像素值平均。在上面的例子中,字符串结果是2884:一个低分辨率图像仍然显示一个亮背景下的灰度对象。如果我们想从这里去重构一幅原始图像的退化版本,我们就需要重复每个数字,即为22888844

然而,假设我们想去完美的重现原始图像。我们在第一步中就必须保存一些附加信息,就是从低分辨率信号去获得高分辨率信号所能添加或减去的一个数字集合。这这个例子中,那些数字是-1,-1,0,2。(例如,把-1加到退化图像的第一个像素,则原始图像的第一个像素为1;用退化图像的第二个像素减去-1,就是原始图像的第二个像素)

因此多分辨率分析的第一级把原始信号分割成低分辨率部分(2884)和一个高分辨率部分或细节部分(-1,-1,0,2)。这高频率细节也成为Haar小波系数。事实上,整个程序就是在1909年发明的Haar小波变换的多分辨率版本。

似乎不能认为小波变换的第一步已经得到所有。原始信号中有8个数字,变换中仍然有8个数字。但在典型数字图像中,大部分像素都与它们的邻像素非常相似:Sky pixels will occur next to sky pixels, forest pixels next to forest pixels。这意味着相邻像素的平均值将最有可能与原始像素值一样,因此细节系数的大多数会是0,或者非常接近0。如果我们把那些系数简单近似为0,我们需要的仅有信息就保留在低分辨率图像加上没有近似为0的一些细节系数之上。因此,需要存储图像的数据量已被压缩了将近一半。把高精度数字近似成只有更少数字的较低精度的过程称为量化(WSQ中的Q

变换和量化过程可以重复多次,每次以2的倍数来减少信息比特数,而且还平滑地降低图像的质量。根据用户的需求,这个过程可在更低分辨率开始出现之前停止,或者继续下去获得具有越来越精确细节的超低分辨率图像。用JPEG2000标准,在图像质量没有视觉上变化下可压缩到2001。这样的小波分解可以通过一次平均多于2个邻像素值来获得,例如,最简单的Daubechies小波变换组合4个像素组成的组,用6个,8个甚至更多个来平滑一个。

小 波的一个令人着迷的特性是它们能跟我们人眼一样自动挑出相同的特征。那些量化后留下的小波系数与那些特别不同于邻像素的像素是对应的,比如一幅图像的边 缘。因此,小波大多数是从图画边缘来重造图像,这些图画边缘是人们在描绘一张图画时所画的。的确,一些研究者指出小波变换与人类视觉之间的类似不是偶然 的,那是我们的神经以与小波类似的方法对视觉信号进行滤波。

将来的小波(Wavelets in the Future

随着小波理论的基础建立起来,这个领域在随后的时间会有飞速的发展。关于小波的研究名单从1990年的40人到目前在线时事通讯的投稿人超过了17000人。而且,它还会通过理论与实践的结合继续进化。工程师不断地在尝试新的应用,对数学家来说,仍有重要的理论问题需要解答。

尽 管小波在图像压缩里面很出名,但许多的研究者对把小波用于模式识别感兴趣,比如,在天气预报中,它们能减少计算机模型带来的庞大数据。从传统上讲,这些模 型对气压在巨大的数据表格点上进行采样,然后用这些信息预测这些数据将会怎样变化。然而,这种方法占用了大量的计算机内存。一个气候模型使用一个1000×1000×1000的格子需要十亿数据点,而这仍然是一个十分粗糙的模型。

然而,格子中的大多数数据都是冗余的。在你的城镇的大气压可能与一里外的大气压一样。如果把小波用于天气模型,它们能用与天气预报采用的同样方法观察数据,关注于那些有显著变化的地方。在液体动力学的其他问题也可用同样方法来解决。比如,在Los Alamos 国家实验室,小波用于研究一颗炸弹爆炸所产生的震荡波。

正如近期上演的计算机漫画的电影所描述的一样,小波在电影里也有着明媚的未来。因为小波变换是一个可逆过程,它能容易地合成一幅图像,也能容易地分析它。这种观点与一种新计算机漫画方法有关,这种方法称为Subdivision Surfaces,基本上是在逆变换中使用多分辨率分析:为了画一个卡通人物,漫画家仅仅需要指定一些关键点的移动路线,就能创建一个低分辨率的人物。然后计算机做可逆的多分辨分析,使得人物像一个真人一样,而不是一个呆板的图画。

Subdivision Surfaces1998年的电影《一只甲壳虫的生活》中得到应用,取代了NURBs的笨拙方法。NURBs方法在1995年的一个Toy Story电影中使用过。有趣的是,在1999年的Toy Story2中用到了这两种方法,在里面Toy Story1中的人物保留了NURBs,但是新人物是基于Subdivision Surfaces的。Subdivision Surfaces的下一个领域可能是视频游戏,在这里它们都消除了今天图像里的块效应。

同时,在理论这一方面,数学家们仍然在针对二维和三维图像寻找更好形式的小波。尽管标准小波方法善于挑边缘,但是它们是一次一个像素来完成,这对表示一些非常简单的曲线或直线是效率低下的。斯坦福大学的David DonohoEmmanuel Candès提出了一种新类小波,叫做“ridgelets”,特别设计用来检测沿线的不连续部分。其他研究者正在研究多小波,能用来编码在同一条传输线上传输的多种信号,比如彩色图像中的三种颜色值在一次被传输时。

当 问到去判断数学的价值时,数学家经常指出,开发去解决纯数学问题的观念在若干年后会产生不可预料的应用。但是小波的故事描绘出更复杂和更有意思的画面,在 这种情形下,特定的应用研究会产生新的理论合成,反过来也会开拓科学家开发新应用的视野。小波的更广泛的含义是我们不应当把基础应用科学作为研究的终点, 好的科学需要我们既看到理论上的森林,也看到实践中的树。

后记:对这篇文章的再次翻译原于自己找不到以前翻译做过的笔记,更重要的是自己喜欢Dana Mackenzie写 的这篇小波。他没有用精密的数学公式来演绎,而是用很简洁的语言向我们阐述了小波的发展史和对小波的理解,文章深入浅出,对了解小波全貌很有帮助。“看森 林也看树木”一下子概括了小波的独有特性,这也是它优于傅立叶变换的地方。我们看到,在这短短的二十年里,小波得到了迅速地发展,从理论到应用,而且它的 应用远没有停止。自从选了图像处理与计算机视觉作为研究方向,就选了《小波分析》这门课,里面全定理和公式,很难理解掌握。但看了这篇文章,再回过头去深 入学习,发觉对小波的特性有了深刻的了解,也看到了它在图像处理中发挥出的巨大作用,自己也把小波应用于课题研究,相信在以后,小波会以它独特的优势在图 像处理领域发挥更大的作用![说明:由于个人水平有限,难免有翻译不当或错误之处,恳请您批评指正。本文翻译有我个人独立完成,如需转载,请与本人联系。]

2008年12月5日星期五

车牌模糊识别技术

转自:http://www.chinahtp.com/ProductHtml/Product20091070.htm

随 着计算机和视频技术的发展,车牌自动识别系统己成为智能交通系统的重要组成部分,并已广泛应用于车辆追查和跟踪、车辆出入控制、公路收费监控等领域。完整 的车牌自动识别系统由图像釆集、图像处理、模糊识别等模块组成,其中对一幅已知车辆数字图像进行预处理、车牌定位、二值转换、车牌分类、车牌分割、字符识 别、结果优化的过程简称车牌模糊识别。目前国内已有众多单位开展了车牌识别技术研发,虽然各家都取得一定的成功,但车牌识别技术本身毕竟要符合实战要求, 为此笔者综观各家实际车牌识别系统后提出了车牌识别系统的几点不足之处和改进方法,供该领域的专业人士和领导参考。

一、图像预处理
根 据三基色原理,世界上任何色彩都可以由红绿蓝(RGB)三色不同比例的混合来表示,如果红绿蓝(RGB)三个信号分别由一个字节表示,则该图像颜色位数就 达到二十四位真彩,也就是说在二十四位真彩的数字图像中每个像素点由三个字节来表示,根据数字图像水平和垂直方向像素点数(即图像分辨率)可计算出一幅图 像实际位图大小。事实上,在车牌自动识别系统中车辆图像是通过图像采集卡将运动的车辆图像抓拍下来,并以位图的格式存放在系统内存中。这时的车辆数字图像 虽然没有被人为损伤过,但在实际道路上行驶的车辆常会因为各种各样的原因使得所拍摄的车辆图像效果不理想,如外界光线对车牌的不均匀反射、极强阳光形成的 车牌处阴影、摄像机快门值设置过大而引起的车辆图像拖影、摄像头聚焦或后背焦没有调整到位而形成的车辆图像不清晰、由于视频传输线而引起的图像质量下降、 所拍摄图像中存在的噪声干扰、所安装的车牌不规范或车辆行驶变形等等。这些都给车牌的模糊识别增加了难度,在现有的技术条件下任何优秀、先进的车牌识别软 件也是无法达到百分之百车牌正确识别率。但我们可以对车辆图像根据不同应用特点进行识别前的预处理,尽最大可能提高车牌正确识别率,这些图像预处理包括图 像平滑、倾斜校正、灰度修正等。

其中图像平滑的目的是为了减少图像中的噪声,一般情况下在空间域内采用领域平均法来减少噪声,在频率域内 由于噪声频谱多在高频段,因此釆用各种形式的低通滤波方法来减少噪声。空间域是指对图像像素灰度值直接运算后取代,频率域是对图像的像素值进行变换运算后 反变换取代,如傅立叶变换等。实际常用的方法是通过一个像素点和周围像素点的平均运算来去除突然变化的像素点,从而滤掉一定的噪声,当然如果釆用不合适的 图像平滑算法,则会带来图像模糊。

在道路实际行驶的车辆中,车牌在图像中往往存在不水平情况,如摄像机不在车道正中央、挂放的车牌不水平 或车辆突然变道行驶等都会使采集的车牌图像需要进行车牌倾斜校正。由于车牌的上下沿是两条明显的平行线,所以一般釆用HOUGH变换,检测出这两条直线的 倾斜角,或者利用特征投影法来检测车牌的倾斜角,然后对车牌图像进行水平校正。

灰度修正也是图像增强行之有效的方法,通常采用直方图修正 法使图像具有期望的灰度分布.水平方向为像素灰度值,垂直方向为该像素值出现的数量,根据灰色图像直方图调整图像像素值的分布范围,确保图像亮度值均匀和 平滑,同时如果直方图中存在多个峰值,则按直方图峰值计算出限定阀值,然后进行分段图像处理,由此分离出背景和噪声。当然,这种车辆图像预处理过程需要有 一定的运算时间,而对于实时车牌识别系统来说,图像预处理的时间不可能太长,否则会加重内存负担,并可能丢失其它车辆图像数据。

二、 车牌定位
我 们知道车牌定位对车牌识别系统来说至关重要,在车辆图像中往往存在许多类似车牌的区域,如养路费牌、广告牌、车灯区等都容易干扰车牌的定位。常用的车牌定 位算法有(1)自适应边界搜索法利用倒L型、水平直线、垂直直线这些结构元素搜索、定位字符,然后找出符合一定格式的字符群,即认为是车牌;(2)区域生 长法是对边缘图像进行均匀性区域生长,以获得潜在的车牌区域,然后利用车牌的几何特征以及车牌区域内的边缘灰度直方图统计特征删除伪车牌,即得真实车牌; (3)灰度图像数学形态学运算法则利用车牌形状特征、字符排列格式特征,对预处理后的灰度图像进行一系列的形态学运算,得到直线与一定数目的字符相邻的区 域即认为是车牌;(4)基于字符串特征增强的分割方法釆用一种线性滤波器突出牌照区域的纹理,再釆用取阈值的方法来分割牌照区域;(5)模糊聚类法则利用 模糊逻辑系统,根据一些分类参量判别由粗分割得到的图像中不确定部分是隶属于背景还是目标,从而分割出车牌;(6)基于灰度图的车牌定位和分割法首先选取 适当的阈值用迭代法得到二值图,再根据车牌中文字笔画的垂直边缘特征做车牌定位;(7)DFT变换法是先对图像逐行做DFT变换,然后把频率系数逐行累加 平均并根据这些平均值做出频谱曲线,根据频谱曲线中的“峰”的起始点位置确定车牌水平位置,对这一水平区域逐行做DFT变换可确定车牌竖直位置。虽然上述 车牌定位算法已在实践中取得成功,但对于车辆实时监控系统来说上述方法所需的时间仍然偏长,为此我们经过大量实践后找到了基于图像差分投影法,从而将车牌 识别时间缩短到一百毫秒以内。其原理是将车辆灰色图像按水平方向求差分图,然后按垂直方向求差分,最后对差分后的车辆图像分别在水平和垂直方向投影,按照 给定的车牌尺寸范围找出可似车牌区域。

然后按照水平和垂直方向投影得出有可能的车牌区域有三个,包括两个车灯区,由于车灯区在尺寸和字符数上不符合常规车牌特征,所以即可排除,从而仅剩下唯一的车牌区域,再从灰色图像中切出真正的车牌区图像。

三、 二值转换
实 际上,在车牌定位时已经将二十四位真彩图像转换成八位灰色图像,即用一个字节表示一个像素点,而一个字节能表示256种灰度,这对提取字符特征来说仍是困 难的,需要进一步将灰色图像转化为黑白二色图像,这个转换过程就称作二值转换。常用的车牌图像二值化方法是将各个像素灰度值与一个经验值(常称阈值)相比 较,如果该值少于阈值,则灰度值取“0”(即黑色),否则为“255”(即白色).

通常根据该车牌灰色图像的直方图得到最小和最大灰度值,然后设定阈值为最小和最大灰度值的平均值,再通过这二个区域的灰度迭代出最佳阈值,该方法的具体程序见参考文献[2]P466-469页。但实际二值化需要分区进行,否则会形成字符笔画断裂和加粗等。

四、 车牌分类和字符分割
众所周知,我国车牌种类繁多,常见的车牌有民用车牌、警用车牌、军用车牌、武警车牌和个性化车牌等,按照中华人民共和国机动车号牌标准(GA36-92)规定。
从 汽车牌照的结构特点看,民用车牌最少也有八个字符,若以7×9点阵表示一个字符为例,水平方向需要7个像素点、垂直方向需要9个像素点,加上字符水平之间 必须有一定的间距,以及车牌左右和上下都有边框存在,因此车牌水平宽度在图像中所占的大小应不低于100个像素点为宜,考虑到诸如灰尘、雾、油漆剥落或颜 色变淡等缺陷对车牌的影响,用于车牌识别的最佳尺寸为水平方向不少于110个像素点、重直方向不少于15个像素点,否则容易产生车牌定位出错,即使定位出 车牌,也容易产生字符识别错误。

字符在竖直方向上的投影必然在字符间或字符内的间隙处取得局部最小值,因此字符的正确分割位置应该在上述 局部最小值的附近,并且这个位置应满足车牌字符的标准数目、字符尺寸等条件,这样就排除了在复杂环境下车牌定位错误。在水平方向上从左至右检测各坐标的投 影数值,当检测到第一个投影值不为零的坐标可视为首字符的左边界,从该坐标向右检测到的第一个投影值为零的坐标可视为首字符的右边界,其余字符的边界坐标 同理可得。通过字符的平均字宽和两字符左边界之间的平均距离去除可能存在的错误切分。对于字宽小于平均字宽一定比例(如0.2)的字符可视为无效字符;前 后两字符距离小于平均距离且此距离与字宽之和不大于平均距离,则合并之为一个字符;对于字宽大于平均字宽一定比例(如2.4)则视为两字符出现粘连,当字 符数量多于或少于车牌可能的字符数时则认为所定位的车牌无效,这就是车牌垂直分割法。

五、 字符和车牌颜色识别
1、 字符优化
按 照上述车牌定位和切割方法很方便取得单个字符图像,不过此时的字符图像也可能存在字符与边框相连、字符变形和字符断裂等情况,为此在真正识别之前需要对字 符位图作进一步的技术处理,如下图车牌二值图经水平方向腐蚀后明显有利于图像分割和识别,但对于黑底和蓝底的车牌则适得其反。常用的方法是将用于识别的字 符位图按新的点阵大小重新采样,然后搜索字符位图的精确上下左右边界值,依照字符位图的宽高值和新的边界值重新确定字符像素点,并排除非字符情况,如左右 边界值之差过小、上下边界差过小等情况即认为非字符,用“?”取代。

2、 字符类型
设定类型0为民用车汉字,包含“京、津、晋、 冀、蒙、辽、吉、黑、沪、苏、浙、皖、闽、赣、鲁、豫、鄂、湘、粤、桂、琼、川、贵、云、藏、陕、甘、青、宁、新,渝” ;类型1为英文字母,包括除“I”外的“A—Z”其他字母;类型2为数字,包括“0—9”;类型3为数字和字母,包括类型1和类型2;类型4为武警英文字 母,包括“WJ”;类型5为武警数字,包括“0—9”;类型6为警车尾字“警”字;类型7为军用车汉字,包含“甲、乙、丙、丁、戊、己、庚、辛、壬、癸、 子、丑、寅、卯、辰、巳、午、未、申、酉、戌、亥”;类型8为民用车尾字,包括“0—9、学、试、领、港”等字。按照上述字符类型设定,我们可以得到车牌 字符类型表为民用汽车{0,l,3,3,2,2,8}、武警汽车{4,5,5,5,5,5,5,5}、军用汽车{7,l,2,2,2,2,2}、警用汽车 {0,3,3,2,2,2,6}等。

3、 标准特征库
将切分下来的字符图像变换到40×40的点阵空间上,按照水平和垂直方向提 取二值特征、按照字符结构在水平、垂直、左、右四个方向的几何投影图像特征建立多维特征库,其中标准汉字从宋体字库中选取,字母及数字从OCR-A字库中 选取。对标准字符分别进行归一化、轮廓化和特征抽取,标准模板就是从中抽取特征得到的特征向量。

4、 字符匹配
字符识别方法目前 主要有基于模板匹配算法和基于人工神经网络算法。基于模板匹配算法首先把待识别字符二值化并将其尺寸大小缩放为字符数据库中模板的大小,然后与所有的模板 进行匹配,最后选最佳匹配作为结果。由于这种匹配算法稳定性较差、时间花费也较大,因此在此基础上提出了基于关键点的匹配算法。此算法先对待识别字符进行 关键点提取,然后对关键点去噪,最后再确定字符的分类。这种匹配算法只利用了字符的关键点进行匹配,因此提高了识别速度又具有较高的识别率。基于人工神经 网络的算法主要有两种:一种是先对待识别字符进行特征提取,然后用所获得的特征来训练神经网络分类器;另一种方法是直接把待处理图像输入网络,由网络自动 实现特征提取直至识别出结果。前一种方法识别结果与特征提取有关,而特征提取比较耗时,因此特征提取是关键。
笔者认为,目前依据我国车牌特点采用 模板匹配算法识别速度更快。具体做法是将待识别的字符位图提取字符特征加权值,然后逐一与该类型相关的已知字符的标准特征库加权值比较,从中选取最理想的 字符作识别结果,当该理想字符相关的特征加权值小于给定的最小经验值,则认为该字符匹配成功,当该理想字符相关的特征加权值大于给定的最大经验值,则认为 该字符匹配错误,如采用“?”取代。对于容易相混的字符需要作进一步细节区分,如“0-8、5-8、0-D、0-Q、S-5、S-8、B-8、B-0、 B-D、D-Q、7-T、1-7、4-A”等。

5、 颜色识别
对于二值转换后的车牌图像依据我国车辆牌照特点十分容易分辨出黄色 和白色的车牌底色,但对于蓝底白字和黑底白字需要进—步从原灰度车牌中提取特征,如可以提取车牌分隔符区域,即截取第二个字符右边界和第三个字符的左边界 的车牌区,通过分析该区域灰色度就能区分出蓝色和黑色车牌底色,因为黑色和蓝色灰度存在明显差别。

六、 结果优化
按 照模板匹配算法,可以得到若干个车牌识别结果,从中我们选取字符匹配成功数最多者。如果全部字符匹配成功,则输出结果肯定准确,而在实际运行的车牌识别系 统中即使对字符作了优化处理,但仍有部分字符受车牌色差和环境的影响有识别出错可能,为此在识别结果中不妨设定最小出现数,如规定整个车牌中有四位识别正 确就给出车牌结果,这样有利于车牌模糊识别技术的应用。同时,依据我国车牌结构特点还需要进行车牌语法校验,如民用车牌尾字不存在“警”字、军牌格式中不 会出现“领、港、挂、学”字、警牌尾字不能出现“学、港、领、挂”字、警牌首位不能出现军牌汉字、武警车牌中不能出现民用和军用车牌汉字等等,这样可以大 大提高车牌正确识别率。

七、 字符训练
由于车牌安装角度、车牌制作工艺不同和外界污渍都会对字符识别产生影响,因此完整的车牌模糊识别系统应能提供字符自学习功能,即根据已知字符的二值图像重新生成特征库或改变部分特征库加权值,只有具备字符训练的车牌模糊识别软件才会有很高的车牌识别正确率、很强的适应性。

八、结束语
按照我国公安部门规定,车牌号码由省市区简称、车辆注册机关、注册编号、分类号码组成,现行的车牌种类繁多,这就给车牌模糊识别增加了难度,笔者通过分析现有车牌结构特点后认为有如下几点值得相关专家和领导关注:
(1)车牌编码规则应统一,如摩托车、农用运用车、拖拉机、使馆车辆应参照大小型汽车编码规则,尾部可相应改为“摩、农、拖、使”字:
(2)军队和武警大小车牌也应参照上述编码原则;
(3)针对车牌生产厂家众多的特点,应将车牌材料统一配给,确保车牌一致性;
(4)规范车牌安装区域,避免车牌中的字符被紧固螺钉和装饰物阻挡。
总之,通过上述分析我们知道车牌模糊识别的关键是车牌区域定位和字符识别,这两方面技术虽然已日趋成熟,但识别算法本身始终是人编的,追求更高的车牌模糊识别正确率永远是业内专业人士共同努力的目标。

2008年12月3日星期三

Visual C++开发工具与调试技巧整理

(来源于网络)
自己总是用VC平台来开发东西,但是有时候总是出这样那样的问题,呵呵,总是需要上网查资料来解决,在这里把自己用到上网查的一些技巧摘录如下,希望对大家有用,省去大家再去搜索的烦恼。

1.如何在Release状态下进行调试
Project->Setting=>ProjectSetting 对话框,选择Release状态。C/C++标签中的Category选General,Optimizations选 Disable(Debug),Debut info选Program Database。在Link标签中选中Generate debug info复选框。

注:只是一个介乎Debug和Release的中间状态,所有的ASSERT、VERIFY都不起作用,函数调用方式已经是真正的调用,而不查表,但是这种状态下QuickWatch、调用队列跟踪功能仍然有效,和Debug版一样。

2. Release和Debug有什么不同
Release版称为发行版,Debug版称为调试版。
Debug中可以单步执行、跟踪等功能,但生成的可执行文件比较大,代码运行速度较慢。Release版运行速度较快,可执行文件较小,但在其编译条件下无法执行调试功能。
Release 的exe文件链接的是标准的MFC DLL(Use MFC in a shared or static dll)。这些DLL在安装Windows的时候,已经配置,所以这些程序能够在没有安装Visual C++ 6.0的机器上运行。而Debug版本的exe链接了调试版本的MFC DLL文件,在没有安装Visual C++6.0的机器上不能运行,因为缺相应的DLL,除非选择use static dll when link。

3. ASSERT和VERIFY有什么区别
ASSERT里面的内容在Release版本中不编译,VERIFY里面的内容仍然翻译,但不再判断真假。所以后者更安全一点。
例如ASSERT(file.Open(strFileName))。
一旦到了Release版本中,这一行就忽略了,file根本就不Open()了,而且没有任何出错的信息。如果用VERIFY()就不会有这个问题。

4.Workspace和Project之间是什么样的关系
每个Workspace可以包括几个project,但只有一个处于Active状态,各个project之间可以有依赖关系,在project的Setting..中可以设定,比如那个Active状态的project可以依赖于其他的提供其函数调用的静态库。

5. 如何在非MFC程序中使用ClassWizard
在工程目录下新建一个空的.RC文件,然后加入到工程中就可以了。

6.如何设置断点
按F9在当前光标处增加一个断点和取消一个断点。
另外,在编辑状态下,按Ctrl+B组合键,弹出断点设置对话框。然后单击【Condition…】按钮弹出设置断点条件的对话框进行设置。

7.在编辑状态下发现成员变量或函数不能显示提示是如何打开显示功能
这似乎是目前这个Visual C++ 6.0版本的一个bug,可按如下步骤使其正常,如再出现,可如法炮制:
(1)关闭Project
(2)删除“工程名.ncb”文件
(3)重新打开工程

8.如何将一个通过ClassWizard生成的类彻底删除
首先在工作区的FileView中选中该类的.h和.cpp文件,按delete删除,然后在文件管理器中将这两个文件删除,再运行ClassWizard,这时出现是否移走该类的提示,选择remove就可以了。

9. 如何将在workspace中消失的类找出来
打开该类对应的头文件,然后将其类名随便改一下,这个时候工作区就会出现新的类,再将这个类改回原来的名字就可以了。

10. 如何清除所有的断点
菜单【Edit】->【Breakpoints…】,打开“Breakpoints”对话框,单击【Remove All】按钮即可。快捷键是“Ctrl + Shift + F8”。

11. 如何再ClassWizard中选择未列出的信息
打开“ClassWizard”对话框,然后切换到“Class Info”页面。改变“Message filter”,如选择“Window”,“Message”页面就会出现Window的信息。

12. 如何检测程序中的括号是否匹配
把光标移动到需要检测的括号前面,按快捷键“Ctrl + ]”。如果括号匹配正确,光标就跳到匹配的括号处,否则光标不移动,并且机箱喇叭还会发出一声警告。

13. 如何查看一个宏(或变量、函数)的定义
把光标移动到要查看的一个宏上,就比如说最常见的DECLARE_MAP_MESSAGE上按一下F12(或右键菜单中的相关菜单),如果没有建立浏览文件,就会出现提示对话框,按【确定】按钮,然后就会跳到该宏(或变量、函数)定义的地方。

14. 如何添加Lib文件到当前工程
单击菜单【Project】->【Settings…】弹出“Project Setting”对话框,切换到“Link”标签页,在“Object/library modules”处输入Lib文件名称,不同的Lib之间用空格格开。

15. 如何快速删除项目下的Debug文件夹中临时文件
在工作区的FileView视图中选中对应的项目,单击右键弹出菜单,选择【Clean(selection only)】菜单即可。

16. 如何快速生成一个现有工程除了工程名外完全相同的新工程
在 新建工程的“New”对话框中选择“Custom Appwizard”项,输入新工程的名字,单击【OK】按钮。出现“Custom AppWizard”项,输入新工程的名字,单击【OK】按钮。出现“Custom AppWizard-Step 1 of 2”对话框,选择“An existing Project”项,单击【Next】按钮。出现“Custom AppWizard-Step 2 of 2”对话框,选择现有工程的工程文件名,最后单击【Finish】按钮。编译后就生成一个与现有工程相同但可以重新取名的工程AppWizard。
现在就可以项用MFC AppWizard一样用这个定制的向导。如果不想用了,可以在Visual C++ 6.0安装目录下Common\MSDev98\Template目录中删除该Wizard对应的.awx和.pdb文件。

17. 如何解决Visual C++ 6.0不正确连接的问题
情景:明明改动了一个文件,却要把整个项目全部重新编译链接一次。刚刚链接好,一运行,又提示重新编译链接一次。
这是因为出现了未来文件(修改时间和创建时间比系统时间晚)的缘故。可以这样处理:找到工程文件夹下的debug目录,将创建和修改时间都比系统时间的文件全部删除,然后再从新“Rebuild All”一次。

18. 引起LNK2001的常见错误都有哪些
遇到的LNK2001错误主要为:unresolved external symbol “symbol”
如果链接程序不能在所有的库和目标文件内找到所引用的函数、变量或标签,将产生此错误信息。
一般来说,发生错误的原因有两个:一是所引用的函数、变量不存在,拼写不正确或者使用错误;其次可能使用了不同版本的链接库。以下是可能产生LNK2001错误的原因:
<1>由于编码错误导致的LNK2001错误
(1)不相匹配的程序代码或模块定义(.DEF)文件导致LNK2001。例如,如果在C++源文件了内声明了一变量“var1”,却试图在另一个文件内以变量“var1”访问改变量。
(2)如果使用的内联函数是在.cpp文件内定义的,而不是在头文件内定义将导致LNK2001错误。
(3)调用函数时如果所用的参数类型和头函数声明时的类型不符将会产生LNK2001错误。
(4)试图从基类的构造函数或析构函数中调用虚拟函数时将会导致LNK2001错误。
(5)要注意函数和变量的可公用性,只有全局变量、函数是可公用的。静态函数和静态变量具有相同的使用范围限制。当试图从文件外部方位任何没有在该文件内声明的静态变量时将导致编译错误或LNK2001错误。
<2>由于编译和联机的设置而造成的LNK2001错误
(1)如果编译时使用的是/NOD(/NODERAULTLIB)选项,程序所需要的运行库和MFC时将得到又编译器写入目标文件模块,但除非在文件中明确包含这些库名,否则这些库不会被链接进工程文件。这种情况下使用/NOD将导致LNK2001错误
(2)如果没有为wWinMainCRTStartup设定程序入口,在使用Unicode和MFC时将出现“unresolved external on _WinMain@16”的LNK2001错误信息。
(3) 使用/MD选项编译时,既然所有的运行库都被保留在动态链接库之内,源文件中对“func”的引用,在目标文件里即对“__imp__func”的引用。 如果试图使用静态库LIBC.LIB或LIBCMT.LIB进行链接,将在__imp__func上发生LNK2001错误。如果不使用/MD选项编译, 在使用MSVCxx.LIB链接时也会发生LNK2001错误。
(4)使用/ML选项编译时,如用LIBCMT.LIB链接会在_errno上发生LNK2001错误。
(5)当编译调试版的应用程序时,如果采用发行版模态库进行链接也会产生LNK2001错误;同样,使用调试版模态库链接发行版应用程序时也会产生相同的错误。
(6)不同版本的库和编译器的混合使用也能产生问题,因为新版的库里可能包含早先的版本没有的符号和说明。
(7) 在不同的模块中使用内联和非内联的编译选项能够导致LNK2001错误。如果创建C++库时打开了函数内联(/Ob1或/Ob2),但是在描述该函数的相 应头文件里却关闭了函数内联(没有inline关键字),只是将得到错误信息。为避免该问题的发生,应该在相应的头文件中用inline关键字标志为内联 函数。
(8)不正确的/SUBSYSTEM或ENTRY设置也能导致LNK2001错误。

19. 如何调试一个没有源码的exe文件调用的dll
在Visual C++ 6.0中,进入“Project Setting”对话框然后选择Debug标签页。通常Visual Studio默认“executable for debug session”为可执行文件名,但可以将他改成任何你想要的程序。甚至可以指定不同的工作目录以及传递参数到你的程序。这个技术常用来调试Dlls、名 字空间扩展、COM对象和其他从某些EXE以及从第三方的EXE中调用的plug-in程序。

20. Visual C++ 6.0工程中的项目文件都表示什么
.opt:工程关于开发环境的参数文件。如工具条位置等信息。
.aps(AppStudio File)资源辅助文件,二进制格式,一般不用去管它。
.clw:ClassWizard信息文件,实际上是INI文件格式,有兴趣可以研究一下。有时候ClassWizard出了问题,手工修改CLW文件可以解决。如果此文件不存在的话,每次用ClassWizard的时候回提示是否重建。
.dsp(DevelopStudio Project):项目文件,文本格式,不过不熟悉的不要手工修改。
.dsw(DevelopStudio Workspace):是工作区文件,其他特点和.dsp差不多。
.plg:是编译信息文件,编译时的error和warning信息文件(实际上是一个html文件),一般用处不大。在单击菜单【Tool】->【Option】弹出的对话框里面有个选项可以控制这个文件的生成。
.hpj(Help Project):是生成帮助文件的工程,用microsoft Help Compiler可以处理。
.mdp(Microsoft DevStudio Project):是旧版本的项目文件,如果要打开此文件的话,会提示你是否转换成新的.dsp格式。
.bsc:是用于浏览项目信息的,如果用Source Brower的话就必须有这个文件。如果不用这个功能的话,可以在Project Options里面去掉Generate Browse Info File,这样可以加快编译速度。
.map是执行文件的映象信息记录文件,除非对系统底层,这个文件一般用不着。
.pch(Pre-Compiled File):是与编译文件,可以加快编译速度,但是文件非常大。
.pdb(Program Database):记录了程序有关的一些数据和调试信息,在调试的时候可能有用。
.exp:只有在编译DLL的时候才会生成,记录了DLL文件的一些信息,一般也没有用。
.ncb:无编译浏览文件(no compile browser)。当自动完成功能出问题时可以删除此文件。编译工程后会自动生成。
欢迎访问、交流!对本博客有何建议,请
来信告知!
本博内容来源于网络,如有不当或侵犯权益,请来信告知,将及时撤除!
如引用博客内容、论文,请注明原作者!

Google一下本博客

  • [原]Linux下编译使用boost库 - Boost库是一个可移植、提供源代码的C++库,作为标准库的后备,是C++标准化进程的开发引擎之一。 Boost库由C++标准委员会库工作组成员发起,其中有些内容有望成为下一代C++标准库内容。在C++社区中影响甚大,是不折不扣的“准”标准库。Boost由于其对跨平台的强调,对标准C++的强调,与...
    8 年前
  • [原]猎头、培训与咨询的价值(2)【补1】——北漂18年(93) - 【上期用手机写的,同时用语音输入转化成文字,错字较多,经好友霍师傅提醒本期重写,并增加一部分新内容】 简单谈下我对猎头、培训与咨询的看法。三样都干过,算是有些浅见。 猎头 简单的说就是人才中介。虽然在公司看来是可以直接解决现有企业问题的一个直接方法,但很多时候都不太管用。 猎头费一般是人才的一个月月...
    9 年前
  • 我的时间管理道与术(三) - 本系列来自 水中颉 原创投稿。 本文续上篇《我的时间管理道与术(一):接受现实和感知时间》和《我的时间管理道与术(二):目标与计划》。 建立至上而下的检视机制 六个关注层面和检视周期 宗旨和使命、关键路径是云端;关键点和平衡点是方向指导层;项目是最接地气的现实目标层;下一步行动 是非常具体的待执行事务层...
    10 年前
  • OpenCV統計應用-Mahalanobis距離 - Mahalanobis距離是一個可以準確找出資料分布上面極端值(Outliers)的統計方法,使用線性迴歸的概念,也就是說他使用的是共變數矩陣以及該資料分布的平均數來找尋極端值的產生,而可以讓一群資料系統具有穩健性(Robust),去除不必要的雜訊訊息,這邊拿前面共變數矩陣的資料為例,並且新增了兩個點座標向量來做...
    17 年前
  • 努力推进模式识别实际产品的开发与应用 - Salu 无论是手写体识别、文档处理、人脸识别、基于内容的图片搜索、嵌入人工智能的搜索技术、虚拟网络社区、还是其它相关新科技下的信息整合领域,现在都在努力实用化。 前两年、即使现在还有很多人在抱怨说人脸的方法都不能用,但是就今年出现的和正在做的有关人脸识别实际应用的各种形式的产品可以说如雨后春笋。这是一个趋...
    18 年前