依据矩阵的二维相关系数进行OCR识别
我想通过简单的模板匹配来进行图像识别。
把预处理好的字符图片,分别与A到Z的样本图片进行模板匹配。
结果最大的表明相关性最大,就能够识别字符图片了。
在实际应用中。我用了openCV的matchTemplate()函数,可是未达到我想要点的效果。
matchTemplate()的功能是在图像中搜索出指定的模板,假设模板是从待搜索的图像中截取出来的,会有非常好的效果。可是假设模板不是待搜素图像的一部分,似乎达不到我想要的效果。
在尝试了matlab的corr2()后。发现corr2能非常好的解决我的问题。
double Card::corr2(Mat matA, Mat matB){
//计算两个同样大小矩阵的二维相关系数
double corr2 = 0; double Amean2 = 0;
double Bmean2 = 0;
for (int m = 0; m < matA.rows; m++) {
uchar* dataA = matA.ptr<uchar>(m);
uchar* dataB = matB.ptr<uchar>(m);
for (int n = 0; n < matA.cols;n++) {
Amean2 = Amean2 + dataA[n];
Bmean2 = Bmean2 + dataB[n];
}
}
Amean2 = Amean2 / (matA.rows * matA.cols);
Bmean2 = Bmean2 / (matB.rows * matB.cols); double Cov = 0;
double Astd = 0;
double Bstd = 0;
for (int m = 0; m < matA.rows; m++) {
uchar* dataA = matA.ptr<uchar>(m);
uchar* dataB = matB.ptr<uchar>(m);
for (int n = 0; n < matA.cols;n++) {
//协方差
Cov = Cov + (dataA[n] - Amean2) * (dataB[n] - Bmean2);
//A的方差
Astd = Astd + (dataA[n] - Amean2) * (dataA[n] - Amean2);
//B的方差
Bstd = Bstd + (dataB[n] - Bmean2) * (dataB[n] - Bmean2);
}
}
corr2 = Cov / (sqrt(Astd * Bstd)); return corr2;
}
//待搜索图像
Mat srcImage = imread("M:/图像处理实验/验证码/byx001.bmp",1);
Mat resizeMat = Mat::zeros(25, 25, CV_8UC3);
//缩放为25*25的矩阵。由于要相关匹配的模板大小为25*25
resize(srcImage,resizeMat,resizeMat.size()); //相关匹配
double ccorrVal[26] = {0}; double max = 0;
int count = 0;
for (int m = 0; m < 26; m++){
char recogPath[100] = {1};
strcpy(recogPath,"M://图像处理实验//验证码//大写字母//");
char num[2] = {1};
num[0] = 65 + m;
strcat(recogPath, num);
strcat(recogPath,".bmp"); Mat img_display;
resizeMat.copyTo( img_display );
Mat std = imread(recogPath,0); Mat resizeMatSTD = Mat::zeros(25, 25, CV_8UC3);
resize(std,resizeMatSTD,resizeMatSTD.size()); adaptiveThreshold(resizeMatSTD ,resizeMatSTD ,255 ,ADAPTIVE_THRESH_MEAN_C ,THRESH_BINARY,5,1); corr2Val[m] = corr2(resizeMatSTD,img_display); if (max <= corr2Val[m]){
max = corr2Val[m];
count = m;
}
}
char pathname[100]={1};
strcpy(pathname,"M://图像处理实验//验证码//test//字符_");
char num[10];
_itoa(i, num, 10);
strcat(pathname, num); char C[2] = {1};
C[0] = 65 + count;
strcat(pathname, C);
strcat(pathname,".bmp");
imwrite(pathname, resizeMat);
字符模板:
识别结果输出:
依据矩阵的二维相关系数进行OCR识别的更多相关文章
- 牛客练习赛1 矩阵 字符串二维hash+二分
题目 https://ac.nowcoder.com/acm/contest/2?&headNav=www#question 解析 我们对矩阵进行二维hash,所以每个子矩阵都有一个额hash ...
- 【c语言】二维数组中的查找,杨氏矩阵在一个二维数组中,每行都依照从左到右的递增的顺序排序,输入这种一个数组和一个数,推断数组中是否包括这个数
// 二维数组中的查找,杨氏矩阵在一个二维数组中.每行都依照从左到右的递增的顺序排序. // 每列都依照从上到下递增的顺序排序.请完毕一个函数,输入这种一个数组和一个数.推断数组中是否包括这个数 #i ...
- Atitit zxing二维码qr码识别解析
Atitit zxing二维码qr码识别解析 1.1. qr码识别解析 by zxing1 1.2. 解码lib:qrcode.jar 2 1.3. atitit.二维码生成总结java zxing ...
- Python 实现二维码生成和识别
今天突然想给自己自己做个头像,然后还是二维码的形式,这样只要扫一扫就可以访问我的主页.然后就开始自己的苦逼之路... 其实实现二维码java,c#,C++等都可以实现:由于自己正在学python,所以 ...
- 计蒜客模拟赛D1T1 蒜头君打地鼠:矩阵旋转+二维前缀和
题目链接:https://nanti.jisuanke.com/t/16445 题意: 给你一个n*n大小的01矩阵,和一个k*k大小的锤子,锤子只能斜着砸,问只砸一次最多能砸到多少个1. 题解: 将 ...
- BZOJ.2462.[BeiJing2011]矩阵模板(二维Hash)
题目链接 序列上的Hash和前缀和差不多,二维Hash也和二维前缀和差不多了. 预处理大矩阵所有r*c的小矩阵hash值,再对询问的矩阵Hash. 类比于序列上\(s[r]-s[l-1]*pow[r- ...
- BZOJ2462[Beijing2011]矩阵模板(二维Hash)
二维矩阵匹配问题,至今不知道Q的范围是多少,反正是要求做到读入复杂度. 二维Hash:就是一维的等效拓展,注意两维的Base不能相同. 其余就是一维Hash和二维前缀和的结合,可以自然溢出,据说概率很 ...
- Book of Shaders 02 - 矩阵:二维仿射变换练习
0x00 一些废话 如果要深入学习 CG (Computer Graphics,计算机图形学),必然要学习相关的数学知识.CG 涉及到多个不同的领域,根据所研究领域的不同,也会涉及到不同的数学分支.但 ...
- 洛谷1527(bzoj2738)矩阵乘法——二维树状数组+整体二分
题目:https://www.luogu.org/problemnew/show/P1527 不难想到(?)可以用二维树状数组.但维护什么?怎么查询是难点. 因为求第k小,可以考虑记权值树状数组,把比 ...
随机推荐
- [转]linux下logrotate 配置和理解
转自:http://blog.csdn.net/cjwid/article/details/1690101 对于Linux 的系统安全来说,日志文件是极其重要的工具.系统管理员可以使用logrotat ...
- Hadoop Hive概念学习系列之hive里的桶(十一)
不多说,直接上干货! Hive还可以把表或分区,组织成桶.将表或分区组织成桶有以下几个目的: 第一个目的是为看取样更高效,因为在处理大规模的数据集时,在开发.测试阶段将所有的数据全部处理一遍可能不太 ...
- 消息队列 (2) java实现简单的RabbtMQ
假设有如下问题: 1.如果消费者连接中断,这期间我们应该怎么办? 2.如何做到负载均衡? 3.如何有效的将数据发送到相关的接收者?就是怎么样过滤 4.如何保证消费者收到完整正确的数据 5.如何让优先级 ...
- JS——思维拓展
1.阶乘求和:4的阶乘是1*2*3*4 <script> function jiechen(value) { var n = 1; for (var i = 1; i <= valu ...
- ASP.net参数传递总结
同一页面.aspx与.aspx.cs之间参数传递 1. .aspx.cs接收.aspx的参数:由于.aspx和.aspx.cs为继承关系,所以.aspx.cs可以直接对.aspx中的ID进行值提取,具 ...
- ajax不执行success的问题
有时候经常会遇到ajax请求后台,然后后台返回数据后,不触发ajax的success函数的问题,归根到底,这与ajax的参数设置dataType和后台的返回值的类型有关,现总结如下: 一.后台返回值的 ...
- 【Caffe】Ubuntu16.04上配置安装caffe(Only CPU)
一.首先看看自己的系统,Ubuntu16.04,cpu,没有Nvidia,没有opencv 二.安装依赖包 安装protobuf,leveldb,snappy,OpenCV,hdf5, protobu ...
- Nrpe 插件安装教程
Nrpe 插件安装教程 blog地址: http://www.cnblogs.com/caoguo 一.nagios plugins的安装 [root@Nrpe ~]# yum install -y ...
- privot函数使用
语法: table_source PIVOT( 聚合函数(value_column) FOR pivot_column IN(<column_list>) ) 将列转化为行 写个小示例 : ...
- SSH远程执行命令环境变量问题
SSH命令格式 usage: ssh [-1246AaCfgKkMNnqsTtVvXxYy] [-b bind_address] [-c cipher_spec] [-D [bind_address: ...