Matlab课程实验报告 - 图文

更新时间:2023-09-29 06:25:01 阅读量: 综合文库 文档下载

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

西北工业大学

《基于MATLAB的数字信号处理》实验报告

学 院:学 号:姓 名:专 业:实验时间:指导教师:

2014年7月

西北工业大学 2014年 07 月

1

实验一 MATLAB基本编程实验 一、实验目的及要求 1.熟悉MATLAB运行环境; 2. 掌握MATLAB的基本语法和函数; 3. 掌握MATLAB的基本绘图功能 二、实验设备(环境)及要求 1. 计算机 2. Matlab软件编程实验平台 三、实验内容与步骤 1.求下列线性方程组的解 6x1?3x2?4x3?3?2x1?5x2?7x3??48x1?4x2?3x3??71062. 分别用for或while循环结构编写程序,求出 K??i?13。并考虑一种2i避免循环语句的程序设计算法实现同样的运算。 3. 在同一坐标系下绘制以下3条曲线,并作标记。 y1?sinx,y2?sinxsin(10x),y3??cosx, x?(0,?)四、设计思想 设计思想1.1: 对于AX=B类型的方程组求解,需要先对非奇异矩阵A求逆,若存在逆矩阵,然后与B相乘即为所求 设计思想1.2: 用for或while循环结构编写程序时,首先对K初始化为0,确定循环的起始条件、步长和终值条件;用非循环语句时,先确定首项、公比,然后带入到等比数 2

列求和公式中 设计思想1.3: 首先确定绘制曲线的每两点之间的间隔,然后在一幅图上绘制出所有曲线,并进行标注 五、程序代码及注释 程序代码1: >> A=[6 3 4; -2 5 7; 8 -4 -3]; %矩阵A >> X=inv(A) X = 0.1300 -0.0700 0.0100 0.5000 -0.5000 -0.5000 -0.3200 0.4800 0.3600 >> B=[3 -4 -7]'; X=X*B 程序代码2: 方法1:for循环结构实现 %结果初始化0 K= 0.0; for i = 1: 106 %默认步长为1 K=K+sqrt(3)/(2^i); end; fprintf('K=%f\\n',K); 方法2:while循环结构实现 K = 0.0;

3

i = 1; while i < 107 K = K +sqrt(3)/(2^i); i = i + 1; end; fprintf('K=%f\\n',K); 方法3:不使用循环,利用等比数列的前106项和公式实现 K = sqrt(3)/2.0; %数列首项 K = K *(1-0.5^106)/(1-0.5);%公比为0.5 fprintf('K=%f\\n',K); 程序代码3: x=0:0.01:pi; %步长0.01 y1=sin(x); y2=sin(x).*sin(10*x); y3=-cos(x); grid on%显示网格 hold on %在一幅图中绘制多条曲线 plot(x, y1, 'r','LineWidth',2); plot(x, y2, 'g','LineWidth',2); %y1红线表示,线宽为2 %y2绿线表示,线宽为2 plot(x, y3, 'b','LineWidth',2); %y3蓝线表示,线宽为2 %x轴范围0~3.5,y轴范围-1.2~1.2 axis([0,3.5,-1.2,1.2]); %图例注释自动放在最佳位置 legend('sin(x)','sin(x)sin(10x)','-cos(x)'); xlabel('x坐标轴'); %标注横坐标 ylabel('y坐标轴'); %标注纵坐标 title('三曲线对比图'); %标注标题 六、实验结果

4

实验结果1: X = 0.6000 7.0000 -5.4000 所以,X=[实验结果2: K=1.732051 实验结果3: 三曲线的对比图如下所示: ]=[ 0.6000, 7.0000, -5.4000]’ 图1.1 三曲线的对比

5

实验二 基于MATLAB信号处理实验 一、实验目的及要求 1. 回顾数字信号处理的主要内容; 2. 掌握利用MATLAB进行信号处理的方法; 3. 了解信号处理工具箱中一些函数的功能; 二、实验设备(环境)及要求 1. 计算机 2. Matlab软件编程实验平台 三、实验内容 1. 设序列 x(n)?[3,1,7,0,?1,4,2], ?3?n?3;y(n)?x(n?2)?w(n), 1 的高斯随机序列. 其中, w(n)是均值为0,方差为计算x(n)和y(n)之间的互相关,并画出互相关序列图。 1?e?j4?2 . 一数字滤波器由 H ( ? j 4? 频率响应函数描述 e ) ?1?0.8145ej? 1)写出其差分方程表示; 2)画出上面滤波器的幅频和相频图; 3)产生信号 x ( n ) ? sin( ? n / 2) ? 5cos( ? n ) 的200个样本,通过该滤波器得到输出 y(n), 试将输出y(n)的稳态部分与x(n)作比较,说明这两个正弦信号的幅度和相位是如何受该滤波器影响的。 3. 设计FIR滤波器(带通滤波器,四种窗函数, fs=2000Hz, 带通频率300Hz—600Hz,阶数自选, 画频率特性并分析比较)。 四、设计思想 设计思想2.1: 将求互相关问题转化为求卷积的问题,互相关的区间大小为两信号的区间端点分别相加,区间长度为两信号区间长度之和 设计思想2.2: 由系统的差分方程y(n)?0.8145y(n?4)?x(n)?x(n?4),得到方程的各个项的系

6

数,进而可求出系统的幅频和相频响应 设计思想2.3: 首先选定带通滤波器的阶数,根据采样频率、上、下限截止频率求得滤波器的各个参数,然后得出窗函数的频率特性 五、程序代码及注释 程序代码2.1: clc; clear all; x=[3,1,7,0,-1,4,2];%冲击信号x的幅度 nx=[-3:3]; %冲击信号x的取值范围 %对x进行右移2个单位,得到 x(n-2) ny=nx+2; y=x; w=normrnd(0,1,[1,7]); %w为均值为0,方差为1的高斯随机序列 nw=ny; %得到 y(n)=x(n-2)+w(n) %对x进行翻折 x=fliplr(x); nx=-fliplr(nx); %卷积 nyb=ny(1)+nx(1); nye=ny(length(y))+nx(length(x)); nrxy=[nyb:nye]; 7

rxy=conv(y,x); subplot(1,1,1); stem(nrxy,rxy); axis([-5,9,0,90]); xlabel('x'); title('x(n)与y(n)的互相关'); 程序代码2.2.2: clc clear all fs=1000; b=[1 0 0 0 1]; a=[1 0 0 0 -.8145]; [h,f]=freqz(b,a,512,fs); mag=abs(h);%幅度 ph=angle(h);%相位 subplot(2,1,1); ph=ph*180/pi;%由弧度转换为角度 plot(f,mag); grid; xlabel('Frequency/Hz'); ylabel('Magnitude'); title('幅频响应'); subplot(2,1,2); plot(f,ph); grid; xlabel('Frequency/Hz'); ylabel('Phase'); 8

title('相频响应'); 程序代码2.2.3: clc clear all N=200; n=linspace(-100,100,N); x=sin(pi*n/2)+5*cos(pi*n); N_fft=2^nextpow2(2*N); w=linspace(0,2*pi,N_fft); h_fft=(1+exp(-1j*4*w))./(1-0.8145*exp(-1j*4*w)); x_fft=fft(x,N_fft); y_fft=x_fft.*h_fft; y_temp=fftshift(ifft(y_fft)); y=y_temp(N_fft/2:N_fft/2+N-1); figure; plot(w,abs(h_fft),'b','LineWidth',2); hold on; plot(w,angle(h_fft),'g','LineWidth',2); legend('幅度','相位') figure; plot(n,x,'b'); hold on; plot(n,real(y),'g'); legend('x(n)','y(n)稳态部分') 程序代码2.3: fs=2000; %采样频率 fc1=300; %下限截止频率 fc2=600;%上限截止频率 9

N=31; % 滤波器的阶数 wlp=fc1/(fs/2); whp=fc2/(fs/2); wn=[wlp,whp];; %滤波器归一化后的上下限截止频率 w1=boxcar(N); %矩形窗的时域响应 w2=hanning(N); %汉宁窗的时域响应 w3=hamming(N); %海明窗的时域响应 w4=blackman(N); %布莱克窗的时域响应 %用不同的窗函数设计N阶的滤波器 b1=fir1(N-1,wn,w1); b2=fir1(N-1,wn,w2); b3=fir1(N-1,wn,w3); b4=fir1(N-1,wn,w4); %求出滤波器的频率响应 [H1 f1]=freqz(b1,1,512,fs); [H2 f2]=freqz(b2,1,512,fs); [H3 f3]=freqz(b3,1,512,fs); [H4 f4]=freqz(b4,1,512,fs); figure; subplot(2,1,1); plot(f1,20*log10(abs(H1))); xlabel('频率/Hz'); ylabel('振幅/dB'); title('矩形窗的幅频特性'); grid on; subplot(2,1,2); plot(f1,180/pi*unwrap(angle(H1))); xlabel('频率/Hz'); ylabel('相位'); 10

title('矩形窗的相频特性'); grid on; figure; subplot(2,1,1); plot(f2,20*log10(abs(H2))); xlabel('频率/Hz'); ylabel('振幅/dB'); title('汉宁窗的幅频特性'); grid on; subplot(2,1,2); plot(f2,180/pi*unwrap(angle(H2))); xlabel('频率/Hz'); ylabel('相位'); title('汉宁窗的相频特性'); grid on; figure; subplot(2,1,1); plot(f3,20*log10(abs(H3))); xlabel('频率/Hz'); ylabel('振幅/dB'); title('海明窗的幅频特性'); grid on; subplot(2,1,2); plot(f3,180/pi*unwrap(angle(H3))); xlabel('频率/Hz'); ylabel('相位'); title('海明窗的相频特性'); grid on; figure; 11

subplot(2,1,1); plot(f4,20*log10(abs(H4))); xlabel('频率/Hz'); ylabel('振幅/dB'); title('布莱克窗的幅频特性'); grid on; subplot(2,1,2); plot(f4,180/pi*unwrap(angle(H4))); xlabel('频率/Hz'); ylabel('相位'); title('布莱克窗的相频特性'); grid on; 六、实验结果 实验结果2.1: 图2-1 x(n)与y(n)的互相关序列图

12

由实验结果可知,x(n)与y(n)的互相关只在区间[-4,8]上有能力,刚好是区间[-3,3]与右移后的区间[-1,5]两端点之和,与结论一致。且互相关在2处达到最大。 实验结果2.2.1: 其表示的差分方程为: y(n)-0.8145y(n-4)=x(n)+x(n-4) 实验结果2.2.2: 滤波器的幅频和相频图如下所示: 图2-2 滤波器的幅频与相频图 实验结果2.2.3: 由下图实验结果可知,输出信号相对于输入信号有一小小的延迟,基本上x(n)的频点都通过了,滤波器是个梳状filter,正好在想通过的点附近相位为0,也就是附加延迟为0 13

图2-3 滤波器的幅度和相位变化 图2-4 两信号波形 实验结果2.3:

14

四种带通滤波器的窗函数的频率响应如下所示: 图2-5 矩形窗的频率特性 图2-6 汉宁窗的频率特性

15

图2-7 海明窗的频率特性 图2-8 布莱克曼窗的频率特性 16

实验三 基于MATLAB的图像处理实验 一、实验目的及要求 1.了解图像处理的基本概念和功能; 2. 掌握利用MATLAB进行图像处理的方法; 3. 了解图像处理工具箱中一些函数的功能; 二、实验设备(环境)及要求 1. 计算机 2. Matlab软件编程实验平台 三、实验内容 1.对一幅分别添加了椒盐噪声和高斯白噪声的图象进行均值和中值滤波(取三种不同大小的模板),并分析实验结果。 2.对一幅图像进行DCT变换,分别将小于5、10、20的变换系数置为0,进行反DCT得到重构图像,显示原图像和各重构图像并分别计算重构图像的峰值信噪比和置为0的变换系数的个数。 四、设计思想 设计思想3.1: 任意读取一幅图像,利用matlab自带函数imnoise()向图像中加入椒盐噪声和高斯噪声,并分别用3*3、5*5、7*7模板进行均值、中值滤波处理。均值滤波是一种线性滤波,也是低通滤波。中值滤波是一种统计滤波器,是非线性的。分别向图像中加入高斯噪声和椒盐噪声,利用不同的滤波方法,以及不同大小的窗口模板进行滤波,比较结果,得出结论。由实验可以看出,中值滤波对椒盐噪声的处理效果好,均值滤波对高斯噪声的处理效果好。无论是中值滤波还是均值滤波,都是其模板越大,图像越模糊。所以选择模板大小时,以处理图片效果最佳为宜。 设计思想3.2: 由于DCT变换有使图像能量几种在左上方的特性,因此重构图像保留了原始图像大部分的图像特征,其视觉效果与原始图像相差不大。对比重构前后的图像易知,重构后的图像稍显模糊,这是因为该压缩算法为有损压缩,压缩后的图像丢失了 17

原始图像部分数据信息。 五、程序代码及注释 程序代码3.1: %读取源图像 I = imread('cameraman.tif'); %向图像中加入椒盐噪声 J = imnoise(I,'salt & pepper',0.1); %向图像中加入高斯噪声 K = imnoise(I,'gaussian',0.02); figure; subplot(2,2,1); imshow(I); title('原图像'); subplot(2,2,3); imshow(J); title('加入椒盐噪声'); subplot(2,2,4); imshow(K); title('加入高斯噪声'); %进行3*3均值滤波 J_average1=filter2(fspecial('average',3),J)/255; %进行5*5均值滤波 J_average2=filter2(fspecial('average',5),J)/255; %进行7*7均值滤波 J_average3=filter2(fspecial('average',7),J)/255; figure; subplot(2,2,1); imshow(J);

18

title('加入椒盐噪声'); subplot(2,2,2); imshow(J_average1); title('3*3模板均值滤波'); subplot(2,2,3); imshow(J_average2); title('5*5模板均值滤波'); subplot(2,2,4); imshow(J_average3); title('7*7模板均值滤波'); %进行3*3中值滤波 J_Med1=medfilt2(J,[3 3]); %进行5*5中值滤波 J_Med2=medfilt2(J,[5 5]); %进行5*5中值滤波 J_Med3=medfilt2(J,[7 7]); figure; subplot(2,2,1); imshow(J); title('加入椒盐噪声'); subplot(2,2,2); imshow(J_Med1); title('3*3模板中值滤波'); subplot(2,2,3); imshow(J_Med2); title('5*5模板中值滤波'); subplot(2,2,4); imshow(J_Med3); title('7*7模板中值滤波'); 19

%进行3*3均值滤波 K_average1=filter2(fspecial('average',3),K)/255; %进行5*5均值滤波 K_average2=filter2(fspecial('average',5),K)/255; %进行7*7均值滤波 K_average3=filter2(fspecial('average',7),K)/255; figure; subplot(2,2,1); imshow(K); title('加入高斯噪声'); subplot(2,2,2); imshow(K_average1); title('3*3模板均值滤波'); subplot(2,2,3); imshow(K_average2); title('5*5模板均值滤波'); subplot(2,2,4); imshow(K_average3); title('7*7模板均值滤波'); %进行3*3中值滤波 K_Med1=medfilt2(K,[3 3]); %进行5*5中值滤波 K_Med2=medfilt2(K,[5 5]); %进行5*5中值滤波 K_Med3=medfilt2(K,[7 7]); figure; subplot(2,2,1); imshow(K); title('加入高斯噪声'); 20

g=fftshift(f); [M,N]=size(f); n1=floor(M/2); n2=floor(N/2); d0=20; for i=1:M for j=1:N d=sqrt((i-n1)^2+(j-n2)^2); if d>=d0 h1=1; h2=1+0.5; else h1=0; h2=0.5; end g1(i,j)=h1*g(i,j); g2(i,j)=h2*g(i,j); end end g1=ifftshift(g1); g1=uint8(real(ifft2(g1))); g2=ifftshift(g2); g2=uint8(real(ifft2(g2))); imshow(g2) handles.img=g2; guidata(hObject,handles); end %%%%%%%%字符分割%%%%%%% % --- Executes on button press in pushbutton3. 46

function pushbutton3_Callback(hObject, eventdata, handles) % hObject handle to pushbutton3 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) global d; d=handles.img; d=qiege(d); [m,n]=size(d); k1=1;k2=1;s=sum(d);j=1; while j~=n while s(j)==0 j=j+1; end k1=j; while s(j)~=0 && j<=n-1 j=j+1; end k2=j-1; if k2-k1>=round(n/6.5) [val,num]=min(sum(d(:,[k1+5:k2-5]))); d(:,k1+num+5)=0; % 分割 end end % 再切割 d=qiege(d); % 切割出 7 个字符 y1=10;y2=0.25;flag=0;word1=[]; while flag==0 [m,n]=size(d); 47

left=1;wide=0; while sum(d(:,wide+1))~=0 wide=wide+1; end if widey2 flag=1;word1=temp; % WORD 1 end d(:,[1:wide])=0;d=qiege(d); end end % 分割出第二个字符 [word2,d]=getword(d); % 分割出第三个字符 [word3,d]=getword(d); % 分割出第四个字符 [word4,d]=getword(d); % 分割出第五个字符 [word5,d]=getword(d); % 分割出第六个字符 [word6,d]=getword(d); % 分割出第七个字符 48

[word7,d]=getword(d); [m,n]=size(word1); %%%%%%%%字符识别%%%%%%% clear all; M=1; %人数 N=34*M; %字母数字总和,去除‘O’‘I’ %--------------------------------------------------- for kk=0:N-1 p1=ones(16,16); %初始化一个16*16的矩阵,各个元素值为0 m=strcat(int2str(kk),'.bmp'); bw=imread(m,'bmp'); [i,j]=find(bw==0); %find函数用于返回所需要元素的所在位置 imin=min(i); imax=max(i); jmin=min(j); jmax=max(j); bw1=bw(imin:imax,jmin:jmax);%把白色部分去掉 rate=16/max(size(bw1)); bw1=imresize(bw1,rate); [i,j]=size(bw1); i1=round((16-i)/2); j1=round((16-j)/2); p1(i1+1:i1+i,j1+1:j1+j)=bw1; p1=-1.*p1+ones(16,16); for m=0:15 p(m*16+1:(m+1)*16,kk+1)=p1(1:16,m+1); end end

49

%-------------------------------------------------- for kk=0:M-1 % for ii=0:25 for ii=0:33 t(kk+ii+1)=ii; end end %仿真 clear all; p(1:256,1)=1; p1=ones(16,16); load E52net net; test=input('please input a test image:','s'); %字符归一化为16*16大小 [i,j]=find(bw==0); imin=min(i); imax=max(i); jmin=min(j); jmax=max(j); bw1=bw(imin:imax,jmin:jmax); rate=16/max(size(bw1)); bw1=imresize(bw1,rate); [i,j]=size(bw1); i1=round((16-i)/2); j1=round((16-j)/2); p1(i1+1:i1+i,j1+1:j1+j)=bw1; p1=-1.*p1+ones(16,16); for m=0:15 p(m*16+1:(m+1)*16,1)=p1(1:16,m+1); 50

subplot(2,2,2); imshow(K_Med1); title('3*3模板中值滤波'); subplot(2,2,3); imshow(K_Med2); title('5*5模板中值滤波'); subplot(2,2,4); imshow(K_Med3); title('7*7模板中值滤波'); 程序代码3.2: %读取源图像 I=imread('cameraman.tif'); %%第2题 离散余弦变换及反变换 %对图像进行离散余弦变换 J=dct2(I); %小于5的变换系数的索引值 [col row] = size(find(abs(J)< 5)); A=col*row;%置为0的变换系数的个数 %小于10的变换系数的索引值 [col row]= size(find(abs(J)< 10)); B=col*row;%置为0的变换系数的个数 %小于20的变换系数的索引值 [col row]= size(find(abs(J)< 20)); C=col*row;%置为0的变换系数的个数 %将小于5的变换系数置为0后做离散余弦反变换 J(abs(J) < 5 ) = 0;I1=idct2(J); %将小于10的变换系数置为0后做离散余弦反变换 J(abs(J) < 10) = 0;I2=idct2(J); 21

%将小于20的变换系数置为0后做离散余弦反变换 J(abs(J) < 20) = 0;I3=idct2(J); %显示原图及反变换结果 figure(2); subplot(2,2,1); imshow(I); title('原图'); subplot(2,2,2); imshow(I1,[0,255]); title('系数置0的个数小于5'); subplot(2,2,3); imshow(I2,[0,255]); title('系数置0的个数小于10'); subplot(2,2,4); imshow(I3,[0,255]); title('系数置0的个数小于20'); %计算反重构时,DCT的变换系数的置0个数小于5时的峰值信噪比及置为0的变换系数的个数 I = double(I); I1 = double(I1); [Row,Col] = size(I); [Row,Col] = size(I1); MSE1 = sum(sum((I-I1).^2))/(Row * Col); PSNR1 = 10 * log10(255^2/MSE1); fprintf('图像的峰值信噪比:MSE1=%f\\n',MSE1); fprintf('置为0的变换系数的个数为:PSNR1=%f\\n',PSNR1); %计算反重构时,DCT的变换系数的置0个数小于10时的峰值信噪比及置为0的变换系数的个数 I = double(I); 22

I2 = double(I2); [Row,Col] = size(I); [Row,Col] = size(I2); MSE2 = sum(sum((I-I2).^2))/(Row * Col); PSNR2 = 10 * log10(255^2/MSE2); fprintf('图像的峰值信噪比:MSE2=%f\\n',MSE2); fprintf('置为0的变换系数的个数为:PSNR2=%f\\n',PSNR2); %计算反重构时,DCT的变换系数的置0个数小于20时的峰值信噪比及置为0的变换系数的个数 I = double(I); I3 = double(I3); [Row,Col] = size(I); [Row,Col] = size(I3); MSE3 = sum(sum((I-I3).^2))/(Row * Col); PSNR3 = 10 * log10(255^2/MSE3); fprintf('图像的峰值信噪比:MSE3=%f\\n',MSE1); fprintf('置为0的变换系数的个数为:PSNR3=%f\\n',PSNR3); 六、实验结果 实验结果3.1: 由实验结果可以看出,对于椒盐噪声,中值滤波效果明显优于均值滤波,对于高斯噪声,上图中中值滤波比均值滤波效果略佳。随着模板从3*3增加到7*7,对于均值滤波,滤噪效果变好,但图像变模糊;对于中值滤波,图像细节丢失变多,滤除高斯噪声的效果变好。 23

图3-1 加噪前、后图像对比 图3-2 加椒盐噪声的图像均值滤波前、后的图像对比 24

图3-3 加椒盐噪声的图像中值滤波前、后的图像对比 图3-4加高斯噪声的图像均值滤波前、后的图像对比 25

图4-3 非门结果分类 权值及实验结果: net.iw = -0.9062 p =0 p =1 net.b = 0.5570 a =1 a =0 由实验结果可知,与门、或门和非门都能够找到一条直线将结果分开,所以可以利用2输入的MP模型是否可实现“与”、“或”、“非”功能。然而异或门却不能找到一条曲线将结果分开,所以无法使用MP模型来实现异或功能。 实验结果4.3: 36

图4-4 BP神经网络的网络结构 图4-5 BP神经网络的误差性能曲线

37

图4-6 神经网络的实际值与期望值对比 从实验结果可知,由于训练集比较多,所以期望值与实际值的差别不是很大。若要提高准确性,可以适当地增大训练集。

38

实验五 MATLAB的综合实验 一、实验目的及要求 培养学生利用Matlab解决专业问题的能力。 二、实验设备(环境)及要求 1. 计算机 2. Matlab软件编程实验平台 三、实验内容(三题中选择一题) 1、实现一个数字信号处理的仿真系统,通过该系统可以方便的验证信号处理所学的内容,要求程序具有界面并实现以下功能: 1)能产生或得到各种数字信号(sin、方波、三角波、语音、噪声及其叠加); 2)用滤波器实现低通、高通、带通和带阻滤波,得到输出信号的频域特性和时间序列; 3)具有DFT、DCT和DWT变换功能; 4)输入一段(1000采样点)语音信号,显示其频谱特性,在这个语音信号上叠加一个噪声,通过滤波器对其降噪,得到输出信号的频域特性和时间序列。 2、编程实现一个简单的孤立词(0—9)语音识别仿真系统。要求具有界面并实现以下功能: 1)读入语音信号; 2)预处理和端点检测; 3)多种特征提取方法; 4)孤立词识别并给出识别结果。 3、基于数字图像处理,实现一个汽车车牌字符分割的仿真系统。要求系统具有界面并实现以下功能: 1)读入车牌图像; 2)预处理及车牌定位; 3)多种图像分割功能; 4)形态学滤波等功能; 5)对车牌中的数字进行识别。 4、结合专业,实现一个神经网络应用的实例,要求具有多种方法所得结果的比较. 四、设计思想 车牌字符识别系统的关键技术包括数字图像预处理、车牌定位、车牌字符分割和

39

字符识别技术。车牌识别的基本流程图为: 原图像 预处理 区域定位 形态学处理 字符识别 字符分割 预处理过程中首先需对彩色的车牌图像进行灰度化;根据牌照字符区域的固定宽度和高度对车牌区域进行初定位,初定位结束后对定位区域进行修正;然后对车牌区域进行滤波处理;接着根据字符的宽高比对字符进行分割;最后用BP神经网络对字符进行识别。 BP神经网络的设计步骤: 第一步:隐层数。一般认为,增加隐层数可以降低网络误差(也有文献认为不一定能有效降低),提高精度,但也使网络复杂化,从而增加了网络的训练时间和出现“过拟合”的倾向。Hornik等早已证明:若输入层和输出层采用线性转换函数,隐层采用Sigmoid转换函数,则含一个隐层的MLP网络能够以任意精度逼近任何有理函数。显然,这是一个存在性结论。在设计BP网络时可参考这一点,应优先考虑3层BP网络(即有1个隐层)。所以在对集装箱号进行识别的过程中,选用三层BP网络。 第二步:相关参数的设置及网络的训练。通过设置权值和阈值的相关参数,网络 的输入、输出,对网络进行训练,最终完成网络的学习过程。设置网络的训练模式为自适应lr动量梯度下降法。权值训练步长为0.05, 最大训练次数为5000,均方误差为0.001,训练显示间隔为10。 第三步:测试网络。网络训练完成后,系统生成了字母及数字网络系统,此时某 一幅将被分割出来的车牌字符图片输入网络,观察网络的输出,最终得到车牌号。 五、程序代码(界面除外)及注释 程序代码: %%%%%%%%%读入图像%%%%%%%%%%%% function pushbutton1_Callback(hObject, eventdata, handles) % hObject handle to pushbutton1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB

40

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

Top