1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 数字图像处理Matlab-图像的滤波处理与图像空间变换(附代码)

数字图像处理Matlab-图像的滤波处理与图像空间变换(附代码)

时间:2023-07-20 21:05:46

相关推荐

数字图像处理Matlab-图像的滤波处理与图像空间变换(附代码)

目录

1.Objectives:2.Experiment Content:3.Experiment Principle:4.Experiment Steps Result and Conlusion:【附录】实现代码

1.Objectives:

1、了解 MATLAB 工具箱中滤波器

2、掌握用滤波方式去除图像噪声算法

3、学会对图像的空间变换

2.Experiment Content:

练习图像增强的 Matlab 命令,熟悉下列模块函数:

Imageenhancement: imadjust-Adjustimageintensityvaluesorcolormap

Imagenoising: imnoise-Addnoisetoanimage Noiseestimation:

Roipoly,histroi,statmoments Imagefiltering:

medfilt2-Perform2-Dmedianfiltering

ordfilt2-Perform2-Dorder-statisticfiltering spfilt

wiener2-Perform2-Dadaptivenoise-removalfiltering Testimagemaking:

maketform,imtransform

3.Experiment Principle:

见书《数字图像处理》

(冈萨雷斯著作,电子工业出版社于12月1日出版)

4.Experiment Steps Result and Conlusion:

1、 使用 imadjust 函数调整图像视觉效果

CON:从图中看到,当gamma<1获得变亮的图案,gamma>1获得变暗的图案当将灰度值范围颠倒,即可获得负片

2、生成含有噪声的图像

分别用 imnoise,imnoise2,imnoise3 函数生成含有噪声的图像, 改变相应参数,观察图像变化,理解各参数的作用。

imnoise2 的使用:在图像‘Fig0704(Vase).tif.tif’中加入均值 为 0,标准差为 0.1 的高斯噪声。

CON:这个是imnoise生成的高斯噪声图,方差为0.1方差越大,噪声影响越大

CON:这个是将imnoise2函数生成的方差为0.1的噪声加在原图中可以看到这个与上图的图片噪声污染查不了太多,所以imnoise函数的加噪声效果更明显

CON:此图为生成的周期噪声,可以看到在两个大致方向的周期噪声,并且是斜着的,因为这是了两个周期噪声的叠加。在两个方向上亮度变化也不一样,这里设置的是1:5的亮度变化,将噪声加入原图后的效果如右图。

3、噪声估计

用 roipoly、histroi、statmoments 等函数进行图像噪声参数估计。

这个图是在取ROC区域的时候,因为在选择区域背景几乎没有变化,几乎相当于都是噪声,因此此块区域比较合适作为噪声估计的区域

可以看到ROI区域的直方图,跟我们做噪声估计后获取的噪声的直方图几乎一样,说明我们对此图中的噪声估计基本正确

4.加载图像cameraman.tif,图像分别加入gaussian, salt&pepper, speckle噪声,比较其对均值和方差的影响

CON:上面四幅图分别为原图,以及被三种噪声污染过后的图。对于高斯噪声与斑点噪声来说,他们的噪声方差越大,污染就越严重,对于椒盐噪声来说,设置的椒盐的密度越大,也就越严重。

5、分别用函数medfilt2, ordfilt2 和 wiener2 去除所加的噪声。将处理 后的图像与原图像比较,讨论各种方法的作用。

CON:对于中值滤波器从上图来看,要选择好其滤波器大小,一般来说,滤波器越大,滤波效果越差从上图可以明显看到,随着滤波器大小的增加,滤波效果变差

CON:对于ordfilt2 函数,可以选择在滤波器中的第几大的数值,图二相当于一个中值滤波器,图三相当于一个较小值滤波器,因此留下了椒噪声,图四相当于一个较大值滤波器,因此留下了盐噪声,从上图看,对于存在椒盐噪声的图像,还是用中值滤波器比较合适。

CON:对于维纳滤波器从上图来看,滤波器大小对滤波效果也是非常重要的,从上图可以明显看到,滤波器越大,噪声会被去除,但是原图也会得到损坏。

6、设计陷波滤波器(Notch filter)

利用以下公式编程实现陷波滤波器。

CON:这里的我们对四个滤波中心的值进行了该表,分别为(25 25),(25 10),(0 10),(0 25),即对式子中的u0 v0的值做了修改,因为都在图中的右上方,因此这里均是对u0 v0做了-处理,得到在这四个坐标下凹陷的滤波器

CON:这个滤波器的位置就是在中间,坐标分别是(10 10),(-10 -10),(10 -10),(-10 10),也是通过对u0 v0的修改得到的,并且相比于上图,这个的截止频率也增加了一些。

7、图像的空间变换

