您的位置:首页 > 编程语言 > MATLAB

matlab 在 ocr 问题中的简单实现

2014-11-12 14:59 197 查看
想到这个问题是朋友提到一个图片识别的问题。我之前只做过,最基本的人脸识别,就是用PCA和LDA的方式进行人脸识别。

碰到具体的比较麻烦的问题,比如这个图片的识别问题,应该用到学习的算法。

而我没有运用过svm或者ann,瞬间觉得自己弱爆了。

所以,就从最基本的出发,做一点简单的ocr问题。简单到什么程度呢:

概括而言:

1、字符之间有间隔可以区分;2、没有线条杂质干扰

我使用,matlab 2013b

对于这个简单的问题,工作流程是这样的:

我再说一下,我的预处理,主要函数:

imread:读图片

rgb2gray:将rgb图片转换成为灰度图

graythresh:选择黑白域

im2bw(imagen, threshold):将灰度图转变为黑白图

bwareaopen(image,30)去除零散的点

进行切分,切分分为了横向和纵向的切分,主要的函数也就是 sum(像素和,切分依据), bwlabel(连接的图), imresize(大小重置)

如果在这么简单的工作之后,就直接用相关系数(corr2)和数字模进行比对,那么久太low了。

可以关注一下, matlab2013是怎么做的。

在matlab2013b中有一个demo,名字叫做HOGDigitClassificationExample。特征的采集时HOG特征,分类器的建立是SVM(每一组的训练集,有100个是的,100个不是的),局限性是只能够识别数字,因为训练的集合就是数字。训练的集合在./toolbox/vision/wisiondemos/digits/synthetic下面。

结果我基本照搬他的方法之后,发现结果不太好。两个原因:1、预处理不对;2、训练集合不太符合要求

但是,我发现测试集合好像还满满足需求的,所以把测试集合当成训练集合就好了哈哈哈哈~~

特征的提取:extractHOGFeatures(img,'CellSize',[4,4])

分类器:svm(trainingFeatures, trainingLabels(:,d))

判定:if svmclassify(svm(digit),testFeatures)==1

实验结果是,总之以上三个图可以识别。。。因为,说了是最简单的ocr问题啊= =

当然matlab2014b里面已经有了ocr函数,高大上的两句话: result = ocr(I), word=results,Words{},已经跪了。。


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: