《图像频率域低通滤波处理程序设计》由会员分享,可在线阅读,更多相关《图像频率域低通滤波处理程序设计(16页珍藏版)》请在金锄头文库上搜索。
1、1 基本原理简介1.1 MATLAB 简介MATLAB是矩阵实验室(Matrix Laboratory)的简称,是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。MATLAB是由美国mathworks公司发布的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,并在很大
2、程度上摆脱了传统非交互式程序设计语言(如C、Fortran)的编辑模式,代表了当今国际科学计算软件的先进水平。MATLAB和Mathematica、Maple并称为三大数学软件。它在数学类科技应用软件中在数值计算方面首屈一指。MATLAB可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。MATLAB的基本数据单位是矩阵,它的指令表达式与数学、工程中常用的形式十分相似,故用MATLAB来解算问题要比用C,FORTRAN等语言完成相同的事情简捷得多,并且MATLAB也吸收了
3、像Maple等软件的优点,使MATLAB成为一个强大的数学软件。在新的版本中也加入了对C,FORTRAN,C+,JAVA的支持。可以直接调用,用户也可以将自己编写的实用程序导入到MATLAB函数库中方便自己以后调用,此外许多的MATLAB爱好者都编写了一些经典的程序,用户可以直接进行下载就可以用。傅立叶变换基本原理傅里叶变换能将满足一定条件的某个函数表示成三角函数(正弦和/或余弦函数)或者它们的积分的线性组合。在不同的研究领域,傅里叶变换具有多种不同的变体形式,如连续傅里叶变换和离散傅里叶变换。最初傅里叶分析是作为热过程的解析分析的工具被提出的1。傅里叶变换属于谐波分析。傅里叶变换的逆变换容易
4、求出,而且形式与正变换非常类似。正弦基函数是微分运算的本征函数,从而使得线性微分方程的求解可以转化为常系数的代数方程的求解。在线性时不变的物理系统内,频率是个不变的性质,从而系统对于复杂激励的响应可以通过组合其对不同频率正弦信号的响应来获取。卷积定理指出:傅里叶变换可以化复杂的卷积运算为简单的乘积运算,从而提供了计算卷积的一种简单手段。离散形式的傅里叶变换可以利用数字计算机快速的实现(其算法称为快速傅里叶变换算法(FFT)。MATLAB中提供的变换函数(1) fft2:用于计算二维快速傅立叶变换,语句格式: B=fft2(I,m,n) 按指定的点数计算m,返回矩阵B的大小为mn,不写默认为原图
5、像大小。 (2)fftn:用于计算n维快速傅立叶变换 (3)fftshift:用于将变换后的图像频谱中心从矩阵的原点移到矩阵地中心,语法格式: B=fftshift(I) (4)ifft2:用于计算图像的二维傅立叶反变换,语法格式 B=ifft2(i) (5)ifftn:用于计算n维傅立叶变换快速卷积实验:傅立叶变换一个重要特性是可以实现快速卷积。 设A为MN矩阵,B为PQ的矩阵,快速卷积方法如下: *对A和B补0,使其大小都为(M+P-1)(N+Q-1) *利用fft2对矩阵A和B进行二维变换 *将两个FFT结果相乘,利用ifft2对得到的乘积进行傅立叶反变换滤波电路原理及基本滤波器电路介绍
6、滤波的基本概念滤波是信号处理中的一个重要概念。滤波分经典滤波和现代滤波。经典滤波的概念,是根据富立叶分析和变换提出的一个工程概念。根据高等数学理论,任何一个满足一定条件的信号,都可以被看成是由无限个正弦波叠加而成。换句话说,就是工程信号是不同频率的正弦波线性叠加而成的,组成信号的不同频率的正弦波叫做信号的频率成分或叫做谐波成分。只允许一定频率范围内的信号成分正常通过,而阻止另一部分频率成分通过的电路,叫做经典滤波器或滤波电路。实际上,任何一个电子系统都具有自己的频带宽度(对信号最高频率的限制),频率特性反映出了电子系统的这个基本特点。而滤波器,则是根据电路参数对电路频带宽度的影响而设计出来的工
7、程应用电路。用模拟电子电路对模拟信号进行滤波,其基本原理就是利用电路的频率特性实现对信号中频率成分的选择。根据频率滤波时,是把信号看成是由不同频率正弦波叠加而成的模拟信号,通过选择不同的频率成分来实现信号滤波。当允许信号中较高频率的成分通过滤波器时,这种滤波器叫做高通滤波器。当允许信号中较低频率的成分通过滤波器时,这种滤波器叫做低通滤波器。当只允许信号中某个频率范围内的成分通过滤波器时,这种滤波器叫做带通滤波器。理想滤波器的行为特性通常用幅度-频率特性图描述,也叫做滤波器电路的幅频特性。理想滤波器的幅频特性如图所示。图中,w1和w2叫做滤波器的截止频率。滤波器频率响应特性的幅频特性图 对于滤波
8、器,增益幅度不为零的频率范围叫做通频带,简称通带,增益幅度为零的频率范围叫做阻带。例如对于LP,从-w1当w1之间,叫做LP的通带,其他频率部分叫做阻带。通带所表示的是能够通过滤波器而不会产生衰减的信号频率成分,阻带所表示的是被滤波器衰减掉的信号频率成分。通带内信号所获得的增益,叫做通带增益,阻带中信号所得到的衰减,叫做阻带衰减。在工程实际中,一般使用dB作为滤波器的幅度增益单位。低通滤波器的基本电路特点是,只允许低于截止频率的信号通过。二阶低通Butterworth滤波电路如下:下图是用运算放大器设计的二阶低通Butterworth滤波电路。2 课程设计的基本步骤2.1 检查图片格式info
9、=imfinfo(3.jpg)info = Filename: 3.jpg FileModDate: 24-Jun-2012 15:00:32 FileSize: 19289 Format: jpg FormatVersion: Width: 256 Height: 256 BitDepth: 24 ColorType: truecolor FormatSignature: NumberOfSamples: 3 CodingMethod: Huffman CodingProcess: Sequential Comment: 从网上下载了一个图像,用MATLAB检查发现是truecolor 格式
10、,ColorType: truecolor。a=imread(123.jpg);b=rgb2gray(a);imwrite(b,456.jpg) info=imfinfo(456.jpg)info = Filename: 456.jpg FileModDate: 24-Jun-2012 15:11:48 FileSize: 10711 Format: jpg FormatVersion: Width: 256 Height: 256 BitDepth: 8 ColorType: grayscale FormatSignature: NumberOfSamples: 1 CodingMethod
11、: Huffman CodingProcess: Sequential Comment: 在 ColorType: grayscale 属性行如此显示,则说明以456.jpg命名的文件为灰度图像 对一副灰度图片进行二维傅立叶变换,并且显示其幅度值 (1)启动MATLAB,设置当前工作路径(2)在当前路径下的文件夹中拷入个灰度图片,“456.jpg”文件。(3)输入如下命令,完成实验figure(1);RGB=imread(456.jpg);imshow(RGB);figure(2);B=fftshift(fft2(RGB);imshow(log(abs(B),),colormap(jet(64
12、),colorbar;Butterworth低通滤波按照二阶Butterworth低通滤波器的表达式设计传递函数,对该频谱图像进行低通滤波,对滤波后的频谱图像作逆Fourier变换得到滤波结果,显示结果图I=imread(456.jpg);figure;subplot(2, 2, 1); imshow(I); title(张健原图像);J1 = imnoise(I, salt & pepper); % 叠加椒盐噪声subplot(2, 2, 2); imshow(J1); title(张健加噪声图像);g = fft2(double(J1); % 傅立叶变换g = fftshift(g); %
13、 转换数据矩阵M, N=size(g);nn = 2; % 二阶巴特沃斯(Butterworth)低通滤波器d0 = 20;m = fix(M/2); n = fix(N/2);for i = 1:M for j = 1:N d = sqrt(i-m)2+(j-n)2); h = 1/(1+0.414*(d/d0)(2*nn); % 计算低通滤波器传递函数 result(i,j) = h*g(i,j); T(i, j) = h; endendresult = ifftshift(result);J2 = ifft2(result);J3 = uint8(real(J2);subplot(2, 2, 3); mesh(T); title(张健滤波器示意图) box on; % 显示滤波处理后的图像subplot(2, 2, 4); imshow(J3); title(张健滤波结果) 传递函数如下:I1=imread(456.jpg); %读取图像s=fftshift(fft2(I);M,N=size(s); %分别返回s的行数到M中,列数到N中n=2; %对n赋初值%GLPF滤波,d0=5,15,30(程序中以d0=30为例) d0=30; %初始化d0n1=floor(M/2); %对M/2进行取整n2=floor(N/2);