用测试图像(C = checkerboard)产生一个指定形状的变形图像, 学习使用函数:maketform,imtransform,产生下列各图。

CON:上图左是用这样的一个结构体来实现的T=[1 0 0;0.8 1 0;0 0 1];根据我们反向映射的原理:这个对应的坐标变化x’=x;y’=y+0.8x;即横坐标不变,纵坐标偏移,偏移量量由所在横坐标大小决定,得到上图

CON:上图右是用这样的一个结构体来实现的T=[1 0.8 0;0 1 0;0 0 1];根据我们反向映射的原理:这个对应的坐标变化x’=x+0.8y;y’=y;即纵坐标不变,横坐标偏移,偏移量量由所在纵坐标大小决定,因此得到这样的一个图像

8、研究空间滤波方法和噪声特征间的关系,利用 spfilt 函数举例说明所得结论。

空间滤波是一种采用滤波处理的图像增强方法。其理论基础是空间卷积和空间相关。目的是改善图像质量。空间滤波的模板被称为空间滤波器。空间滤波可以滤除噪声,但事实也会对原图信息造成损失。

【附录】实现代码

1,步骤一:

f=imread('E:\数字图像处理\程序与图像\图像库\Fig0704(Vase).tif');g1=imadjust(f,[0 1],[0 1],0.5);%gamma<1获得变亮的图案g2=imadjust(f,[0 1],[0 1],1.5);%gamma>1获得变暗的图案g3=imadjust(f,[0 1],[1 0]);%获得负片figure(1);subplot(221),imshow(f);title('原图');subplot(222),imshow(g1);title('gamma=0.5(亮)');subplot(223),imshow(g2);title('gamma=1.5(暗)');subplot(224),imshow(g3);title('负片');

2,步骤二

%用imnoise imnoise2 imnoise3三种方法获得噪声图f=imread('F:\Fig0704(Vase).tif.tif');%imnoiseg1=imnoise(f,'gaussian',0,0.1);%加入均值为0,方差为0.1的高斯噪声 figure(1);g1=im2double(g1);imshow(g1);title('imnoise高斯噪声图');%imnoise2noise2=imnoise2('gaussian',512,512,0,0.1);%先生成均值为0,方差0.1的噪声f=im2double(f);g2=noise2+f;%将原图与噪声叠加,变成噪声图figure(2);imshow(g2);title('imnoise2高斯噪声图'); %imnoise3 周期噪声C=[6 32;-2 2];A=[1 5];[r R S]=imnoise3(512,512,C,A);figure(3);subplot(121);imshow(r,[]);title('imnoise3周期噪声');r1=mat2gray(r);%将得到的数据换归化成gray数据g2=r1+f;subplot(122);imshow(g2,[]);title('加入周期噪声后的图像');

3、步骤三

f=imread('E:\数字图像处理\程序与图像\图像库\Fig0704(Vase).tif');g=imnoise(f,'gaussian',0,0.1);%添加均值0 方差0.1的高斯噪声图像B=roipoly(g);%在噪声图像中交互生成的ROI npix=sum(B(:));%求ROI区域的点数 figure(1); subplot(121); imshow(g);%显示被高斯噪声污染的图像 subplot(122); imshow(B);%显示ROI区域 figure(2);subplot(121);h=imhist(f(B));%画出ROI区域的直方图 f(B)代表一列矩阵,数值为ROI区域的灰度值bar(h,1);axis([0,256,0,1000]);title('ROI区域的直方图');[v,unv]=statmoments(h,2);%计算均值与方差;subplot(122);X=imnoise2('gaussian',npix,1,unv(1,1),sqrt(unv(1,2)));%生成与图片中有相同均值方差的高斯噪声hist(X,140);%输出高斯噪声的直方图axis([0,256,0,1000]);

4,步骤四

f=imread('E:\数字图像处理\程序与图像\图像库\Fig0704(Vase).tif');figure(1);subplot(221);imshow(f);title('原图');g1=imnoise(f,'gaussian',0,0.04);%加入均值为0,方差为0.04的高斯噪声g2=imnoise(f,'salt & pepper',0.1);%0.1代表椒盐的密度g3=imnoise(f,'speckle',0.04);%0.04代表乘性噪声系数的的方差subplot(222);imshow(g1);title('高斯噪声污染的图');subplot(223);imshow(g2);title('椒盐噪声污染的图');subplot(224);imshow(g3);title('斑点噪声污染的图');

5,步骤五

