。
《Visual+C++_MATLAB图像处理与识别实用案例精选》程序代码说明P0201:MATLAB赋值P0202:MATLAB中的for循环P0203:MATLAB中的for循环和if条件P0205:MATLAB图像处理的基本操作P0206:MATLAB高级图像处理操作P0207:根据RGB图像创建一幅灰度图像P0208:二值图像的取反操作P0209:用imshow函数显示图像P0210:在同一个窗口内显示两幅图像P0301:数字图像矩阵数据的显示及其傅立叶变换P0302:二维离散余弦变换的图像压缩P0303:采用灰度变换的方法增强图像的对比度P0304:直方图均匀化P0305:模拟图像受高斯白噪声和椒盐噪声的影响P0306:采用二维中值滤波函数medfilt2对受椒盐噪声干扰的图像滤波P0307:采用MATLAB中的函数filter2对受噪声干扰的图像进行均值滤波P0308:图像的自适应魏纳滤波P0309:运用5种不同的梯度增强法进行图像锐化P0310:图像的高通滤波和掩模处理P0311:利用巴特沃斯(Butterworth)低通滤波器对受噪声干扰的图像进行平滑处理P0312:利用巴特沃斯(Butterworth)高通滤波器对图像进行锐化处理P0401:用Prewitt算子检测图像的边缘P0402:用不同σ值的LoG算子检测图像的边缘P0403:用Canny算子检测图像的边缘P0404:图像的阈值分割P0405:用水线阈值法分割图像P0406:对矩阵进行四叉树分解P0407:将图像分为文字和非文字的两个类别P0408:形态学梯度检测二值图像的边缘P0409:形态学实例——从PCB图像中删除所有电流线,仅保留芯片对象P0502:计算图像中的欧拉数P0610:神经网络的实例P0701:细胞边缘检测P0702:癌细胞形态学分析P0703:癌细胞颜色分析P0801:索书号文字图像分割P0802:粘连字符切分P0803:文字识别P0804:彩色车牌分割P0805:商标文字分割Recognition:文字识别的识别子函数StrDetect01:文字识别的结构特征提取子函数程序代码说明P0901:灰度AGV路径识别P0902:彩色AGV路径识别P0903:HSI彩色空间的AGV路径识别P0904:路径中心线的定位P0905:Radon变换的AGV路径偏差检测另外,站长团上有产品团购,便宜有保证。
文字识别要用神经网络爱发猫 www.aifamao.com。
具体参考神经网络的guide文件,关于CharacterRecognition应用:11-15Appcr1:CharacterRecognitionItisoftenusefultohaveamachineperformpatternrecognition.Inparticular,machinesthatcanreadsymbolsareverycosteffective.Amachinethatreadsbankingcheckscanprocessmanymorechecksthanahumanbeinginthesametime.Thiskindofapplicationsavestimeandmoney,andeliminatestherequirementthatahumanperformsucharepetitivetask.Thedemonstrationappcr1showshowcharacterrecognitioncanbedonewithabackpropagationnetwork.ProblemStatementAnetworkistobedesignedandtrainedtorecognizethe26lettersofthealphabet.Animagingsystemthatdigitizeseachlettercenteredinthesystem’sfieldofvisionisavailable.Theresultisthateachletterisrepresentedasa5by7gridofBooleanvalues.Forexample,hereistheletterA.Loadthealphabetletterdefinitionsandtheirtargetrepresentations.[alphabet,targets]=prprob;However,theimagingsystemisnotperfect,andtheletterscansufferfromnoise.11Applications11-16Perfectclassificationofidealinputvectorsisrequired,andreasonablyaccurateclassificationofnoisyvectors.Thetwenty-six35-elementinputvectorsaredefinedinthefunctionprprobasamatrixofinputvectorscalledalphabet.Thetargetvectorsarealsodefinedinthisfilewithavariablecalledtargets.Eachtargetvectorisa26-elementvectorwitha1inthepositionoftheletteritrepresents,and0’severywhereelse.Forexample,theletterAistoberepresentedbya1inthefirstelement(asAisthefirstletterofthealphabet),and0’sinelementstwothroughtwenty-six.NeuralNetworkThenetworkreceivesthe35Booleanvaluesasa35-elementinputvector.Itisthenrequiredtoidentifytheletterbyrespondingwitha26-elementoutputvector.The26elementsoftheoutputvectoreachrepresentaletter.Tooperatecorrectly,thenetworkshouldrespondwitha1inthepositionoftheletterbeingpresentedtothenetwork.Allothervaluesintheoutputvectorshouldbe0.Inaddition,thenetworkshouldbeabletohandlenoise.Inpractice,thenetworkdoesnotreceiveaperfectBooleanvectorasinput.Specifically,thenetworkshouldmakeasfewmistakesaspossiblewhenclassifyingvectorswithnoiseofmean0andstandarddeviationof0.2orless.ArchitectureTheneuralnetworkneeds35inputsand26neuronsinitsoutputlayertoidentifytheletters.Thenetworkisatwo-layerlog-sigmoid/log-sigmoidAppcr1:CharacterRecognition11-17network.Thelog-sigmoidtransferfunctionwaspickedbecauseitsoutputrange(0to1)isperfectforlearningtooutputBooleanvalues.Thehidden(first)layerhas25neurons.Thisnumberwaspickedbyguessworkandexperience.Ifthenetworkhastroublelearning,thenneuronscanbeaddedtothislayer.Ifthenetworksolvestheproblemwell,butasmallermoreefficientnetworkisdesired,fewerneuronscouldbetried.Thenetworkistrainedtooutputa1inthecorrectpositionoftheoutputvectorandtofilltherestoftheoutputvectorwith0’s.However,noisyinputvectorscanresultinthenetwork’snotcreatingperfect1’sand0’s.Afterthenetworkistrainedtheoutputispassedthroughthecompetitivetransferfunctioncompet.Thismakessurethattheoutputcorrespondingtothelettermostlikethenoisyinputvectortakesonavalueof1,andallothershaveavalueof0.Theresultofthispostprocessingistheoutputthatisactuallyused.InitializationCreatethetwo-layernetworkwithnewff.net=newff(alphabet,targets,25);TrainingTocreateanetworkthatcanhandlenoisyinputvectors,itisbesttotrainthenetworkonbothidealandnoisyvectors.Todothis,thenetworkisfirsttrainedonidealvectorsuntilithasalowsumsquarederror.Thenthenetworkistrainedon10setsofidealandnoisyvectors.Thenetworkistrainedontwocopiesofthenoise-freealphabetatthesametimeasitistrainedonnoisyvectors.Thetwocopiesofthenoise-freealphabetareusedtomaintainthenetwork’sabilitytoclassifyidealinputvectors.p1a111n1n235x110x110x126x126x126x1Input26x10。
单看错误率分析不出来什么,可能是样本量太少,也可能是别的原因。可以把错误识别的样本拿出来,看看是哪些地方导致的错误,再有针对性的改进。
还可能是特征工程不到位,特征选取的不好,不满足尺度不变性、旋转不变性、仿射不变性三个要素,说白了就是,大小变了,旋转的角度变了,拍照的时候站的位置不同导致对车牌的透视发生变化了,然后可能就识别不出来了。
所以可以考虑找一个更好的描述特征的方法,比如HoG(方向梯度直方图)。
HoG,简单说就是,相邻的两个像素值做个减法,就可以表示颜色的变化,那么一个像素周围,上下、左右各有两个像素,就可以分别做两个减法,得到两个值,就像力学里两个力可以合并一样,这两个值也可以合并,得到方向,和大小(就是梯度),这样就有了一个像素的特征。
但是特征太多计算量太大,就用统计的方法减少下特征,首先把图片划分成网格的形式,就像是在图像上画围棋线一样,然后每个方格内单独统计一下,方向在0-20角度内的像素的梯度的和是多少,依次类推,就得到了直方图,如果以20度为一个直方的话,那么180度就可以划分成9个直方,也就是9个特征,这样一个方格内的特征数量就与像素的数量无关了,而是固定了的。
然后就是关于HoG的其他手段了,比如为了消除光照变化,可以对特征向量做归一化等。
另外还可以对HoG可视化,在每个方格内,用线的方向和长度代替特征的方向和梯度,最后呈现的效果是,有若干个方格,每个方格内都好像有一个沿原点对称的星星,这样做对分析算法效果有一定帮助。
HoG是比较常见的特征描述子了,在行人检测上用的比较多。除了HoG,还有SIFT、SURF等特征描述子,这些都是计算机视觉中的内容了,属于特征检测的范畴。
计算机视觉主要包括二值化、滤波器、特征检测、特征匹配等一些基础的手段,然后就是图像滤镜、图像分割、图像识别、图像生成等具体的应用算法。
由于近年来计算成本降低导致神经网络的再度崛起,计算机视觉的研究热点已经转为深度神经网络的各种改进和性能优化上了,像HoG已经是05年的事情了。
关于车牌识别(LPR),如果环境不复杂,是可以做到接近100%的准确率的,如果环境较为复杂,95%以上准确率应该是可以做到的。总的来说,基本已经实现应用落地和商用了。
现在的方法基本都是深度学习,端到端一气呵成,无需专门提取特征,传统的模式识别方法已经GG。说的比较细。
如果只是关心结果的话,Github上可以找到关于车牌识别的一些开源项目,比如openalpr之类的,当然也是采用深度学习的办法,炼丹嘛,就是这么直接。
给你一个实例,希望通过该例子对实现神经网络应用有一定的了解。
%x,y分别为输入和目标向量x=1:5;y=[639646642624652];%创建一个前馈网络net=newff(minmax(x),[20,1],{'tansig','purelin'});%仿真未经训练的网络net并画图y1=sim(net,x);plot(x,y1,':');%采用L-M优化算法net.trainFcn='trainlm';%设置训练算法net.trainParam.epochs=500;=10^(-6);%调用相应算法训练BP网络[net,tr,yy]=train(net,x,y);%对BP网络进行仿真y1=sim(net,x);%计算仿真误差E=y-y1;MSE=mse(E)holdon%绘制匹配结果曲线figure;plot(x,y1,'r*',x,y,'b--')。
OCR的处理流程如下:首先将标的物的影像输人,然后经过影像前处理、文字特征抽取、比对识别等过程,最后经人工校正将认错的文字更正,将结果输出。
详细如下:影像输入要想进行OCR处理,必须先通过光学仪器,如影像扫描仪、传真机或任何摄影器械,将影像转人计算机。
随着科技的进步,扫描仪等输人装置已制作得愈来愈精致,轻薄短小,品质也高,对OCR有相当大的帮助。
扫描仪分辨率的提高使影像更清晰,扫描速度的加快提高了OCR处理的效率影像前处理影像前处理是OCR系统中需解决问题最多的一个模块。
从得到一个不是黑就是白的二值化影像或灰阶、彩色的影像,到分离出一个个的文字影像的过程,都属于影像前处理。它包含了影像正规化、去除噪声、影像矫正等的影像处理,以及图文分析、文字行与字分离的文件前处理。
影像处理的原理及技术都已成熟,在网站上有不少可用的链接库;在文件前处理方面,则凭各家本领了;影像需先将图片、表格及文字区域分离出来,甚至可将文章的编排方向、文章的提纲及内容主体区分开,而文字的大小及文字的字体也可如原始文件一样地判断出来。
值得一提的是如何将独立文字从文字行抽取出来。中文字特别的地方在于它有部首的观念。
因此,不只是上下的合成,左右合成的字也特别多,且有可能是两部分(如“利”、“明”等),也有三部分的(如“捌”、“晰”等)合成。
当这些字与英文或数字同时存在且紧靠在一起时,判断如何连接或切出,是相当困难的。对排版整齐的印刷文件都无法百分之百解决,更何况是每个人写字习性都不同的手写文件。
也因此,手写的OCR产品走向是特殊且有限制的。文字特征抽取单以识别率而言,特征抽取可说是OCR的核心,用什么特征,怎么抽取,直接影响识别的好坏,所以在OCR研究初期,特征抽取的研究报告特别多。
而“特征”可说是识别的筹码,可简易的区分两类。一类为统计的特征。例如文字区域内的黑/白点数比,当文字区分成好几个区域时,这一个个区域黑/白点数比之联合,就成了空间的一个数值向量。
在对比时,基本的数学理论就足以应付了。而另一类特征为结构的特征。
例如文字影像细线化后,取得字的笔画端点、交叉点之数量及位置,或以笔划段为特征,配合特殊的比对方法进行比对,市面上的线上手写输人软件的识别方法多以此种结构的方法为主。
比对数据库当输人文字算完特征后,不管是用统计或结构的特征,都需有一比对数据库或特征数据库来进行比对,数据库的内容应包含所有欲识别的字集文字以及根据与输人文字一样的特征抽取方法所得的特征群组。
比对识别比对识别是指根据不同的特征特性,选用不同的数学距离函数进行比对.较有名的比对方法有欧式空间的比对方法、松弛比对法(Relaxation)、动态程序比对法(DynamicProgramming,DP)以及类神经网络的数据库建立及比对、HMM(HiddenMarkovModel)等著名的方法。
为了使识别的结果更稳定,提出了专家系统(ExpertsSystem),利用各种转征比对方袂的相异互补性,使识别结果的可靠性提高。
字词后处理由于OCR的识别率并无法达到百分之百,为了加强比对的正确性及信心值,一些除错或甚至帮忙更正的功能,便成为OCR系统中必要的一个模块。字词后处理就是一例。
它在比对后的识别文字与其可能的相似候选字群中,根据前后的识别文字找出最合乎“词”的词,作为更正的功能。
例如识别出“找门”,在词库中找不到这个词,而“我”是“找”的相似候选字,因此很自然地将“我”取代“找”,而成“我们”。字词数据库它是为字词后处理所建立的词库。人工校正这是OCR最后的关卡。
在此之前,使用者可能只是拿个鼠标,跟着软件设计的节奏操作或仅是观看,而在此则需要使用者去更正甚至找寻可能是OCR出错的地方。
一个好的OCR软件,除了有一个稳定的影像处理及识别核心以降低错误率外,人工校正的操作流程及其功能也影响OCR的处理效率。
因此,文字影像与识别文字的对照及其屏幕信息摆放的位置,还有每一识别文字的候选字功能、拒认字的功能及继字词后处理而特意标示出可能有问题的字词,都是为了让使用者尽量少地使用键盘。
当然,不是说系统没显示出的文字就一定正确,可根据具体要求决定是否重新校正一次。结果输出其实输出是件简单的事,但需看使用者用OCR到底为了什么。
有人只要求文本文件用于部分文字的再使用,所以只要一般的文字文件,有人要求输人文件的原文原封不动地重现出来;有人注重表格内的文字,要求跟Excel等软件结合。无论怎么变化,都只是输出档案格式的变化而已。