车牌提取,北京交通大学数字图像处理大作业

更新时间:2023-07-25 01:09:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

数字图像处理,车牌识别,vc++,黄琳琳教授

《数字图像处理》

车牌检测与字符分割

研学报告

学 院: 专 业: 学生姓名: 学 号: 任课教师:

电子信息工程学院 电子科学与技术

何梦浩 董浩 孔明 李泽润

12213010 12213034 12213039 12213014

黄琳琳 彭亚辉

数字图像处理,车牌识别,vc++,黄琳琳教授

目录

《数字图像处理》 ................................................................................. 1 车牌检测与字符分割.............................................................................. 1 研学报告 ................................................................................................. 1 摘 要 ....................................................................................................... 3 1 车牌识别的研究背景:意义、应用 ............................................ 4 2 程序的实现方法: ........................................................................ 5 2.1预处理: ............................................................................... 5 2.2 车牌提取: ........................................................................... 7 2.3 车牌校正: ......................................................................... 18 2.4 字符分割: ......................................................................... 21 3 实验结果及分析: ...................................................................... 33 4 本课程收获及建议: .................................................................. 33 4.1 收获: ................................................................................ 33 4.2 建议: ................................................................................ 33 5 组员贡献率 ................................................................................. 33 6 参考文献 ..................................................................................... 34

数字图像处理,车牌识别,vc++,黄琳琳教授

摘 要

整个车牌识别系统分为图像采集、车牌定位、字符分割、字符识别四大部分。现有研究算法的理论基础上,在Visual C ++平台下,采集到的图像经过一系列预处理;在车牌定位模块中,采用了二值化方法的基础上,利用灰度跳变的特点,检测到车牌的上下边界和左右边界。至此,车牌完全定位出来;在车牌图像的倾斜矫正模块中,通过对图像左右半边目标像素平均高度的统计来进行倾斜的调整;最后字符分割。由于知识和精力有限,本组没有做最后的字符识别部分。

关键词:车牌定位,倾斜校正,字符分割

数字图像处理,车牌识别,vc++,黄琳琳教授

1 车牌识别的研究背景:意义、应用

1.1 意义

车牌识别技术要求能够将运动中的汽车牌照从复杂背景中提取并识别出来,通过车牌提取、图像预处理、特征提取、车牌字符识别等技术,识别车辆牌号,目前的技术水平为字母和数字的识别率可达到96%,汉字的识别率可达到95%。

1.2 应用

车牌识别在高速公路车辆管理中得到广泛应用,电子收费(ETC)系统中,也是结合DSRC技术识别车辆身份的主要手段。

在停车场管理中,车牌识别技术也是识别车辆身份的主要手段。在深圳市公安局建设的《停车库(场)车辆图像和号牌信息采集与传输系统技术要求》中,车牌识别技术成为车辆身份识别的主要手段。

车牌识别技术结合电子不停车收费系统(ETC)识别车辆,过往车辆通过道口时无须停车,即能够实现车辆身份自动识别、自动收费。在车场管理中,为提高出入口车辆通行效率,车牌识别针对无需收停车费的车辆(如月卡车、内部免费通行车辆),建设无人值守的快速通道,免取卡、不停车的出入体验,正改变出入停车场的管理模式。

图1-1

数字图像处理,车牌识别,vc++,黄琳琳教授

2 程序的实现方法: 2.1预处理:

2.1.1根据车牌部分的蓝色分量较大的情况,设置阈值,使图像二值化,让车牌部分的底色与其他图像区域区别开来,我组发现:在设置阈值时,用HSV模型比RGB模型更加准确地进行车牌特征提取。

2.1.2 在二值化图像上在此进行处理,通过形态学处理去除车牌周围噪声,以便准确提取车牌。

【程序如下】

