根据矩阵的二维相关系数进行ocr识别(代码片段)

lc__________ lc__________     2022-12-12     174

关键词:

我想通过简单的模板匹配来进行图像识别。

把预处理好的字符图片,分别与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);

字符模板:


识别结果输出:



协方差矩阵与相关系数矩阵(代码片段)

文章目录前言1.方差、协方差与相关系数2.协方差矩阵3.相关系数矩阵前言  本篇博客主要介绍一下方差、协方差及相关系数的相关知识,进而引入了协方差矩阵与相关系数矩阵,并结合相关实例进行说明。1.方差、协方... 查看详情

如何使用相关系数矩阵进行聚类?

...SciPy中使用链接和fcluster函数吗?联动函数需要n*m矩阵(根据教程),但我想使用n*n矩阵。我的代码是corre=mp_N.corr()#mp_Nisrawdata 查看详情

matlab利用主成分分析进行综合评价排名(代码片段)

...s.txt文档中,17个省,8项指标。编写程序求解首先根据相关系数矩阵对指标变量筛选,将相关系数接近于1的两个变量剔除一个,然后根据保留下来的变量的观测样本矩阵进行分析。计算数据的相关系数矩阵程序如... 查看详情

求相关系数矩阵(代码片段)

...“城市”列为索引列xishu=data.corr()print(data.corr())#相关系数矩阵,即给出了任意两款菜式之间的相关系数print("显示“城市火灾”与其他的相关系数:")print(data.corr()[u‘森林火灾‘])#只显示“森林火灾”与其他菜式的相关系数cityfire=d... 查看详情

python遥感图像处理应用篇(二十四):python绘制遥感图像各波段热力图(相关系数矩阵)(代码片段)

...各个波段绘制热力图,首先需要计算波段之间的相关系数矩阵,而计算遥感图像波段相关系数矩阵有不同的方法,常用的我们可以采用遥感图像处理软件计算,比如ENVI软件就可以计算相关系数矩阵,使用工具箱中的Statistics工具... 查看详情

python遥感图像处理应用篇(二十四):python绘制遥感图像各波段热力图(相关系数矩阵)(代码片段)

...各个波段绘制热力图,首先需要计算波段之间的相关系数矩阵,而计算遥感图像波段相关系数矩阵有不同的方法,常用的我们可以采用遥感图像处理软件计算,比如ENVI软件就可以计算相关系数矩阵,使用工具箱中的Statistics工具... 查看详情

matlab|好看的相关系数矩阵图绘制(代码片段)

...#xff0c;如果有用的话点赞,转发走起~绘制超好看的相关系数矩阵图!工具函数由于过长将放在最后展示,以下先展示使用方式和绘制效果:使用效果使用教程0数据准备数据就多列的数值矩阵即可:X=[-2.8461-0.9470-0.... 查看详情

数据降维(代码片段)

...常用)实现思路对数据进行标准化计算出数据的相关系数矩阵(是方阵,维度是nxn,n是特征的数量)计算出相关系数矩阵的特征值和特征向量(虽然这里说的是向量,但是是矩阵,这个矩阵的每一列都是特征值或者特征向量,是nxn),特征值是... 查看详情

如何快速绘制相关系数矩阵(代码片段)

importpandasaspdtrain=pd.read_csv("dftest/train.csv")importseabornassnsimportmatplotlib.pyplotaspltdefshowcov(df):dfData=df.corr()plt.subplots(figsize=(9,9))#设置画面大小sns.heatmap(dfData,annot=True,vmax=1 查看详情

二维数组相关问题(代码片段)

2019-06-02 20:15:54 1.创建二维数组以矩阵的形式显示它的数据元素。一个矩阵代表若干行的数据元素,每行有相同的列数。如果一个矩阵只有一行,则被称为行矩阵。(若只有一列,则被称为列矩阵)。一个行矩阵或者一个... 查看详情

c++练气期之二维数组与矩阵运算(代码片段)

...这样的表格数据可以使用二维数组进行存储。二维数组和矩阵的关系:有些教材上,把二维数组和矩阵当成一回事,其实,两者还是有区别的。矩阵:矩阵(Matrix)是线性数学中的概念,是一个按照长方阵列排列的复数或实数集... 查看详情

使用python,opencv进行tesseract-ocr绑定及识别(代码片段)

使用Python,OpenCV进行Tesseract-OCR绑定及识别1.效果图2.安装Tesseract+Python“绑定”及识别3.源码参考上一篇博客介绍了Windows上Tesseract-OCR的安装,并使用命令行参数进行了OCR数字和字母的识别。这一篇将介绍如何使用Python应... 查看详情

二维数组---矩阵相关问题(代码片段)

矩阵问题做到一些相关矩阵的题目,在这里总结一下呢矩阵乘法给定一个m行、n列的矩阵A和一个n行、m列的矩阵B。你需要用矩阵A与矩阵B相乘,并且将m行m列的乘积结果输出#include<stdio.h>#include<string.h>intmain()intmatri... 查看详情

基于opencv识别定位二维码(c++版)(代码片段)

前言因工作需要,需要定位图片中的二维码;我遂查阅了相关资料,也学习了opencv开源库。通过一番努力,终于很好的实现了二维码定位。本文将讲解如何使用opencv定位二维码。定位二维码不仅仅是为了识别二维码;还可以通过... 查看详情

使用python进行名片ocr(识别姓名,职务,电话,email邮箱)(代码片段)

...换以获得收据的自顶向下视图利用Tesseract对收据上的文本进行OCR使用正则表达式提取价格数据这篇博客将介绍如何使用Python对名片进行OCR,从名片中提取姓名、职务、电话号码和电子邮件地址。是收据扫描仪OCR的扩展,... 查看详情

微信小程序实现ocr扫描识别(代码片段)

...驶证、营业执照)的扫描识别认证功能;这里我根据自己的经历借鉴总结一下相关的方法;文章目录一、第三方插件:OCR支持1、添加第三方插件2、购买识别次数3、使用二、百度OCR1、申请百度AI开放平台账号2、创... 查看详情

开发函数计算的正确姿势——ocr服务(代码片段)

...(OpticalCharacterRecognition,OCR)是指对文本资料的图像文件进行分析识别处理,获取文字及版面信息的过程。亦即将图像中的文字进行识别,并以文本的形式返回。Tesserocr:Tesserocr是python的一个OCR识别库,但其实是对tesseract做的一层p... 查看详情

基于python实现对pdf文件的ocr识别(代码片段)

...02/25/ocr-on-pdf-files-using-python/ 大家可能听说过使用Python进行OCR识别操作。在Python中,最出名的库便是Google所资助的tesseract。利用tesseract可以很轻松地对图像进行识别。现在问题来了, 查看详情