【数图大作业】基于模板匹配的文字识别(三)(空格识别+模板匹配)

【数图大作业】基于模板匹配的文字识别(一)
【数图大作业】基于模板匹配的文字识别(二)
前两篇简要介绍了题目和实现思路,给出了预处理和行列分割提取字符的方案。
接下来介绍空格识别部分和模板匹配方法。

空格识别

根据分块的左右边界坐标,比较字宽,确定是否存在空格。

首行空格:

首行空格和其余空格不同,上面和左边都没有字,只能和下一行进行比对,才能确定空格宽度,进而确定空格数目。

字中间空格:

需要完成匹配后,判断是否为标点符号,因为中文标点符号间隔较大,容易被误判成空格。

步骤:

(1) 判断是否为标点符号(其余空格)
(2) 根据间距是否大于字宽判断空格是否存在
(3) 根据间距和字宽的比值判断空格数目

流程

代码:

首行空格:

if((leftMargin[h+1][w] - leftMargin[h][w]) < (rightMargin[h][w] - leftMargin[h][w]) && (w == 0) && (h != num_row - 1))   
{
	ratio = (leftMargin[h][w] - leftMargin[h+1][w]) / (rightMargin[h][w] - leftMargin[h][w]); // 计算间距与字宽的比率 
	for(space = 0; space < 2 * ratio; space++)
		printf(" "); 
} 

其他空格:

// 首先要判断是否为标点符号
if(w != 0) 
{
	if((leftMargin[h][w] - rightMargin[h][w-1]) > (rightMargin[h][w] - leftMargin[h][w]))  
	{
		ratio = (leftMargin[h][w] - leftMargin[h][w-1]) / (rightMargin[h][w] - leftMargin[h][w]); // 计算间距与字宽的比率 
		if(ratio > 1)
		for(space = 0; space < ratio; space++)
			printf(" "); 
	}
}

模板匹配

模板匹配的核心就是在图片与图片之间的相似度的计算。

建立一个相似度指标 λ,将待识别字符图像与每个模板图像进行匹配,求得 λ_k,取得 λ_k 最小值时的对应模板字符即为所求。
f(x, y) 是指待识别字符图像中 (x,y) 点处的灰度值, f_k(x, y) 是指第k个模板图像中对应点 (x,y) 处的灰度值,k 代表字符图像模板的编号。

曼哈顿距离计算:

传统距离
计算两个图片对应位置灰度值之差的绝对值。

汉明距离计算:

汉明距离
计算两个图片对应位置灰度值异或运算的结果。

要注意的是,由于我们预处理部分对输入的待识别图片做了反色处理,且输入图片和模板都做了二值化处理(像素值只有0和255这两种),所以反色后的输入图片和模板的灰度值不同时,两张图片相似。

代码:

imaqGetImageSize (dstImage, &width, &height);  
min = 100000; 
for(int y = 1; y < height - 1; y++)
{
	for(int x = 1; x < width - 1; x++)
	{
		point1.x = x;
		point1.y = y;
		imaqGetPixel(dstImage, point1, &pix1); 
		cmp[x][y] = pix1.grayscale; // 记录待匹配文字灰度值  
	}	
}

for(int i = 0; i < num_word; i++) 
{
	score = 0; 
	imaqGetImageSize (fontsImage[i], &width, &height);
	for(int y = 1; y < height - 1; y++)
	{
		for(int x = 1; x < width - 1; x++)
		{
			point2.x = x;
			point2.y = y;
			imaqGetPixel(fontsImage[i], point2, &pix2);  
			// similarity = abs(cmp[x][y] - pix2.grayscale);  // 曼哈顿距离
			similarity = cmp[x][y] ^ (int)pix2.grayscale; // 汉明距离
			if(similarity == 0)  
				score++;			 
		}
	}
	if(score < min)
	{
		min = score;
		label = i; // 记录匹配对象
	}
}

最终效果

输入图片:
输入图片
行列分割效果图:
行列分割
匹配效果:
模板匹配效果
控制台输出:
控制台输出

演示视频

资源下载

下载地址

  • 7
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不雨_亦潇潇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值