void CImgProView::Color() {

BYTE r,g,b; int i,j; huiimg= new BYTE[width*height]; huiimg1= new BYTE[width*height]; BYTE max,min,delta; flag=1; double h,s,v; for(int i=0;i<height;i++) { for(int j=0;j<width;j++) { b = rgbimg[i*3*width+j*3]; g = rgbimg[i*3*width+j*3+1]; r = rgbimg[i*3*width+j*3+2]; max=(r>g)?r:g; max=(max>b)?max:b; min=(r<g)?r:g; min=(min<b)?min:b; delta=max-min; if(delta==0) h=0;

数字图像处理,车牌识别,vc++,黄琳琳教授

}

else {

if(max==r&&g>=b) h=double(60*(g-b))/delta; if(max==r&&g<b) h=double(60*(g-b))/delta+360; if(max==g) h=double(60*(b-r))/delta+120; if(max==b) h=double(60*(r-g))/delta+240; }

v=max; if(v==0){ s=0; } else s=double(delta)/max; if(h<0) h+=360;

if((h<=270.0&&208.0<=h)&&s>0.52){ huiimg1[i*width+j] =255; //huiimg1[i*width+j]=255; } else{ huiimg1[i*width+j]= 0; //huiimg1[i*width+j]=0; }

if((h<=270.0&&205.0<=h)&&s>0.48){ //huiimg[i*width+j] =255; huiimg[i*width+j]=255; } else{ //huiimg[i*width+j]= 0; huiimg[i*width+j]=0; } }

BYTE *tempOut;

tempOut = new BYTE[width*height];

数字图像处理,车牌识别,vc++,黄琳琳教授

//memcpy( temp, image, sizeof(BYTE)*width*height);

erosion( huiimg1, width, height, tempOut,1); dilation(huiimg1, width, height, tempOut,1); erosion( huiimg1, width, height, tempOut,2); OnInitialUpdate(); }

【实验效果示例】

图片2.1-1

2.2 车牌提取:

在预处理基础上,检测出已经转化为白色的部分,然后划定白色区域的范围,最终检测出车牌的上下左右边界位置,将其提取出来。

【程序如下】

void CImgProView::OnDraw(CDC* pDC) { CImgProDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); tempOut = new BYTE[width*height]; temp = new BYTE[width*height]; outImg1=new BYTE[width*height]; // TODO: add draw code for native data here //BYTE r,g,b;

if( image == 0 )

数字图像处理,车牌识别,vc++,黄琳琳教授

return;

int i, j;

if(rawflag == 1) { BYTE gray; for( i=0; i<height; i++) { for( j=0; j<width; j++) { gray = image[i*width+j]; pDC->SetPixel( j, i, RGB(gray,gray,gray)); } } }

////// show outImg here //////////////////////

if(bmpflag == 1) { BYTE r,g,b; for( i=0; i<height; i++) for(j=0; j<3*width; j=j+3) { b = rgbimg[i*3*width+j]; g = rgbimg[i*3*width+j+1]; r = rgbimg[i*3*width+j+2]; pDC->SetPixelV( j/3, i, RGB(r, g, b) ); } }

if(flag == 1) { BYTE gray; if(huiimg1) { for( i=0; i<height; i++) { for( j=0; j<width; j++) { gray =huiimg1[i*width+j]; // pDC->SetPixel( j+width, i, RGB(gray,gray,gray)); } } }

数字图像处理,车牌识别,vc++,黄琳琳教授

for( i=100; i<height; i++) { for( j=100; j<width-100; j++){ if(huiimg1[i*width+j]==255) { y1=i+3; break; } } if(huiimg1[i*width+j]==255) break; }

for( i=height-20; i>0; i--) { for( j=20; j<width-20; j++){ if(huiimg1[i*width+j]==255) { y2=i+1; break; } } if(huiimg1[i*width+j]==255) break; }

for(j=120; j<width-50; j++) { for( i=50; i<height-50; i++ ){ if(huiimg1[i*width+j]==255) { x1=j-2; break; } } if(huiimg1[i*width+j]==255) break; }

for(j=width-70; j>0; j--) { for( i=100; i<height-50; i++ ){ if(huiimg1[i*width+j]==255) {

数字图像处理,车牌识别,vc++,黄琳琳教授

x2=j+2; break; } } if(huiimg1[i*width+j]==255) break; }

CPen NewPen( PS_SOLID, 1, RGB(255,0,0) ); pDC->SelectObject( &NewPen );

pDC->MoveTo(x1,y1); pDC->LineTo(x2,y1); pDC->LineTo(x2,y2); pDC->LineTo(x1,y2); pDC->LineTo(x1,y1);

【实验效果】

图片 2.2-1

数字图像处理,车牌识别,vc++,黄琳琳教授

图片 2.2-2

图片 2.2-3

数字图像处理,车牌识别,vc++,黄琳琳教授

图片 2.2-4

图片 2.2-5

数字图像处理,车牌识别,vc++,黄琳琳教授

图片 2.2-6

图片 2.2-7

图片 2.2-8

数字图像处理,车牌识别,vc++,黄琳琳教授

图片 2.2-9

图片 2.2-10

图片 2.2-11

数字图像处理,车牌识别,vc++,黄琳琳教授

图片 2.2-12

图片 2.2-13

图片 2.2-14

数字图像处理,车牌识别,vc++,黄琳琳教授

图片 2.2-15

图片 2.2-16

图片 2.2-17

数字图像处理,车牌识别,vc++,黄琳琳教授

图片 2.2-18

图片 2.2-19

图片 2.2-20

数字图像处理,车牌识别,vc++,黄琳琳教授

2.3 车牌校正:

2.3.1 应用图像自身的倾斜度构成一定斜率的直线,将图像等分为左右两边,风别求得两边的平均高度,最后求得直线斜率。

2.3.2 求得车牌的倾斜的等效直线斜率之后,可通过旋转矫正和几何下拉的多种校正方法,小组使用了几何校正,将图像上的像素点减去直线上同一条纵行的点的纵坐标得到校正后的图像。

【程序如下】

double CImgProView::K_img(BYTE*img,int w1,int w2,int h1,int h2) { int i,j; int count=0; int l_ave=0,r_ave=0; double k; for(i=h1;i<h2;i++) { for(j=w1;j<(w2+w1)/2;j++) { if(img[i*width+j]==255) { count +=(w2+w1)/2-j; l_ave +=i*((w2+w1)/2-j); } } } l_ave /= count; count=0; for(i=h1;i<h2;i++) { for(j=(w2+w1)/2;j<w2;j++) { if(img[i*width+j]==255) { count +=w2-j; r_ave +=i*(w2-j); }

数字图像处理,车牌识别,vc++,黄琳琳教授

} } r_ave /= count; k =(double) (l_ave-r_ave)/((w2-w1)/2); return k; }

void CImgProView::jihejiaozheng(BYTE*img,int w1,int w2,int h1,int h2,BYTE*oImg) { double k; int i,j; int x,y; k=K_img(img,x1,x2,y1,y2); for(y=0;y<height;y++) for(x=0;x<width;x++) { oImg[y*width+x]=0; } for(i=h2;i>h1;i--) { for(j=w1;j<w2;j++) { x=j; y=(int)(i+(j-w1)*k); oImg[y*width+x] = img[i*width+j]; } } }

数字图像处理,车牌识别,vc++,黄琳琳教授

2.3.1 正斜率倾斜校正

【实验效果】

图 2.3-1

图 2.3-3

数字图像处理,车牌识别,vc++,黄琳琳教授

2.3.2 负斜率倾斜校正

【实验效果】

图 2.3-3

2.4 字符分割:

在字符分割之前,首先进行预处理,选用另外的阈值来重新处理图像,获得新的二值化图像。

然后通过投影法,统计出垂直方向上字符像素的个数来确定车牌的每个字符的位置坐标,并在二值化的图像中标记出来。

【程序如下】

BYTE g;

int

n[1000];

for(i=y1;i<y2;i++)

for( j=x1;j<x2;j++) { }

g=stemp[i*width+j];

pDC->SetPixel(j-x1+2*width,i-2*y1+y2,RGB(g,g,g)); pDC->SetPixel(j-2*x1+x2,i-y1+height,RGB(g,g,g));

本文来源:https://www.bwwdw.com/article/9hlm.html

Top