实验图像的滤波增强处理(共8页).doc
精选优质文档-倾情为你奉上实验 图像的滤波增强处理实验目的1 了解空域增强的基本原理2 掌握平滑滤波器和锐化滤波器的使用3 掌握图像中值滤波增强的使用4 了解频域增强的基本原理5 掌握低通滤波器和高通滤波器的使用实验原理1空域增强空域滤波是在图像空间中借助模板对图像进行领域操作,处理图像每一个像素的取值都是根据模板对输入像素相应领域内的像素值进行计算得到的。空域滤波基本上是让图像在频域空间内某个范围的分量受到抑制,同时保证其他分量不变,从而改变输出图像的频率分布,达到增强图像的目的。空域滤波一般分为线性滤波和非线性滤波两类。线性滤波器的设计常基于对傅立叶变换的分析,非线性空域滤波器则一般直接对领域进行操作。各种空域滤波器根据功能主要分为平滑滤波器和锐化滤波器。平滑可用低通来实现,平滑的目的可分为两类:一类是模糊,目的是在提取较大的目标前去除太小的细节或将目标内的小肩端连接起来;另一类是消除噪声。锐化可用高通滤波来实现,锐化的目的是为了增强被模糊的细节。结合这两种分类方法,可将空间滤波增强分为四类:1)线性平滑滤波器(低通)2)非线性平滑滤波器(低通)3)线性锐化滤波器(高通)4)非线性锐化滤波器(高通)空间滤波器都是基于模板卷积,其主要工作步骤是:1 (1) 将模板在图中移动,并将模板中心与图中某个像素位置重合;2 (2) 将模板上的系数与模板下对应的像素相乘;3 (3) 将所有乘积相加;(4) 将和(模板的输出响应)赋给图中对应模板中心位置的像素。1.1平滑滤波器线性低通平滑滤波器也称为均值滤波器,这种滤波器的所有系数都是正数,对3×3 的模板来说,最简单的是取所有系数为1,为了保持输出图像任然在原来图像的灰度值范围内,模板与象素邻域的乘积都要除以9。MATLAB 提供了fspecial 函数生成滤波时所用的模板,并提供filter2 函数用指定的滤波器模板对图像进行运算。函数fspecial 的语法格式为:h=fspecial(type) h=fspecial(type,parameters) 其中参数type 指定滤波器的种类,parameters 是与滤波器种类有关的具体参数。这两个参数的种类及含义见表4-1。表4-1 MATLAB 中预定义的滤波器种类type parameters 说明average hsize 均值滤波,如果邻域为方阵,则hsize 为标量,否则由两元素向量hsize 指定邻域的行数和列数。disk radius 有(radius*2+1)个边的圆形均值滤波器gaussian hsize, sigma 标准偏差为sigma ,大小为hsize 的高斯低通滤波器laplacian alpha 系数由alpha(0.01.0)决定的二维拉普拉斯滤波log hsize, sigma 标准偏差为sigma ,大小为hsize 的高斯滤波旋转对称拉氏算子motion len, theta 按角度theta 移动len 个象素的运动滤波器prewitt 无近似计算垂直梯度的水平边缘强调算子sobel 无近似计算垂直梯度光滑效应的水平边缘强调算子unsharp alpha 根据alpha 决定的拉氏算子创建的掩模滤波器MATLAB 提供了一个函数imnoise 来给图像增添噪声,其语法格式为:J=imnoise(I,type) J=imnoise(I,type,parameters) 参数type 指定噪声的种类,parameters 是与噪声种类有关的具体参数。参数的种类见表4-2。表4-2 噪声种类及参数说明种类参数说明gaussian m, v 均值为m,方差为v 的高斯噪声localvar v 均值为0,方差为v 的高斯白噪声passion 无泊松噪声salt pepper 无椒盐噪声speckle v 均值为0,方差为v 的均匀分布随机噪声邻域平均法I=imread('eight.tif');J=imnoise(I,'salt & pepper',0.02);subplot(231),imshow(I); subplot(232),imshow(J); k1=filter2(fspecial('average',3),J);%进行3×3模板平滑滤波k2=filter2(fspecial('average',5),J);%进行5×5模板平滑滤波k3=filter2(fspecial('average',7),J);%进行7×7模板平滑滤波k4=filter2(fspecial('average',9),J);%进行9×9模板平滑滤波subplot(233),imshow(uint8(k1);subplot(234),imshow(uint8(k2);subplot(235),imshow(uint8(k3);subplot(236),imshow(uint8(k4);处理结果:1.2 中值滤波中值滤波器是一种常用的非线性平滑滤波器,其滤波原理与均值滤波器方法类似,但计算的不是加权求和,而是把领域中的图像的象素按灰度级进行排序,然后选择改组的中间值作为输出象素值。MATLAB 提供了medfilt2 函数来实现中值滤波,其语法格式为:B=medfilt2(A,m n) B=medfilt2(A)其中,A 是原图象,B 是中值滤波后输出的图像。m n 指定滤波模板的大小,默认模板是3×3 的。【实验】对一幅图像实现不同模板的中值滤波,并比较结果。I=imread('eight.tif');J=imnoise(I,'salt & pepper',0.02);subplot(231),imshow(I); subplot(232),imshow(J); k1=medfilt2(J); %进行3×3模板中值滤波k2=medfilt2(J,5 5); %进行5×5模板中值滤波k3=medfilt2(J,7 7); %进行7×7模板中值滤波k4=medfilt2(J,9 9); %进行9×9模板中值滤波subplot(233),imshow(uint8(k1);subplot(234),imshow(uint8(k2);subplot(235),imshow(uint8(k3);subplot(236),imshow(uint8(k4);处理结果:2频域增强频域增强是利用图像变换方法将原来的图像空间中的图像以某种形式转换到其他空间中,然后利用该空间的特有性质方便地进行图像处理,最后再转换回原来的图像空间中,从而得到处理后的图像。频域增强的主要步骤是:(1) 选择变换方法,将输入图像变换到频域空间。(2) 在频域空间中,根据处理目的设计一个转移函数,并进行处理。(3) 将所得结果用反变换得到增强的图像。常用的频域增强方法有低通滤波和高通滤波。2.1 低通滤波器I=imread('向日葵.tif');subplot(231),imshow(I); I=double(I);f=fft2(I); %采用傅立叶变换g=fftshift(f); %数据矩阵平衡(转换数据矩阵)subplot(332);imshow(log(abs(g);color(jet(64);M,N=size(f);n1=floor(M/2);n2=floor(N/2);d0=5; %可以改变d0的半径大小for i=1:M for j=1:N d=sqrt(i-n1)2+(j-n2)2); if d<=d0 h=1; else h=0; end g1(i,j)=h*g(i,j); endendg1=ifftshift(g1);g1=uint8(real(ifft2(g1);subplot(333),imshow(g1);处理结果:说明:以上程序存在几个明显的错误。1. ;imshow(log(abs(g);这句应先把要显示的图像数组变成uint8型,还要把对数值乘上一个合适的常数,否则得到全黑图。2.所有的subplot命令参数应该是1*3;3.在程序开头必须加上clear,否则只在第一次可以得到正确显示,以后将出现错误。改正后,显示结果如下:作业:1、上机实现以上各种方法所给的程序,给出运行结果。2、编程实现巴特沃斯低通(高通)滤波器低通function newimg=Butterworth(I,d0,n) I=imread('向日葵.tif');subplot(231),imshow(I); I=double(I);f=fft2(I); g=fftshift(f); M,N=size(f);n1=floor(M/2);n2=floor(N/2); for i=1:M for j=1:N d=sqrt(i-2*1)2+(j-2*2)2); H=1/(1+(d/15)(2*2); g1(i,j)=g(i,j)*H; endendg1=ifftshift(g1); g1=uint8(real(ifft2(g1);newimg=g1;测试时,取d0=15,n=2高通:function newimg=ButterworthH(I,d0,n) I=double(I);f=fft2(I); g=fftshift(f); M,N=size(f);n1=floor(M/2);n2=floor(N/2); for i=1:M for j=1:N d=sqrt(i-n1)2+(j-n2)2); H=1/(1+(d0/d)(2*n); g1(i,j)=g(i,j)*H; endendg1=ifftshift(g1); g1=uint8(real(ifft2(g1);newimg=g1; 专心-专注-专业