图像频率域高通滤波器程序设计.docx
《图像频率域高通滤波器程序设计.docx》由会员分享,可在线阅读,更多相关《图像频率域高通滤波器程序设计.docx(17页珍藏版)》请在冰豆网上搜索。
![图像频率域高通滤波器程序设计.docx](https://file1.bdocx.com/fileroot1/2023-2/21/7e5bff61-ae75-4983-8f29-beed6b0851c0/7e5bff61-ae75-4983-8f29-beed6b0851c01.gif)
图像频率域高通滤波器程序设计
1MATLAB简介
MATLAB是由美国mathworks公司发布的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。
它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,并在很大程度上摆脱了传统非交互式程序设计语言(如C、Fortran)的编辑模式,代表了当今国际科学计算软件的先进水平。
MATLAB和Mathematica、Maple并称为三大数学软件。
它在数学类科技应用软件中在数值计算方面首屈一指。
MATLAB可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连
接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。
MATLAB的基本数据单位是矩阵,它的指令表达式与数学、工程中常用的形式十分相似,故用MATLAB来解算问题要比用C,FORTRAN等语言完成相同的事情简捷得多,并且MATLAB也吸收了像Maple等软件的优点,使MATLAB成为一个强大的数学软件。
在新的版本中也加入了对C,FORTRAN,C++,JAVA的支持。
可以直接调用,用户也可以将自己编写的实用程序导入到MATLAB函数库中方便自己以后调用,此外许多的MATLAB爱好者都编写了一些经典的程序,用户可以直接进行下载就可以用。
MATLAB具有强大的功能,其大致有以下特点。
友好的工作平台编程环境:
MATLAB由一系列工具组成。
这些工具方便用户使用MATLAB的函数和文件,其中许多工具采用的是图形用户界面。
包括MATLAB桌面和命令窗口、历史命令窗口、编辑器和调试器、路径搜索和用于用户浏览帮助、工作空间、文件的浏览器。
随着MATLAB的商业化以及软件本身的不断升级,MATLAB的用户界面也越来越精致,更加接近Windows的标准界面,人机交互性更强,操作更简单。
而且新版本的MATLAB提供了完整的联机查询、帮助系统,极大的方便了用户的使用。
简单的编程环境提供了比较完备的调试系统,程序不必经过编译就可以直接运行,而且能够及时地报告出现的错误及进行出错原因分析。
简单易用的程序语言:
MATLAB是一个高级的矩阵/阵列语言,它包含控制语句、函数、数据结构、输入和输出和面向对象编程特点。
用户可以在命令窗口中将输入语句与执行命令同步,也可以先编写好一个较大的复杂的应用程序(M文件)后再一起运行。
新版本的MATLAB语言是基于最为流行的C++语言基础上的,因此语法特征与C++语言极为相似,而且更加简单,更加符合科技人员对数学表达式的书写格式。
使之更利于非计算机专业的科技人员使用。
而且这种语言可移植性好、可拓展性极强,这也是MATLAB能够深入到科学研究及工程计算各个领域的重要原因。
强大的科学计算机数据处理能力:
MATLAB是一个包含大量计算算法的集合。
其拥有600多个工程中要用到的数学运算函数,可以方便的实现用户所需的各种计算功能。
函数中所使用的算法都是科研和工程计算中的最新研究成果,而前经过了各种优化和容错处理。
在通常情况下,可以用它来代替底层编程语言,如C和C++。
在计算要求相同的情况下,使用MATLAB的编程工作量会大大减少。
MATLAB的这些函数集包括从最简单最基本的函数到诸如矩阵,特征向量、快速傅立叶变换的复杂函数。
函数所能解决的问题其大致包括矩阵运算和线性方程组的求解、微分方程及偏微分方程的组的求解、符号运算、傅立叶变换和数据的统计分析、工程中的优化问题、稀疏矩阵运算、复数的各种运算、三角函数和其他初等数学运算、多维数组操作以及建模动态仿真等。
出色的图形处理功能:
MATLAB自产生之日起就具有方便的数据可视化功能,以将向量和矩阵用图形表现出来,并且可以对图形进行标注和打印。
高层次的作图包括二维和三维的可视化、图象处理、动画和表达式作图。
可用于科学计算和工程绘图。
新版本的MATLAB对整个图形处理功能作了很大的改进和完善,使它不仅在一般数据可视化软件都具有的功能(例如二维曲线和三维曲面的绘制和处理等)方面更加完善,而且对于一些其他软件所没有的功能(例如图形的光照处理、色度处理以及四维数据的表现等),MATLAB同样表现了出色的处理能力。
同时对一些特殊的可视化要求,例如图形对话等,MATLAB也有相应的功能函数,保证了用户不同层次的要求。
另外新版本的MATLAB还着重在图形用户界面(GUI)的制作上作了很大的改善,对这方面有特殊要求的用户也可以得到满足。
应用广泛的模块集合工具箱
MATLAB对许多专门的领域都开发了功能强大的模块集和工具箱。
一般来说,它们都是由特定领域的专家开发的,用户可以直接使用工具箱学习、应用和评估不同的方法而不需要自己编写代码。
目前,MATLAB已经把工具箱延伸到了科学研究和工程应用的诸多领域,诸如数据采集、数据库接口、概率统计、样条拟合、优化算法、偏微分方程求解、神经网络、小波分析、信号处理、图像处理、系统辨识、控制系统设计、LMI控制、鲁棒控制、模型预测、模糊逻辑、金融分析、地图工具、非线性控制设计、实时快速原型及半物理仿真、嵌入式系统开发、定点仿真、DSP与通讯、电力系统仿真等,都在工具箱(Toolbox)家族中有了自己的一席之地。
实用的程序接口和发布平台:
新版本的MATLAB可以利用MATLAB编译器和C/C++数学库和图形库,将自己的MATLAB程序自动转换为独立于MATLAB运行的C和C++代码。
允许用户编写可以和MATLAB进行交互的C或C++语言程序。
另外,MATLAB网页服务程序还容许在Web应用中使用自己的MATLAB数学和图形程序。
MATLAB的一个重要特色就是具有一套程序扩展系统和一组称之为工具箱的特殊应用子程序。
工具箱是MATLAB函数的子程序库,每一个工具箱都是为某一类学科专业和应用而定制的,主要包括信号处理、控制系统、神经网络、模糊逻辑、小波分析和系统仿真等方面的应用。
应用软件开发(包括用户界面):
在开发环境中,使用户更方便地控制多个文件和图形窗口;在编程方面支持了函数嵌套,有条件中断等;在图形化方面,有了更强大的图形标注和处理功能,包括对性对起连接注释等;在输入输出方面,可以直接向Excel和HDF5进行连接。
图1.1MATLAB操作界面
2方案分析与确定
2.1方案分析
图像的边缘与细节主要位于高频部分,而图像的模糊是由于高频成分比较弱产生的。
频率域锐化就是为了消除模糊,突出边缘。
因此采用高通滤波器让高频成分通过,是低频成分消弱,再经傅立叶变换得到边缘锐化的图像。
为了得到锐化图,常用的高通滤波器有理想高通滤波器,巴特沃斯高通滤波器,指数高通滤波器,梯形高通滤波器。
本次课设要求用到指数高通滤波器和梯形高通滤波器。
为了达到课设要求,只需根据二阶指数高通滤波器和梯形高通滤波器的表达式设计传递函数对该频谱图像进行高通滤波,对滤波后的频谱图像作逆Fourier变换得到滤波结果,显示结果图。
设计好对应的程序后,在MATLAB上调试运行便可便可完成设计要求。
此次课设用到的两种高通滤波器有指数高通滤波器和梯形高通滤波器。
指数高通滤波器的传递函数如下:
梯形高通滤波器的传递函数如下:
本次课设除了完成以上两种高通滤波器的图像处理外,另外还做了理想高通滤波器和巴特沃斯高通滤波器的图像处理,传递函数上形式相似,这里不再赘述,后面会给出其运行结果。
2.2设计流程图
根据以上的分析,可以得到下面的程序流程图:
图2.1设计流程图
3程序设计
3.1图片频谱图
此次课设要求使用的是256级灰度图像,为此在选择图像时,需确定其图像类型,在选择时应有对应的判别语句。
判断图片类型的语句如下:
info=imfinfo('lena高通滤波实验原图.tif')
得到合适的灰度图片后,在编写对应的程序,得到中心频谱图,对应语句如下:
I=imread('lena高通滤波实验原图.tif');
Imshow(I)
J=fftshift(fft2(I));
figure
(2);
Imshow(log(abs(J)),[8,10])
title('原图频谱图');
3.2滤波器程序
得到了灰度图片后,只要设计好对应的高通滤波器程序,在MATLAB上调试运行后便可得到对应的图像。
根据上面的指数高通滤波器和梯形高通滤波器的数学表达式,设计出对应的传递函数程序,程序编写如下。
二阶指数高通滤波器程序如下:
1=imread('lena高通滤波实验原图.tif');
figure
(1);imshow(I1);title('原图');%显示原图
f=double(I1);%转换数据为双精度型
g=fft2(f);%进行二维傅里叶变换
g=fftshift(g);%把快速傅里叶变换的DC组件移到光谱中心
[M,N]=size(g);
nn=2;%将滤波器阶数设为二阶
d0=50;%15,50,80其中以50为例
m=fix(M/2);n=fix(N/2);
fori=1:
M
forj=1:
N
d=sqrt((i-m)^2+(j-n)^2);
h=exp(-(d/d0)^(1*nn));
result(i,j)=(1-h)*g(i,j);
end
end
result=ifftshift(result);
J1=ifft2(result);
J2=uint8(real(J1));
figure
(2);
imshow(J2);
title('二阶EHPF滤波(d0=30)');%显示图像处理结果
梯形高通滤波器程序如下:
t1=imread('lena高通滤波实验原图.tif');%梯形高通滤波器程序
f=double(t1);%转换数据为双精度型
g=fft2(f);%进行二维傅里叶变换
g=fftshift(g);%把快速傅里叶变换的DC组件移到光谱中心
[M,N]=size(g);
D1=40;
D2=60;
m=fix(M/2);
n=fix(N/2);
fori=1:
M
forj=1:
N
D=sqrt((i-m)^2+(j-n)^2);%梯形滤波器传递函数
ifDh1=0;
elseifD>=D1&&D<=D2
h1=(D-D1)./(D2-D1);
else
h1=1;
result1(i,j)=h1*g(i,j);
end
end
end
end
result1=ifftshift(result1);
t2=ifft2(result1);
t3=uint8(real(t2));
figure(3);
imshow(t3);
title('THPF滤波')%显示梯形滤波器处理结果
此次课设的拓展中,包括了理想高通滤波器的设计和巴特沃斯高通滤波器的设计,程序的编写与上面的编写与上面的两种滤波器程序大体相同,限于篇幅,这里不再给出,后面会给出处理结果,与指数高通滤波器和梯形高通滤波器构成对比。
4课设结果及分析
4.1中心频谱图
输入图片判断语句后,MATLAB上显示了如下结果:
info=
Filename:
'lena高通滤波实验原图.tif'
FileModDate:
'25-六月-201221:
15:
23'
FileSize:
65240
Format:
'tif'
FormatVersion:
[]
Width:
256
Height:
256
BitDepth:
8
ColorType:
'grayscale'
FormatSignature:
[7777042]
ByteOrder:
'big-endian'
BitsPerSample:
8
由上面的结果可以看出,图片类型为灰度类型,8位256级图片,符合课设要求。
得到图片后,在MATLAB上得到了图片的中心频谱图,结果如下:
图4.1原图图4.2中心频谱图
4.2滤波器运行结果
二阶指数滤波器运行结果:
图4.3指数滤波器运行结果
实验结果分析:
指数高通滤波器具有较为平滑的传递函数,得到的滤波图像没有很明显的振铃现象,随着D0的增大,真灵想想越来越弱,当D0=80时,振铃现象几乎得以消失,滤波效果较好。
梯形滤波器运行结果如下:
图4.3梯形滤波器运行结果
实验结果分析:
梯形高通滤波器会产生微振铃效果,计算简单。
梯形高通滤波器的性能介于理想高通滤波器和具有平滑过渡的滤波器之间,得到的高频图像既有一定的模糊,也有一定的振铃现象存在。
理想高通滤波器运行结果如下:
图4.4理想高通滤波器运行结果
实验结果分析:
理想的高通滤波器把半径为D0的圆内的所有频率完全衰减掉,却使圆外的所有的频率无损的通过。
图像整体变得模糊,边缘和细节比较清晰。
D0较小时振铃现象比较明显,随着D0的增大,振铃现象得以消弱。
与上面的高通滤波器相比,理想高通滤波器的振铃现象更为明显。
巴特沃斯高通滤波器运行结果:
图4.5巴特沃斯高通滤波器运行结果
实验结果分析:
巴特沃斯高通滤波器的传递函数由于变化比较平滑,在阶数较低时的时候所得到的高频图像中只有轻微的振铃现象,图像较为清晰。
随着D0的增大,振铃现象也变得不明显。