f=imread('F:\cameraman.tif');g=imnoise(f,'salt & pepper',0.1);%0.1代表椒盐的密度%使用中值滤波器f11=medfilt2(f,[4 4],'symmetric');%使用中值滤波器进行滤波,[4 4]是设置滤波器的大小 滤波器设计成对称的f12=medfilt2(f,[7 7],'symmetric');%设置7*7大小的滤波器f13=medfilt2(f,[10 10],'symmetric');%设置10*10大小的滤波器figure(1);subplot(221);imshow(g);title('噪声图');subplot(222);imshow(f11);title('4*4的滤波器中值滤波器滤过的图');subplot(223);imshow(f12);title('7*7的滤波器中值滤波器滤过的图');subplot(224);imshow(f13);title('10*10的滤波器中值滤波器滤过的图');%使用二维统计顺序滤波ordfilt滤波器f21=ordfilt2(g,5,ones(3,3));%即在3*3的矩阵中选取数值为第五大的那个值f22=ordfilt2(g,3,ones(3,3));f23=ordfilt2(g,7,ones(3,3));figure(2);subplot(221);imshow(g);title('噪声原图 ');subplot(222);imshow(f21);title('3*3的滤波器,5 ');subplot(223);imshow(f22);title('3*3的滤波器,3');subplot(224);imshow(f23);title('3*3的滤波器,7');%维纳滤波实验f31=wiener2(g,[5 5]);f32=wiener2(g,[8 8]);f33=wiener2(g,[20 20]);figure(3);subplot(221);imshow(g);title('原图');subplot(222);imshow(f31);title('5*5的维纳滤波器 ');subplot(223);imshow(f32);title('8*8的维纳滤波器 ');subplot(224);imshow(f33);title('10*10的维纳滤波器 ');

6,步骤六

图一:

M=60;N=60;%确定滤波器大小是60*60n=3;%这个改变的是滤波器的峰值尖峰程度,衰减速度D0=5;%这个的是滤波器截止频率H=ones(60,60);%生成一个矩阵for u=1:60for v=1:60 H1(u,v)=1/(1+(D0^2/(sqrt((u-M/2-10)^2+(v-N/2-10)^2).*sqrt((u-M/2+10)^2+(v-N/2+10)^2)))^n);endend %在给定的范围内生成两个中心为(10,10)(-10,-10)的高通滤波器for u=1:60for v=1:60 H2(u,v)=1/(1+(D0^2/(sqrt((u-M/2+10)^2+(v-N/2-10)^2).*sqrt((u-M/2-10)^2+(v-N/2+10)^2)))^n); endend%在给定的范围内生成两个中心为(-10,10)(10,-10)的高通滤波器H=H1.*H2;%将生成的两个滤波器合成为一个带有四个高通滤波器的滤波器figure(1);mesh(H);%显示滤波器

图二(修改的地方)

for u=1:60for v=1:60 H1(u,v)=1/(1+(D0^2/(sqrt((u-M/2-25)^2+(v-N/2-25)^2).*sqrt((u-M/2-25)^2+(v-N/2-10)^2)))^n); endend for u=1:60for v=1:60 H2(u,v)=1/(1+(D0^2/(sqrt((u-M/2-0)^2+(v-N/2-10)^2).*sqrt((u-M/2-0)^2+(v-N/2-25)^2)))^n); endend

7,步骤七

C=checkerboard(64,4,4);%生成的测试板每个正方形有64*64个像素figure(1);imshow(C); T1=[1 0.8 0;0 1 0;0 0 1];%这个对应的坐标变化x'=x+0.8y;y'=y;即纵坐标不变,横坐标偏移,偏移量量由所在纵坐标大小决定tform1=maketform('affine',T1);%根据上述矩阵创建表示空间变化的一个结构tformfigure(2);subplot(121);C1=imtransform(C,tform1);%根据创建的结构,将原图进行反向映射imshow(C1);T2=[1 0 0;0.8 1 0;0 0 1];%这个对应的坐标变化x'=x;y'=y+0.8x;即横坐标不变,纵坐标偏移,偏移量量由所在横坐标大小决定tform1=maketform('affine',T2);figure(2);subplot(122);C2=imtransform(C,tform1);imshow(C2);

8,步骤八

clear all;clcf=imread('E:\数字图像处理\程序与图像\标准图片\camera.tif');addpath('E:\数字图像处理\程序与图像\dipum_toolbox_2.0.2(only run)');%添加相应的.p文件 g1=imnoise(f,'gaussian',0,0.04);%加入均值为0,方差为0.04的高斯噪声figure;imshow(g1);%显示已被高斯噪声污染的图像g2=spfilt(g1,'atrimmed',3,3,2);%进行滤波figure;imshow(g2);%显示滤波后的图像

图像:上文都以截图展示

码字不易,都看到这里了不如点个赞哦~

我还写了很多文章,欢迎关注我哦~

亲爱的朋友,这里是我的公众号,欢迎关注!

本博客的优秀博文也将陆续搬运到公众号,之后还将推出更多优秀博文,并将优先发在公众号,敬请期待!

关注起来,让我们一起成长!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。