bmp 格式图像印刷体数字的识别
2014-07-07 17:27
218 查看
一、实验目的
初步了解模板匹配算法,理解bmp 图像在内存中的存储形式,实现bmp 格式图像印刷体数字的识别。
a) 模板库的建立
将包含0—9 十个数字的十张bmp 格式的图像(本模板库的图像均为白色背景黑色字体)读入,将其像素信息分别存入十个50*50 的二维数组中。实验中规定灰度值低于50 的为有效像素点,其对应的二维数组中的数值定义为1,灰度值大于50 的认为是无效点,其对应的二维数组中的数值定义为0.
b)待检测图像中的数字分离
定义结构体
struct
{
int Left;
int Right;
}W[20];
struct
{
int Up;
int Down;
}H[20];
如输入图像包含n*m 个数字,则需要将n*m 个数字分离开之后,分别与模板库匹配并分别识别,将识别结果存入result[m*n]的数组中。 以1*m 个数字的图像为例,先统计图像中每行每列有效像素点分别存入grayw[]和grayh[]中,然后逐行逐列扫描图像,通过W[].Left 和W[].Right,H[].Up 和H[].Down 分
别标记每个数字的左右上下位置可将数值分离。
c) 模板的匹配与识别
![](http://img.blog.csdn.net/20140707172526953?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYTM1MDIwMzIyMw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
依次识别每一位数字。将每一位数字的像素信息存入50*50 的名为t 二维数组中,有效像素点定为1,无效像素点定义0。将得到的分离后的数字的二维数组t 与各个模板进行匹配。由于模板和待检测数字中的有效像素点在数组中均表示为1,可通过对应点相加之后对2 取余数再相加得到结果sum,比较待检测图像与十个模板得到的sum 的值,sum 最小的表示待检测数字与其图像重合点最多,即认为待检测数字为该数字。
![](http://img.blog.csdn.net/20140707172636718?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYTM1MDIwMzIyMw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
Step2:待检测图像中的数字分离
Step3:模板的匹配与识别
{
for( i=1; i<=ContH; i++)
{
for( j=1; j<=ContW; j++)
{
for( k=0; k<q; k++)
{
for( m=0; m<q; m++)
{
t[k][m] = 0;
}
}
for( ii=H[i].Up; ii<H[i].Down; ii++)
{
for( jj=W[j].Left; jj<W[j].Right; jj++)
{
if(*(bmpimage.imgbuf+ii*bmpimage.infohead.biWidth+jj) < 50)
t[ii-H[i].Up][jj-W[j].Left] = 1;
else
t[ii-H[i].Up][jj-W[j].Left] = 0;
}
}
for ( k=0; k<10; k++)
{
sum[k] = 0;
}
for( k=0; k<q; k++)
{
for( m=0; m<q; m++)
{
sum[0] += ( a0[k][m]+t[k][m])%2;
sum[1] += ( a1[k][m]+t[k][m])%2;
sum[2] += ( a2[k][m]+t[k][m])%2;
sum[3] += ( a3[k][m]+t[k][m])%2;
sum[4] += ( a4[k][m]+t[k][m])%2;
sum[5] += ( a5[k][m]+t[k][m])%2;
sum[6] += ( a6[k][m]+t[k][m])%2;
sum[7] += ( a7[k][m]+t[k][m])%2;
sum[8] += ( a8[k][m]+t[k][m])%2;
sum[9] += ( a9[k][m]+t[k][m])%2;
}
}
for( k=0; k<9; k++)
{
if ( sum[k]>sum[k+1])
result[(i-1)*ContW+j-1] = k+1;
else
sum[k+1] = sum[k];
}
}
}
return result;
}
初步了解模板匹配算法,理解bmp 图像在内存中的存储形式,实现bmp 格式图像印刷体数字的识别。
二、算法概要
由于实验要求是对标准印刷体数字进行识别,本实验采用模板匹配中最简单的像素点重合的方法,将待测图像中的数字与模板库中的各个数字进行比对,认为待测数字就是模板库中与其重合像素点最多的数字。 当bmp 图像读入实验板存储空间之后,imgbuf 指针指向其像素点数据的首地址。a) 模板库的建立
将包含0—9 十个数字的十张bmp 格式的图像(本模板库的图像均为白色背景黑色字体)读入,将其像素信息分别存入十个50*50 的二维数组中。实验中规定灰度值低于50 的为有效像素点,其对应的二维数组中的数值定义为1,灰度值大于50 的认为是无效点,其对应的二维数组中的数值定义为0.
b)待检测图像中的数字分离
定义结构体
struct
{
int Left;
int Right;
}W[20];
struct
{
int Up;
int Down;
}H[20];
如输入图像包含n*m 个数字,则需要将n*m 个数字分离开之后,分别与模板库匹配并分别识别,将识别结果存入result[m*n]的数组中。 以1*m 个数字的图像为例,先统计图像中每行每列有效像素点分别存入grayw[]和grayh[]中,然后逐行逐列扫描图像,通过W[].Left 和W[].Right,H[].Up 和H[].Down 分
别标记每个数字的左右上下位置可将数值分离。
c) 模板的匹配与识别
依次识别每一位数字。将每一位数字的像素信息存入50*50 的名为t 二维数组中,有效像素点定为1,无效像素点定义0。将得到的分离后的数字的二维数组t 与各个模板进行匹配。由于模板和待检测数字中的有效像素点在数组中均表示为1,可通过对应点相加之后对2 取余数再相加得到结果sum,比较待检测图像与十个模板得到的sum 的值,sum 最小的表示待检测数字与其图像重合点最多,即认为待检测数字为该数字。
三、算法步骤
Step1:模板库的建立Step2:待检测图像中的数字分离
Step3:模板的匹配与识别
四、程序说明
char * ImageNumReg( int ContW,int ContH){
for( i=1; i<=ContH; i++)
{
for( j=1; j<=ContW; j++)
{
for( k=0; k<q; k++)
{
for( m=0; m<q; m++)
{
t[k][m] = 0;
}
}
for( ii=H[i].Up; ii<H[i].Down; ii++)
{
for( jj=W[j].Left; jj<W[j].Right; jj++)
{
if(*(bmpimage.imgbuf+ii*bmpimage.infohead.biWidth+jj) < 50)
t[ii-H[i].Up][jj-W[j].Left] = 1;
else
t[ii-H[i].Up][jj-W[j].Left] = 0;
}
}
for ( k=0; k<10; k++)
{
sum[k] = 0;
}
for( k=0; k<q; k++)
{
for( m=0; m<q; m++)
{
sum[0] += ( a0[k][m]+t[k][m])%2;
sum[1] += ( a1[k][m]+t[k][m])%2;
sum[2] += ( a2[k][m]+t[k][m])%2;
sum[3] += ( a3[k][m]+t[k][m])%2;
sum[4] += ( a4[k][m]+t[k][m])%2;
sum[5] += ( a5[k][m]+t[k][m])%2;
sum[6] += ( a6[k][m]+t[k][m])%2;
sum[7] += ( a7[k][m]+t[k][m])%2;
sum[8] += ( a8[k][m]+t[k][m])%2;
sum[9] += ( a9[k][m]+t[k][m])%2;
}
}
for( k=0; k<9; k++)
{
if ( sum[k]>sum[k+1])
result[(i-1)*ContW+j-1] = k+1;
else
sum[k+1] = sum[k];
}
}
}
return result;
}
相关文章推荐
- bmp 格式图像印刷体数字的识别
- 数字图像处理编程之一:熟悉BMP图像格式
- 数字图像概念整理【4】——bmp、DIB文件格式
- 图像验证码的识别(一)——浅谈bmp文件格式
- 数字图像处理 CImage类的使用与封装(jpg png gif tif bmp等格式图像的加载、数据读写、保存等功能)
- 数字图像处理(第三版)—bmp图像的格式
- 转:关于使用ImageMagick和Tesseract进行简单数字图像识别
- 说明:本文主要介绍五种最常见和最常用的图像格式:BMP,PNG,JPEG,JPEG200,以及GIF
- 数字识别--图像预处理(整个过程)
- [转]BMP图像格式分析
- opencv3实现简单的数字图像识别(KNN)
- 数字图像处理:基于MATLAB的车牌识别项目 标签: 图像处理matlab算法 2017-06-24 09:17 98人阅读 评论(0)
- 简单判断图像格式的办法(BMP/JPEG…
- BMP图像文件格式分析附带图解
- BMP位图图像格式简介
- 数字图像识别——一种场景的实现
- 数字图像处理:基于MATLAB的车牌识别项目
- BMP图像的格式及应用
- c++ 解析从浏览器端传过来的图像base64编码,并转换成opencv识别的格式
- 【matlab】matlab读用索引来表示(伪彩色)的bmp图像的格式相关问题