1、OCR 技术浅析
图像识别算法原理
大家好!今天让创意岭的小编来大家介绍下关于图像识别算法原理的问题,以下是小编对此问题的归纳整理,让我们一起来看看吧。
开始之前先推荐一个非常厉害的Ai人工智能工具,一键生成原创文章、方案、文案、工作计划、工作报告、论文、代码、作文、做题和对话答疑等等
只需要输入关键词,就能返回你想要的内容,越精准,写出的就越详细,有微信小程序端、在线网页版、PC客户端
创意岭作为行业内优秀的企业,服务客户遍布全球各地,如需了解SEO相关业务请拨打电话175-8598-2043,或添加微信:1454722008
本文目录:
一、OCR 技术浅析
随着人工智能的热度上升,图像识别这一分领域也渐渐被人们所关注。图像识别中最贴近我们生活的可能就是 OCR 技术了。可能很多同学还不知道什么是 OCR。我们先来看下 OCR 的定义:
今天就来简单分析下 OCR 技术的原理,不会涉及具体的算法讲解和推导,毕竟每一个算法都能占很长的篇幅,每一个算法都能重新开一篇来写。
从整体上来说,OCR一般分为两个大步骤:图像处理以及文字识别。
识别文字前,我们要对原始图片进行预处理,以便后续的特征提取和学习。这个过程通常包含:灰度化、二值化、降噪、倾斜矫正、文字切分等子步骤。每一个步骤都涉及了不同的算法。我们以下面这张原始图片为例,进行每个步骤的讲解。
灰度化(gray processing),在RGB模型中,如果R=G=B时,则彩色表示一种灰度颜色,其中R=G=B的值叫灰度值,因此,灰度图像每个像素只需一个字节存放灰度值(又称强度值、亮度值),灰度范围为0-255。说通俗一点,就是将一张彩色图片变为黑白图片。
灰度化一般有分量法、最大值法、平均值法、加权平均法四种方法对彩色图像进行灰度化。
一幅图像包括目标物体、背景还有噪声,要想从多值的数字图像中直接提取出目标物体,最常用的方法就是设定一个阈值T,用T将图像的数据分成两部分:大于T的像素群和小于T的像素群。这是研究灰度变换的最特殊的方法,称为图像的二值化(binaryzation)。
二值化的黑白图片不包含灰色,只有纯白和纯黑两种颜色。
二值化里最重要的就是阈值的选取,一般分为固定阈值和自适应阈值。 比较常用的二值化方法则有:双峰法、P参数法、迭代法和OTSU法等。
现实中的数字图像在数字化和传输过程中常受到成像设备与外部环境噪声干扰等影响,称为含噪图像或噪声图像。减少数字图像中噪声的过程称为图像降噪(Image Denoising)。
图像中噪声的来源有许多种,这些噪声来源于图像采集、传输、压缩等各个方面。噪声的种类也各不相同,比如椒盐噪声,高斯噪声等,针对不同的噪声有不同的处理算法。
在上一步得到的图像中可以看到很多零星的小黑点,这就是图像中的噪声,会极大干扰到我们程序对于图片的切割和识别,因此我们需要降噪处理。降噪在这个阶段非常重要,降噪算法的好坏对特征提取的影响很大。
图像降噪的方法一般有均值滤波器、自适应维纳滤波器、中值滤波器、形态学噪声滤除器、小波去噪等。
对于用户而言,拍照的时候不可能绝对的水平,所以,我们需要通过程序将图像做旋转处理,来找一个认为最可能水平的位置,这样切出来的图,才有可能是最好的一个效果。
倾斜矫正最常用的方法是霍夫变换,其原理是将图片进行膨胀处理,将断续的文字连成一条直线,便于直线检测。计算出直线的角度后就可以利用旋转算法,将倾斜图片矫正到水平位置。
对于一段多行文本来讲,文字切分包含了行切分与字符切分两个步骤, 倾斜矫正 是文字切分的前提。我们将 倾斜矫正 后的文字投影到 Y轴,并将所有值累加,这样就能得到一个在y轴上的直方图。
直方图的谷底就是背景,峰值则是前景(文字)所在的区域。于是我们就将每行文字的位置给识别出来了。
字符切分和行切分类似,只是这次我们要将每行文字投影到 X轴。
但要注意的是,同一行的两个字符往往挨的比较紧,有些时候会出现垂直方向上的重叠,投影的时候将他们认为是一个字符,从而造成切割的时候出错(多出现在英文字符);也有些时候同一个字符的左右结构在X轴的投影存在一个小间隙,切割的时候误把一个字符切分为两个字符(多出现在中文字符)。所以相较于行切分,字符切分更难。
对于这种情况,我们可以预先设定一个字符宽度的期望值,切出的字符如果投影超出期望值太大,则认为是两个字符;如果远远小于这个期望值,则忽略这个间隙,把间隙左右的“字符”合成一个字符来识别。
预处理完毕后,就到了文字识别的阶段。这个阶段会涉及一些人工智能方面的知识,比较抽象,没法用图片表达,我尽量讲得简单易懂一些。
特征是用来识别文字的关键信息,每个不同的文字都能通过特征来和其他文字进行区分。对于数字和英文字母来说,这个特征提取是比较容易的,总共就 10 + 26 x 2 = 52 个字符,而且都是小字符集。对于汉字来说,特征提取的难度就比较大了,因为首先汉字是大字符集;其次国标中光是最常用的第一级汉字就有3755个;最后汉字结构复杂,形近字多,特征维度就比较大。
在确定了使用何种特征后,还有可能要进行特征降维,这种情况下,如果特征的维数太高,分类器的效率会受到很大的影响,为了提高识别速率,往往就要进行降维,这个过程也很重要,既要降低特征维数,又得使得减少维数后的特征向量还保留了足够的信息量(以区分不同的文字)。
对一个文字图像,提取出特征,丢给分类器,分类器就对其进行分类,告诉你这个特征该识别成哪个文字。分类器的设计就是我们的任务。分类器的设计方法一般有:模板匹配法、判别函数法、神经网络分类法、基于规则推理法等,这里不展开叙述。在进行实际识别前,往往还要对分类器进行训练,这是一个监督学习的过程。成熟的分类器也有很多,有 SVM,CNN 等。
其实就是对于分类器的分类结果进行优化,这一般就要涉及自然语言理解的范畴了。
首先是形近字的处理:举个栗子,“分”和“兮”形近,但是如果遇到“分数”这个词语,就不应该识别为“兮数”,因为“分数”才是一个正常词语。这需要通过语言模型来进行纠正。
其次是对于文字排版的处理:比如一些书籍是分左右两栏的,同一行的左右两栏不属于同一句话,不存在任何语法上的联系。如果按照行切割,就会把左行的末尾和右行的开头连在一起,这是我们不希望看到的,这样的情况需要进行特殊处理。
OCR 的大致原理就是这样。整体上来看,OCR 的步骤繁多,涉及的算法复杂,针对每一个步骤,每一个算法都有许多单独的研究论文,本文无法进行深入探讨。如果从零开始做 OCR,这将是一个浩大的工程。笔者才疏学浅,对于模式识别、机器学习也属于入门阶段,如果有错漏的地方,还请各位斧正。
二、图像识别算法都有哪些
图像识别算法:
1 人脸识别类(Eigenface,Fisherface 算法特别多),人脸检测类(j-v算法,mtcnn)
2 车牌识别类,车型识别类(cnn)
3 字符识别(cnn)
。。。
。。。
无论什么识别算法:本质都是对图像(多维度矩阵)的分类或者拟合算法。
那么如何设计一个函数,让不同的矩阵输入进去,得到相应的分类结果和拟合结果呢?
一般的方案是,
a 先对图像做预处理(边缘检测,滤波操作,二值化等,图像缩放,归一化等)
b 提取特征。(对预处理后的图像进一步降低起数据维度,比如lbp特征,hog特征等)
c 采用机器学习的方法进行分类或者拟合(svm,bp,逻辑回归等)
三、百度识图是怎么做到的
识图分两部分完成,一是图像识别,二是检索技术。
图片搜索的原理有三个步骤
1. 将目标图片进行特征提取,描述图像的算法很多,用的比较多的是:SIFT描述子,指纹算法函数,bundling features算法,hash function(散列函数)等。也可以根据不同的图像,设计不同的算法,比如图像局部N阶矩的方法提取图像特征。
2. 将图像特征信息进行编码,并将海量图像编码做查找表。
3. 相似度匹配运算:利用目标图像的编码值,在图像搜索引擎中的图像数据库进行全局或是局部的相似度计算。
百度识图是百度图片搜索近期推出的一项新功能。常规的图片搜索,是通过输入关键词的形式搜索到互联网上相关的图片资源,而百度识图则能实现用户通过上传图片或输入图片的url地址,从而搜索到互联网上与这张图片相似的其他图片资源,同时也能找到这张图片相关的信息。
百度识图用途:
1. 当想要了解一个不熟悉的明星或其他人物的相关信息时,如姓名、新闻等;
2. 当想要了解某张图片背后的相关信息时,如拍摄时间、地点、背后的一些故事等;
3. 当手上已经有一张图片,想要找一张尺寸更大的,或是没有水印的,或是ps处理之前的原图;
4. 当想要了解,这张图片还被哪些网站引用时;
四、如何通过人工神经网络实现图像识别
人工神经网络(Artificial Neural Networks)(简称ANN)系统从20 世纪40 年代末诞生至今仅短短半个多世纪,但由于他具有信息的分布存储、并行处理以及自学习能力等优点,已经在信息处理、模式识别、智能控制及系统建模等领域得到越来越广泛的应用。尤其是基于误差反向传播(Error Back Propagation)算法的多层前馈网络(Multiple-Layer Feedforward Network)(简称BP 网络),可以以任意精度逼近任意的连续函数,所以广泛应用于非线性建模、函数逼近、模式分类等方面。
目标识别是模式识别领域的一项传统的课题,这是因为目标识别不是一个孤立的问题,而是模式识别领域中大多数课题都会遇到的基本问题,并且在不同的课题中,由于具体的条件不同,解决的方法也不尽相同,因而目标识别的研究仍具有理论和实践意义。这里讨论的是将要识别的目标物体用成像头(红外或可见光等)摄入后形成的图像信号序列送入计算机,用神经网络识别图像的问题。
一、BP 神经网络
BP 网络是采用Widrow-Hoff 学习算法和非线性可微转移函数的多层网络。一个典型的BP 网络采用的是梯度下降算法,也就是Widrow-Hoff 算法所规定的。backpropagation 就是指的为非线性多层网络计算梯度的方法。一个典型的BP 网络结构如图所示。
我们将它用向量图表示如下图所示。
其中:对于第k 个模式对,输出层单元的j 的加权输入为
该单元的实际输出为
而隐含层单元i 的加权输入为
该单元的实际输出为
函数f 为可微分递减函数
其算法描述如下:
(1)初始化网络及学习参数,如设置网络初始权矩阵、学习因子等。
(2)提供训练模式,训练网络,直到满足学习要求。
(3)前向传播过程:对给定训练模式输入,计算网络的输出模式,并与期望模式比较,若有误差,则执行(4);否则,返回(2)。
(4)后向传播过程:a. 计算同一层单元的误差;b. 修正权值和阈值;c. 返回(2)
二、 BP 网络隐层个数的选择
对于含有一个隐层的三层BP 网络可以实现输入到输出的任何非线性映射。增加网络隐层数可以降低误差,提高精度,但同时也使网络复杂化,增加网络的训练时间。误差精度的提高也可以通过增加隐层结点数来实现。一般情况下,应优先考虑增加隐含层的结点数。
三、隐含层神经元个数的选择
当用神经网络实现网络映射时,隐含层神经元个数直接影响着神经网络的学习能力和归纳能力。隐含层神经元数目较少时,网络每次学习的时间较短,但有可能因为学习不足导致网络无法记住全部学习内容;隐含层神经元数目较大时,学习能力增强,网络每次学习的时间较长,网络的存储容量随之变大,导致网络对未知输入的归纳能力下降,因为对隐含层神经元个数的选择尚无理论上的指导,一般凭经验确定。
四、神经网络图像识别系统
人工神经网络方法实现模式识别,可处理一些环境信息十分复杂,背景知识不清楚,推理规则不明确的问题,允许样品有较大的缺损、畸变,神经网络方法的缺点是其模型在不断丰富完善中,目前能识别的模式类还不够多,神经网络方法允许样品有较大的缺损和畸变,其运行速度快,自适应性能好,具有较高的分辨率。
神经网络的图像识别系统是神经网络模式识别系统的一种,原理是一致的。一般神经网络图像识别系统由预处理,特征提取和神经网络分类器组成。预处理就是将原始数据中的无用信息删除,平滑,二值化和进行幅度归一化等。神经网络图像识别系统中的特征提取部分不一定存在,这样就分为两大类:① 有特征提取部分的:这一类系统实际上是传统方法与神经网络方法技术的结合,这种方法可以充分利用人的经验来获取模式特征以及神经网络分类能力来识别目标图像。特征提取必须能反应整个图像的特征。但它的抗干扰能力不如第2类。② 无特征提取部分的:省去特征抽取,整副图像直接作为神经网络的输入,这种方式下,系统的神经网络结构的复杂度大大增加了,输入模式维数的增加导致了网络规模的庞大。此外,神经网络结构需要完全自己消除模式变形的影响。但是网络的抗干扰性能好,识别率高。
当BP 网用于分类时,首先要选择各类的样本进行训练,每类样本的个数要近似相等。其原因在于一方面防止训练后网络对样本多的类别响应过于敏感,而对样本数少的类别不敏感。另一方面可以大幅度提高训练速度,避免网络陷入局部最小点。
由于BP 网络不具有不变识别的能力,所以要使网络对模式的平移、旋转、伸缩具有不变性,要尽可能选择各种可能情况的样本。例如要选择不同姿态、不同方位、不同角度、不同背景等有代表性的样本,这样可以保证网络有较高的识别率。
构造神经网络分类器首先要选择适当的网络结构:神经网络分类器的输入就是图像的特征向量;神经网络分类器的输出节点应该是类别数。隐层数要选好,每层神经元数要合适,目前有很多采用一层隐层的网络结构。然后要选择适当的学习算法,这样才会有很好的识别效果。在学习阶段应该用大量的样本进行训练学习,通过样本的大量学习对神经网络的各层网络的连接权值进行修正,使其对样本有正确的识别结果,这就像人记数字一样,网络中的神经元就像是人脑细胞,权值的改变就像是人脑细胞的相互作用的改变,神经网络在样本学习中就像人记数字一样,学习样本时的网络权值调整就相当于人记住各个数字的形象,网络权值就是网络记住的内容,网络学习阶段就像人由不认识数字到认识数字反复学习过程是一样的。神经网络是按整个特征向量的整体来记忆图像的,只要大多数特征符合曾学习过的样本就可识别为同一类别,所以当样本存在较大噪声时神经网络分类器仍可正确识别。在图像识别阶段,只要将图像的点阵向量作为神经网络分类器的输入,经过网络的计算,分类器的输出就是识别结果。
五、仿真实验
1、实验对象
本实验用MATLAB 完成了对神经网络的训练和图像识别模拟。从实验数据库中选择0~9 这十个数字的BMP 格式的目标图像。图像大小为16×8 像素,每个目标图像分别加10%、20%、30%、40%、50%大小的随机噪声,共产生60 个图像样本。将样本分为两个部分,一部分用于训练,另一部分用于测试。实验中用于训练的样本为40个,用于测试的样本为20 个。随机噪声调用函数randn(m,n)产生。
2、网络结构
本试验采用三层的BP 网络,输入层神经元个数等于样本图像的象素个数16×8 个。隐含层选24 个神经元,这是在试验中试出的较理想的隐层结点数。输出层神经元个数就是要识别的模式数目,此例中有10 个模式,所以输出层神经元选择10 个,10 个神经元与10 个模式一一对应。
3、基于MATLAB 语言的网络训练与仿真
建立并初始化网络
% ================S1 = 24;% 隐层神经元数目S1 选为24
[R,Q] = size(numdata);
[S2,Q] = size(targets);
F = numdata;
P=double(F);
net = newff(minmax(P),[S1 S2],{'logsig'
'logsig'},'traingda','learngdm')
这里numdata 为训练样本矩阵,大小为128×40, targets 为对应的目标输出矩阵,大小为10×40。
newff(PR,[S1 S2…SN],{TF1 TF2…TFN},BTF,BLF,PF)为MATLAB 函数库中建立一个N 层
前向BP 网络的函数,函数的自变量PR 表示网络输入矢量取值范围的矩阵[Pmin max];S1~SN 为各层神经元的个数;TF1~TFN 用于指定各层神经元的传递函数;BTF 用于指定网络的训练函数;BLF 用于指定权值和阀值的学习函数;PF 用于指定网络的性能函数,缺省值为‘mse’。
设置训练参数
net.performFcn = 'sse'; %平方和误差性能函数
net.trainParam.goal = 0.1; %平方和误
差目标
net.trainParam.show = 20; %进程显示
频率
net.trainParam.epochs = 5000;%最大训
练步数
net.trainParam.mc = 0.95; %动量常数
网络训练
net=init(net);%初始化网络
[net,tr] = train(net,P,T);%网络训练
对训练好的网络进行仿真
D=sim(net,P);
A = sim(net,B);
B 为测试样本向量集,128×20 的点阵。D 为网络对训练样本的识别结果,A 为测试样本的网络识别结果。实验结果表明:网络对训练样本和对测试样本的识别率均为100%。如图为64579五个数字添加50%随机噪声后网络的识别结果。
六、总结
从上述的试验中已经可以看出,采用神经网络识别是切实可行的,给出的例子只是简单的数字识别实验,要想在网络模式下识别复杂的目标图像则需要降低网络规模,增加识别能力,原理是一样的。
以上就是关于图像识别算法原理相关问题的回答。希望能帮到你,如有更多相关问题,您也可以联系我们的客服进行咨询,客服也会为您讲解更多精彩的知识和内容。
推荐阅读: