数字信号处理实验程序

2023-03-05

第一篇:数字信号处理实验程序

数字信号处理实验报告完整版

实验 1

利用 T DFT 分析信号频谱

一、实验目的

1.加深对 DFT 原理的理解。

2.应用 DFT 分析信号的频谱。

3.深刻理解利用 DFT 分析信号频谱的原理,分析实现过程中出现的现象及解决方法。

二、实验设备与环境

计算机、MATLAB 软件环境 三、实验基础理论

T 1.DFT 与 与 T DTFT 的关系

有限长序列 的离散时间傅里叶变换 在频率区间的 N 个等间隔分布的点 上的 N 个取样值可以由下式表示:

212 /0( )| ( ) ( ) 0 1Nj knjNk NkX e x n e X k k N      由上式可知,序列 的 N 点 DFT ,实际上就是 序列的 DTFT 在 N 个等间隔频率点 上样本 。

2.利用 T DFT 求 求 DTFT

方法 1 1:由恢复出的方法如下:

由图 2.1 所示流程可知:

101( ) ( ) ( )Nj j n kn j nNn n kX e x n e X k W eN               由上式可以得到:

IDFT DTFT

第二篇:数字信号处理实验-FFT的实现

学生姓名:

学 号:

指导教师:

一、实验室名称:数字信号处理实验室

二、实验项目名称:FFT的实现

三、实验原理:

一.FFT算法思想:

1.DFT的定义:

对于有限长离散数字信号{x[n]},0  n  N-1,其离散谱{x[k]}可以由离散付氏变换(DFT)求得。DFT的定义为:

N1X[k]通常令ej2Nx[n]en0j2Nnk,k=0,1,…N-1 WN,称为旋转因子。

2.直接计算DFT的问题及FFT的基本思想:

由DFT的定义可以看出,在x[n]为复数序列的情况下,完全直接运算N点DFT需要(N-1)2次复数乘法和N(N-1)次加法。因此,对于一些相当大的N值(如1024)来说,直接计算它的DFT所作的计算量是很大的。

FFT的基本思想在于,将原有的N点序列分成两个较短的序列,这些序列的DFT可以很简单的组合起来得到原序列的DFT。例如,若N为偶数,将原有的N

22点序列分成两个(N/2)点序列,那么计算N点DFT将只需要约[(N/2) ·2]=N/2次复数乘法。即比直接计算少作一半乘法。因子(N/2)2表示直接计算(N/2)点DFT所需要的乘法次数,而乘数2代表必须完成两个DFT。上述处理方法可以反复使用,即(N/2)点的DFT计算也可以化成两个(N/4)点的DFT(假定N/2为偶数),从而又少作一半的乘法。这样一级一级的划分下去一直到最后就划分成两点的FFT运算的情况。

3.基2按时间抽取(DIT)的FFT算法思想:

设序列长度为N2L,L为整数(如果序列长度不满足此条件,通过在后面补零让其满足)。

将长度为N2L的序列x[n](n0,1,...,N1),先按n的奇偶分成两组:

x[2r]x1[r]x[2r1]x2[r],r=0,1,…,N/2-1 DFT化为:

N1N/21N/21X[k]DFT{x[n]}N/21n0x[n]WnkN2rkr0x[2r]W2rkNr0x[2r1]WN(2r1)kN/21r0N/21x1[r]Wx1[r]W2rkNWWkNr0N/21x2[r]WN

r0rkN/2kNr0x2[r]WN/22rkrk上式中利用了旋转因子的可约性,即:WNN/21NrkN/21rkWN/2。又令

rkX1[k]r0x[1r]W,/X2[k]2r0x[r]WN2,则上式可以写成: /2X[k]X1[k]WNX2[k](k=0,1,…,N/2-1)

k可以看出,X1[k],X2[k]分别为从X[k]中取出的N/2点偶数点和奇数点序列的N/2点DFT值,所以,一个N点序列的DFT可以用两个N/2点序列的DFT组合而成。但是,从上式可以看出,这样的组合仅表示出了X[k]前N/2点的DFT值,还需要继续利用X1[k],X2[k]表示X[k]的后半段本算法推导才完整。利用旋转因子的周期性,有:WN/2WN/2X1[N2N/21rkr(kN/2),则后半段的DFT值表达式:

rkk]r0x1[r]W2N/2r(Nk)N/21r0x1[r]WN/2X1[k],同样,X2[N2k]X2[k]

(k=0,1,…,N/2-1),所以后半段(k=N/2,…,N-1)的DFT值可以用前半段k值表达式获得,中间还利用到WN(N2k)NWN2Wk得到后半段的X[k]值表达式W,

k为:X[k]X1[k]WNkX2[k](k=0,1,…,N/2-1)。

这样,通过计算两个N/2点序列x1[n],x2[n]的N/2点DFTX1[k],X2[k],可以组合得到N点序列的DFT值X[k],其组合过程如下图所示:

X1[k] X1[k]WNkX2[k]

X2[k] WNnk -1 X1[k]WNkX2[k]

比如,一个N = 8点的FFT运算按照这种方法来计算FFT可以用下面的流程图来表示:

x(0)W0x(1)W0x(2)W0x(3)W2W0W1W0x(5)W0x(6)W0x(7)W2X(7)W3X(6)W2X(5)X(3)X(2)X(1)X(0)x(4)X(4)

4.基2按频率抽取(DIF)的FFT算法思想:

设序列长度为N2L,L为整数(如果序列长度不满足此条件,通过在后面补零让其满足)。

在把X[k]按k的奇偶分组之前,把输入按n的顺序分成前后两半:

N1N/21nkNN1X[k]DFT{x[n]}N/21N/21x[n]Wn0(nn0N2)kx[n]WnkNnN/2x[n]WNnkn0N/21x[n]WnkNn0x[nNkN2]WNnk

Nn0[x[n]x[nN2NkN2]W2N]WN,k0,1,...,N1因为W2N1,则有WX[k](1),所以:

kkN/21n0[x[n](1)x[nN2]]WN,k0,1,...,N1

nk按k的奇偶来讨论,k为偶数时:

N/21X[2r]n0[x[n]x[nN2]]WN,k0,1,...,N1 N22rnN/21k为奇数时:X[2r1]前面已经推导过WNN/21n0[x[n]x[n]]WN(2r1)n,k0,1,...,N1

2rkWN/2,所以上面的两个等式可以写为:

N2]]WN/2,r0,1,...,N/21 N2rnrkX[2r]n0[x[n]x[nN/21X[2r1]n0{[x[n]x[n]]WN}WN/2,r0,1,...,N/21

nnr通过上面的推导,X[k]的偶数点值X[2r]和奇数点值X[2r1]分别可以由组合而成的N/2点的序列来求得,其中偶数点值X[2r]为输入x[n]的前半段和后半段之和序列的N/2点DFT值,奇数点值X[2r1]为输入x[n]的前半段和后半段之差再与WN相乘序列的N/2点DFT值。

令x1[n]x[n]x[nN/21nN2],x2[n][x[n]x[nN/21N2]]WN,则有:

nX[2r]n0x1[n]WrnN/2,X[2r1]n0x2[n]WrnN/2,r0,1,...,N21

这样,也可以用两个N/2点DFT来组合成一个N点DFT,组合过程如下图所示:

x[n] x[n]x[nN2]

x[nN2] -1 WNn [x[n]x[nN2]]WNn

二.在FFT计算中使用到的MATLAB命令:

函数fft(x)可以计算R点序列的R点DFT值;而fft(x,N)则计算R点序列的N点DFT,若R>N,则直接截取R点DFT的前N点,若R

四、实验目的:

离散傅氏变换(DFT)的目的是把信号由时域变换到频域,从而可以在频域分析处理信息,得到的结果再由逆DFT变换到时域。FFT是DFT的一种快速算法。在数字信号处理系统中,FFT作为一个非常重要的工具经常使用,甚至成为DSP运算能力的一个考核因素。

本实验通过直接计算DFT,利用FFT算法思想计算DFT,以及使用MATLAB函数中的FFT命令计算离散时间信号的频谱,以加深对离散信号的DFT变换及FFT算法的理解。

五、实验内容:

a) 计算实数序列x(n)cos516n,0n256的256点DFT。

b) 计算周期为1kHz的方波序列(占空比为50%,幅度取为+/-512,采样频率为25kHz,取256点长度) 256点DFT。

六、实验器材(设备、元器件):

安装MATLAB软件的PC机一台,DSP实验演示系统一套。

七、实验步骤:

(1) 先利用DFT定义式,编程直接计算2个要求序列的DFT值。

(2) 利用MATLAB中提供的FFT函数,计算2个要求序列的DFT值。 (3) (拓展要求)不改变序列的点数,仅改变DFT计算点数(如变为计算1024点DFT值),观察画出来的频谱与前面频谱的差别,并解释这种差别。通过这一步骤的分析,理解频谱分辨力的概念,解释如何提高频谱分辨力。

(4) 利用FFT的基本思想(基2-DIT或基2-DIF),自己编写FFT计算函数,并用该函数计算要求序列的DFT值。并对前面3个结果进行对比。

(5) (拓展要求)尝试对其他快速傅立叶变换算法(如Goertzel算法)进行MATLAB编程实现,并用它来计算要求的序列的DFT值。并与前面的结果进行对比。

(6) (拓展要求)在提供的DSP实验板上演示要求的2种序列的FFT算法(基2-DIT),用示波器观察实际计算出来的频谱结果,并与理论结果对比。

八、实验数据及结果分析:

程序: (1) 对要求的2种序列直接进行DFT计算的程序

(2) 对要求的2种序列进行基2-DIT和基2-DIF FFT算法程序 (3) 对要求的2种序列用MATLAB中提供的FFT函数进行计算的程序

结果:(1)对2种要求的序列直接进行DFT计算的频域波形

(2)对2种要求的序列进行基2-DIT和基2-DIF FFT算法频域波形 (3)对2种要求的序列用MATLAB中提供的FFT函数计算的频域波形。 (4)(拓展要求)分析利用上面的方法画出的信号频谱与理论计算出来的频谱之间的差异,并解释这种差异。

(5)(拓展要求)保持序列点数不变,改变DFT计算点数(变为1024点),观察频谱的变化,并分析这种变化,由此讨论如何提高频谱分辨力的问题。

九、实验结论:

十、总结及心得体会:

十一、对本实验过程及方法、手段的改进建议:

第三篇:《数字信号处理》实验三用双线性变换法设计IIR数字滤波器

实验三 用双线性变换法设计IIR数字滤波器

一、 实验目的

1、熟悉用双线性变换法设计IIR数字滤波器的原理与方法

2、掌握数字滤波器的计算机仿真方法

3、通过观察对实际心电图信号的滤波作用获得数字滤波的感性知识。

二、 实验内容及原理

1、用双线性变换法设计一个巴特沃斯低通IIR数字滤波器。设计指标参数为在通带内截止频率低于0.2时最大衰减小于1dB在阻带内0.3频率区间上最小衰减大于15dB。

2、以0.02为采样间隔打印出数字滤波器在频率区间0/2上的幅频响应特性曲线。

3、用所设计的滤波器对实际心电图信号采样序列进行仿真滤波处理并分别打印出滤波前后的心电图信号波形图观察总结滤波作用与效果。 教材例中已求出满足本实验要求的数字滤波系统函数 31kkzHzH 3211212121kzCzBzzAzHkkk 式中 A0.09036 2155.09044.03583.00106.17051.02686.1332211CBCBCB

三、实验结果 心电图信号采样序列 0510152025303540455055-100-50050nxn心电图信号采样序列xn 用双线性变换法设计IIR数字滤波器一级滤波后的心电图信号 0102030405060-100-80-60-40-2002040ny1n一级滤波后的心电图信号 二级滤波后的心电图信号 0102030405060-100-80-60-40-2002040ny2n二级滤波后的心电图信号 三级滤波后的心电图信号 0102030405060-80-60-40-2002040ny3n三级滤波后的心电图信号 用双线性变换法设计IIR数

验字滤波器滤代波器的幅频响应曲线 码 00.050.10.150.20.250.30.350.40.450.5-50-40-30-20-10010w/pi20lgHjw滤波器的幅频响应曲线

四、实x-4-20-4-6-4-2-4-6-6-4-4-6-6-261280-16-38-60-84-90-66-32-4-2-48121210666400000-2-4000-2-200-2-2-2-20 n0:55 subplot111 stemnx. axis0 55 -100 50 xlabeln ylabelxn title心电图信号采样序列xn N56 A0.09036 20.09036 0.09036 B1 -1.2686 0.7051 B11 -1.0106 0.3583 B21 -0.9044 0.2155 y1filterABx n0:55 figure subplot111 stemny1. xlabeln ylabely1n title一级滤波后的心电图信号 y2filterAB1y1 n0:55 figure 用双线性变换法设计IIR数字滤波器subplot111 stemny2. xlabeln ylabely2n title二级滤波后的心电图信号 y3filterAB2y2 n0:55figure subplot111 stemny3. xlabeln ylabely3n title三级滤波后的心电图信号 A0.09036 20.09036 0.09036 B11 -1.2686 0.7051 B21 -1.0106 0.3583 B31 -0.9044 0.2155 H1wfreqzAB1100 H2wfreqzAB2100 H3wfreqzAB3100 H4H1.H2 HH4.H3 magabsH db20log10mageps/maxmag figure subplot111 plotw/pidb axis0 0.5 -50 10 xlabelw/pi ylabel20lgHjw title滤波器的幅频响应曲线

五、实验总结 双线性变换法的特点 对频率的压缩符合下列公式 11112zzTs sTsTz22 用双线性变换法设计IIR数字滤波器这样的变换叫做双线性变换。用双线性变换法来设计数字滤波器由于从s面映射到s1面具有非线性频率压缩的特点因此不可能产生频率混叠现象而且转换成的Hz是因果稳定的这是双线性变换法的最大优点。其缺点是w与之间的非线性关系直接影响数字滤波器频香逼真的模仿模拟滤波器的频响。 数字滤波器的输入和输出均为数字信号通过一定的运算关系改变输入信号所含频率成分的相对比例或者滤除某些频率成分。数字滤波器可以通过模拟其网络传输函数进行实现。如图中所示滤波器对其高于截止频率的频段产生很高的衰减所得信号较之原信号剔除了高频的成分。

第四篇:数字图像处理图像变换实验报告

数字图象处理实验指导书

实验一 图象变换实验

实 验

实验名称:图像处理姓名:刘强

班级:电信

学号:

报 告

1102

1404110128

数字图象处理实验指导书

实验一 图象变换实验

实验一 图像变换实验——图像点运算、几何变换及正交变换

一、 实验条件

PC机 数字图像处理实验教学软件

大量样图

二、 实验目的

1、 学习使用“数字图像处理实验教学软件系统”,能够进行图像处理方面的简单操作;

2、 熟悉图像点运算、几何变换及正交变换的基本原理,了解编程实现的具体步骤;

3、 观察图像的灰度直方图,明确直方图的作用和意义;

4、 观察图像点运算和几何变换的结果,比较不同参数条件下的变换效果;

5、 观察图像正交变换的结果,明确图像的空间频率分布情况。

三、 实验原理

1、 图像灰度直方图、点运算和几何变换的基本原理及编程实现步骤

图像灰度直方图是数字图像处理中一个最简单、最有用的工具,它描述了一幅图像的灰度分布情况,为图像的相关处理操作提供了基本信息。

图像点运算是一种简单而重要的处理技术,它能让用户改变图像数据占据的灰度范围。点运算可以看作是“从象素到象素”的复制操作,而这种复制操作是通过灰度变换函数实现的。如果输入图像为A(x,y),输出图像为B(x,y),则点运算可以表示为:

B(x,y)=f[A(x,y)] 其中f(x)被称为灰度变换(Gray Scale Transformation,GST)函数,它描述了输入灰度值和输出灰度值之间的转换关系。一旦灰度变换函数确定,该点运算就完全确定下来了。另外,点运算处理将改变图像的灰度直方图分布。点运算又被称为对比度增强、对比度拉伸或灰度变换。点运算一般包括灰度的线性变换、阈值变换、窗口变换、灰度拉伸和均衡等。

图像几何变换是图像的一种基本变换,通常包括图像镜像变换、图像转置、图像平移、图像缩放和图像旋转等,其理论基础主要是一些矩阵运算,详细原理可以参考有关书籍。

实验系统提供了图像灰度直方图、点运算和几何变换相关内容的文字说明,用户在操作过程中可以参考。下面以图像点运算中的阈值变换为例给出编程实现的程序流程图,如下:

数字图象处理实验指导书

实验一 图象变换实验

2、 图像正交变换的基本原理及编程实现步骤 数字图像的处理方法主要有空域法和频域法,点运算和几何变换属于空域法。频域法是将图像变换到频域后再进行处理,一般采用的变换方式是线性的正交变换(酉变换),主要包括傅立叶变换、离散余弦变换、沃尔什变换、霍特林变换和小波变换等。正交变换被广泛应用于图像特征提取、图像增强、图像复原、图像压缩和图像识别等领域。

正交变换实验的重点是快速傅立叶变换(FFT),其原理过于复杂,可以参考有关书籍,这里不再赘述。至于FFT的编程实现,系统采用的方法是:首先编制一个一维FFT程序模块,然后调用该模块对图像数据的列进行一维FFT,再对行进行一维FFT,最后计算并显示幅度谱。程序流程图如下:

四、 实验内容

图像灰度直方图

点运算:图像反色、灰度线性变换、阈值变换、窗口变换、灰度拉伸和灰度

数字图象处理实验指导书

实验一 图象变换实验

均衡

几何变换:图像镜像变换、图像转置、图像平移、图像缩放和图像旋转 正交变换:傅立叶变换、离散余弦变换、沃尔什变换、霍特林变换和小波正反变换

注意:

1、 所有实验项目均针对8位BMP灰度图像进行处理,其它格式(如JPG)的图像可以利用系统提供的图像格式转换工具进行转换,再进行处理;

2、 本次实验的重点是图像的灰度直方图和点运算,几何变换和正交变换只作一般性了解。

五、 实验步骤

以图像灰度阈值变换为例说明实验的具体步骤,其它实验项目的步骤与此类似。

1、 打开计算机,在系统桌面上双击“数字图像处理实验教学软件系统”的可执行文件“图象处理”的图标,进入实验系统;

2、 执行文件→打开,在OPEN对话框中选择待处理的图像,按【OK】后系统显示出图像;

3、 执行查看→图像基本信息,将显示图像基本信息对话框,如图所示;

数字图象处理实验指导书

实验一 图象变换实验

4、 执行查看→灰度直方图,查看图像的灰度直方图,如图所示;

5、 执行图像变换→正交变换→傅立叶变换,查看图像的频率域分布情况,如图所示;

数字图象处理实验指导书

实验一 图象变换实验

6、 执行图像变换→正交变换→小波变换,查看图像经过小波变换的效果,如图所示;

7、 执行图像变换→点运算→阈值变换,修改阈值变换对话框中的阈值参数,如图所示;

数字图象处理实验指导书

实验一 图象变换实验

8、 设置完阈值参数后按【OK】,系统显示阈值变换后的图像,与原图像进行比较,观察阈值变换的效果,如图所示;

9、 重复步骤4,查看阈值变换后图像的直方图分布情况;

数字图象处理实验指导书

实验一 图象变换实验

10、 重复步骤5,查看阈值变换后图像的频率域分布情况;

11、执行文件→保存或另存为,保存处理后的图像;

12、执行文件→重新加载,重新加载原始图像,但要注意先前对图像的处理将会丢失; 注意:

13、在执行步骤2时可能会出现有些图像文件不能打开的情况,如图所示,此时可以先利用图像格式转换工具将图像文件转换为8位BMP图像,再利用系统进行处理。步骤14和15是使用图像格式转换工具的方法;

14、在桌面上双击图像格式转换工具Jpg2bmp的图标,进入转换工具界面,如图所示;

15、按照界面提示,把JPG格式的图像文件转换成8位BMP图像。

数字图象处理实验指导书

实验一 图象变换实验

步骤13示意图

步骤14示意图

六、 思考题

1、 图像灰度线性变换、阈值变换、窗口变换、灰度拉伸和灰度均衡之间有何区别?

灰度线性变换就是将图像的像素值通过指定的线性函数进行变换,以此增强或者减弱图像的灰度。

灰度的阈值变换可以让一幅图像变成黑白二值图。

灰度的窗口变换也是一种常见的点运算。它的操作和阈值变换类似。从实现方法上可以看作是灰度折线变换的特列。窗口灰度变换处理结合了双固定阈值法,与其不同之处在于窗口内的灰度值保持不变。

灰度拉伸又叫做对比度拉伸,它与线性变换有些类似,不同之处在于灰度拉伸使用的是分段线性变换,所以它最大的优势是变换函数可以由用户任意合成。

灰度均衡是增强图像的有效方法之一。灰度均衡同样属于改进图像的方法,灰度均衡的图像具有较大的信息量。从变换后图像的直方图来看,灰度分布更加均匀。

2、 利用图像镜像和旋转变换可以实现图像转置吗?如果可以,应该怎样实现?

可以。进行一次镜像变换,顺(逆)时针旋转两次,再以与第一次相反的方向镜像变换。

数字图象处理实验指导书

实验一 图象变换实验

实验二 图像增强及复原实验

七、 实验条件

PC机 数字图像处理实验教学软件

大量样图

八、 实验目的

1、 熟练使用“数字图像处理实验教学软件系统”;

2、 熟悉图像增强及复原的基本原理,了解编程实现的具体步骤;

3、 观察图像中值滤波、平滑、锐化和伪彩色编码的结果,比较不同参数条件下的图像增强效果;

4、 观察图像退化和复原的结果,比较不同复原方法的复原效果。

九、 实验原理

1、 图像增强和复原的基本原理

对降质图像的改善处理通常有两类方法:图像增强和图像复原。

图像增强不考虑图像降质的原因,只将图像中感兴趣的特征有选择地进行突出,并衰减图像的次要信息,改善后的图像不一定逼近原始图像,只是增强了图像某些方面的可读性,如突出了目标轮廓,衰减了各种噪声等。图像增强可以用空域法和频域法分别实现,空域法主要是在空间域中对图像象素灰度值直接进行运算处理,一般包括中值滤波、模板平滑和梯度锐化等,空域法可以用下式来描述:

g(x,y)=f(x,y)*h(x,y) 其中f(x,y)是处理前图像,g(x,y)表示处理后图像,h(x,y)为空间运算函数。图像增强的频域法是在图像的频率域中对图像的变换值进行某种运算处理,然后变换回空间域,系统涉及的各种滤波器属于频域法增强,这是一种间接处理方法,可以用下面的过程模型来描述:

其中:F(u,v)=[ f(x,y)],G(u,v)= F(u,v)H(u,v),g(x,y)=1[ G(u,v)],和1分别表示频域正变换和反变换。实验系统提供了图像增强相关内容的文字说明,用户在操作过程中可以参考。

图像复原是针对图像降质的原因,设法去补偿降质因素,使改善后的图像尽可能逼近原始图像,提高了图像质量的逼真度。关于图像复原的详细原理可以参考相关书籍,这里不再赘述。本系统提供了图像的噪声退化、卷积退化和运动模糊退化操作,并提供了相应的逆滤波复原、维纳复原和运动模糊复原操作。本次

数字图象处理实验指导书

实验一 图象变换实验

实验中图像复原只作一般性了解。

2、 编程实现步骤

下面以图像增强中的中值滤波操作为例给出编程实现的程序流程图,如下:

十、 实验内容

图像增强:中值滤波、图像模板平滑、理想低通滤波器平滑、巴特沃斯低通滤波器平滑、梯度锐化、拉普拉斯锐化、理想高通滤波器锐化、巴特沃斯高通滤波器锐化和伪彩色编码

图像复原:图像的噪声退化、卷积退化、卷积加噪声退化、运动模糊退化、逆滤波复原、维纳复原和运动模糊复原

注意:

3、 所有实验项目均针对8位BMP灰度图像进行处理;

4、 本次实验的重点是图像增强中的中值滤波和模板平滑,图像复原只作一般性了解。

十一、 实验步骤

以图像中值滤波操作为例说明实验的具体步骤,其它实验项目的步骤与此类似。

11、 打开计算机,在系统桌面上双击“数字图像处理实验教学软件系统”的可执行文件“图象处理”的图标,进入实验系统;

12、 执行文件→打开,在OPEN对话框中选择待处理的图像,按【OK】后系统显示出图像;

数字图象处理实验指导书

实验一 图象变换实验

13、 执行查看→图像基本信息,将显示图像基本信息对话框,如图所示;

14、 执行查看→灰度直方图,查看图像的灰度直方图,如图所示;

数字图象处理实验指导书

实验一 图象变换实验

15、 执行图像变换→正交变换→傅立叶变换,查看图像的频率域分布情况,如图所示;

16、 执行图像增强→中值滤波,选择或自定义对话框中的滤波器参数,如图所示;

数字图象处理实验指导书

实验一 图象变换实验

17、 设置完滤波器参数后按【OK】,系统显示中值滤波后的图像,与原图像进行比较,观察中值滤波的效果,如图所示;

18、

重复步骤4,查看中值滤波后图像的直方图分布情况;

数字图象处理实验指导书

实验一 图象变换实验

19、 重复步骤5,查看中值滤波后图像的频率域分布情况;

10、执行文件→保存或另存为,保存处理后的图像;

11、执行文件→重新加载,重新加载原始图像,但要注意先前对图像的处理将会丢失。

数字图象处理实验指导书

实验一 图象变换实验

十二、

思考题

1、 图像中值滤波和模板平滑之间有何区别?

图像平滑处理就是用平滑模板对图像进行处理,以减少图像的噪声。而中值滤波是一种非线性的信号处理方法。

2、 图像增强和图像复原之间有何区别?

图像增强:利用一定的技术手段,不用考虑图像是否失真(即原 始图像在变换后可能会失真)而且不用分析图像降质的原因。针对给定图像的应用场合,有目的地强调图像的整体或局部特性,将原来不清晰的图像变得清晰或强调某些感兴趣的特征,扩大图像中不同物体特征之间的差别,抑制不感兴趣的特征,使之改善图像质量、丰富信息量,加强图像判读和识别效果,满足某些特殊分析的需要。

图像复原:针对质量降低或者失真的图像,恢复图像原始的内容或者质量。图像复原的过程包含对图像退化模型的分析,再对退化的图像进行复原。图像退化是由于成像系统受各种因素的影响,导致了图像质量的降低,称之为图像退化。这些因素包括传感器噪声、摄像机聚焦不佳、物体与摄像机之间的相对移动、随机大气湍流、光学系统的象差、成像光源和射线的散射等。 图像复原大致可以分为两种方法:

一种方法适用于缺乏图像先验知识的情况,此时可对退化过程建立模型进行描述,进而寻找一种去除或消弱其影响的过程,是一种估计方法;

另一种方法是针对原始图像有足够的先验知识的情况,对原始图像建立一个数学模型并根据它对退化图像进行拟合,能够获得更好的复原效果。

3、 图像维纳复原为什么比逆滤波复原效果好?

维纳滤波复原的原理可表示为

对于维纳滤波,由上式可知,当

时,由于存在 项,所以数字图象处理实验指导书

实验一 图象变换实验

不会出现被0除的情形,同时分子中含有项,在处,。当时,,此时维纳滤波就变成 了逆滤波;当时,,表明维纳滤波避免了逆滤波中 出现的对噪声过多的放大作用,也就是说图像维纳复原比逆滤波复原效果好。

第五篇:简易photoshop代码数字图像处理实验报告

一.一个简单的“photoshop”软件 二.设计目的:

数字图像处理,就是用数字计算机及其他有关数字技术,对图像进行处理,以达到预期的目的。随着计算机的发展,图像处理技术在许多领域得到了广泛应用,数字图像处理已成为电子信息、通信、计算机、自动化、信号处理等专业的重要课程。

数字图像处理课程设计是在完成数字图像处理的相关理论的学习后,进行的综合性训练课程,其目的主要包括:

1、使学生进一步巩固数字图像处理的基本概念、理论、分析方法和实现方法;

2、增强学生应用VC++编写数字图像处理的应用程序及分析、解决实际问题的能力;

3、尝试将所学的内容解决实际工程问题,培养学生的工程实践能力,提高工科学生的就业能力。

三.设计内容: 1.打开图像: 主要代码:

static char szFilter[]="BMP文件(*.bmp)|*.bmp||"; //定义过滤文件的类型

CString filename;

int ret=dlg.DoModal(); //运行打开文件对方框

if(ret==IDOK)

{

filename=dlg.GetFileName();

//获取所选择图像的路径

m_dib.LoadFromFile(filename);

//加载图像

if(!m_dib.m_bLoaded)

//判断是否加载图像成功

{ AfxMessageBox("图像打不开");

} return;

CFileDialog dlg(TRUE,"bmp",NULL, OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,szFilter);//定义文件对话框对

效果图:

2.水平镜像:把图像的第一列和最后一列调转,第二列和倒数第二列换过来,以此类推下去,直到第nw/2为止。 代码: int temp,i,j;

for(j=0;j

for(i=0;i

{

temp=m_dib.m_pdata[j*nw+i];

m_dib.m_pdata[j*nw+i]=m_dib.m_pdata[nw-i-1+j*nw];

m_dib.m_pdata[nw-i-1+j*nw]=temp;

} 效果图:

3.素描风格:先把灰度值与右下的作对比,如果差值大于一个值则说明这是轮廓,先把非轮廓的位置像素置为黑色,最后对所有像素进行底片化处理 代码: int temp,i,j;

for(j=0;j

for(i=0;i

{

temp=m_dib.m_pdata[j*nw+i]-m_dib.m_pdata[(j+1)*nw+i+1];

} if(temp<10) m_dib.m_pdata[j*nw+i]=0;

//黑色为0

for(j=0;j

for(i=0;i

{

int gray=m_dib.m_pdata[j*nw+i];

m_dib.m_pdata[j*nw+i]=255-gray;

}

图:

4图像雾化:在图像中引入一定的随机值,打乱图像中的像素值

代码:

int i,j,k,dat;

//i表示列,j表行

byte *ptemp=(byte *)new byte[nw*nh];

memset(ptemp,0,nw*nh);

for(j=0;j

for(i=0;i

{

k=rand()%8;//取任意的随机值

dat=j*nw+i+k; if(dat>=nw*nh) dat=nw*nh-1; ptemp[j*nw+i]=m_dib.m_pdata[dat];

} memcpy(m_dib.m_pdata,ptemp,nw*nh); 效果图:

5.浮雕处理:通过勾画图象轮廓和降低周围像素色值,从而生成具有凹凸感的浮雕效果。其方法是生成一缓冲区,计算当前像素的左上角与右下角的像素值之差,再加上一个补值。将其存储到缓冲区。再将缓冲区的数据逐点替换到图像中并显示出来。 代码:

int w=3,i,j;

//w为模板宽度

BYTE *p=new BYTE[nw*nh];

memcpy(p,m_dib.m_pdata,nw*nh);

for(j=w/2;j

for(i= w/2;i

{

p[j*nw+i]=m_dib.m_pdata[(j-1)*nw+i-1]*(1)+m_dib.m_pdata[(j+1)*nw+i+1]*(-1)+120;

}

memcpy(m_dib.m_pdata,p,nw*nh);

delete []p; 效果图:

6.直方图均衡化 代码:

int n[256]={0},g[256]={0}; //定义频数数组n,均衡化每个像素的灰度级的数组g

double f[256],t[256]; //定义频率数组f,累加的频率数组t

int g_max=0,g_mim=255;

int i,j,k,z;

for(j=0;j

//统计灰度级的频数n for(i=0;i

z=m_dib.m_pdata[j*nw+i];

n[z]++;

}

for(k=0;k<=255;k++)

//统计每个灰度级出现的频率

f[k]=n[k]/(nw*nh*1.0);

//累计灰度级的频率

t[0]=f[0]; for(k=1;k<=255;k++)

t[k]=t[k-1]+f[k];

for(j=0;j

for(i=0;i

g_max=w>g_max?w:g_max; //得到最大值

g_mim=w

}

for(k=0;k<=255;k++)

//利用公式求每个像素均衡化后的灰度级

g[k]=(int)((g_max-g_mim)*t[k]+g_mim+0.5);

for(j=0;j

//逐个替换

for(i=0;i

k=m_dib.m_pdata[j*nw+i];

m_dib.m_pdata[j*nw+i]=g[k];

}

for(j=0;j

//计算均衡化的直方图

{

//绘制原图像的直方图

for(i=0;i

{

BYTE temp=m_dib.m_pdata[j*nw+i];

m_hist[temp]++; } m_bHist=true;

CString str; int nh=m_dib.GetDIBHeight(); int i; // 画坐标轴

// 绘制坐标轴

pDC->MoveTo(410,nh+20); //(410,nh+20 )是直方图的左上角坐标

// 垂直轴

pDC->LineTo(410,nh+200);//(410,nh+200 )是直方图的左下角坐标

// 水平轴

pDC->LineTo(710,nh+200);//(710,nh+200 )是直方图的右下角坐标

// 写X轴刻度值

str.Format("0"); pDC->TextOut(410, nh+200+10, str); str.Format("50"); pDC->TextOut(460, nh+200+10, str); str.Format("100"); pDC->TextOut(510, nh+200+10, str); str.Format("150"); pDC->TextOut(560, nh+200+10, str); str.Format("200"); pDC->TextOut(610, nh+200+10, str); str.Format("255"); pDC->TextOut(665, nh+200+10, str); // 绘制X轴刻度 for ( i = 0; i < 256; i += 25) {

if ((i & 1) == 0) {

} // 10的倍数

pDC->MoveTo(i + 10, nh+200-2); pDC->LineTo(i + 10, nh+200+2);

}

else {

} // 10的倍数

pDC->MoveTo(i + 10, nh+200-2); pDC->LineTo(i + 10, nh+200+2); } // 绘制X轴箭头

pDC->MoveTo(705,nh+200-5); pDC->LineTo(710,nh+200); pDC->LineTo(705,nh+200+5); // 绘制y轴箭头

pDC->MoveTo(410,nh+20); pDC->LineTo(405,nh+20+5); pDC->MoveTo(410,nh+20); pDC->LineTo(415,nh+20+5); int max=0; for(i=0;i<256;i++) if(m_yuan[i]>max) {

} max=m_yuan[i];

for(i=0;i<256;i++) pDC->MoveTo(410+i,nh+200); pDC->LineTo(410+i,nh+200-(m_yuan[i]*160/max)); } if(m_bHist==true) //绘画新的直方图 {

CString str; int nh=m_dib.GetDIBHeight(); int i; // 画坐标轴 // 绘制坐标轴

pDC->MoveTo(10,nh+20); //(10,nh+20 )是直方图的左上角坐标

// 垂直轴

pDC->LineTo(10,nh+200);//(10,nh+200 )是直方图的左下角坐标

// 水平轴

pDC->LineTo(310,nh+200);//(310,nh+200 )是直方图的右下角坐标

// 写X轴刻度值 str.Format("0");

pDC->TextOut(10, nh+200+10, str); str.Format("50"); pDC->TextOut(60, nh+200+10, str); str.Format("100"); pDC->TextOut(110, nh+200+10, str); str.Format("150"); pDC->TextOut(160, nh+200+10, str); str.Format("200"); pDC->TextOut(210, nh+200+10, str); str.Format("255"); pDC->TextOut(265, nh+200+10, str); // 绘制X轴刻度 for ( i = 0; i < 256; i += 25) {

if ((i & 1) == 0) { // 10的倍数

} else {

// 10的倍数

pDC->MoveTo(i + 10, nh+200-2); pDC->LineTo(i + 10, nh+200+2); pDC->MoveTo(i + 10, nh+200-2); pDC->LineTo(i + 10, nh+200+2); } } // 绘制X轴箭头

pDC->MoveTo(305,nh+200-5); pDC->LineTo(310,nh+200); pDC->LineTo(305,nh+200+5); // 绘制y轴箭头 pDC->MoveTo(10,nh+20); pDC->LineTo(5,nh+20+5); pDC->MoveTo(10,nh+20); pDC->LineTo(15,nh+20+5); int max=0; for(i=0;i<256;i++) if(m_hist[i]>max) { max=m_hist[i];

for(i=0;i<256;i++) pDC->MoveTo(10+i,nh+200); pDC->LineTo(10+i,nh+200-(m_hist[i]*160/max));

} } 效果图:

四.心得体会:

通过这次数字图像处理的课程设计,对图片有了更深一层的认识,理解了对图像处理的一些原理,在这个课程设计过程中,需要自己去查阅资料,找资料,还需要理解所找到的资料,遇到问题独立去思考,或者去请教同学,给了我一个很好的锻炼机会,做事情一定要坚持,最后一定会有收获的。

五.参考文献:

《数字图像处理》 ——电子工业出版社

《vc++数字图像处理实验指导书》 曹老师、何家峰主编

上一篇:深圳装修装饰工程合同下一篇:树正气守规矩心得体会