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

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:

见书。

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');%imnoise
g1=imnoise(f,'gaussian',0,0.1);%加入均值为0,方差为0.1的高斯噪声 

figure(1);
g1=im2double(g1);
imshow(g1);
title('imnoise高斯噪声图');
%imnoise2
noise2=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:60
    for 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);               
    end
end %在给定的范围内生成两个中心为(10,10)(-10,-10)的高通滤波器
for u=1:60
    for 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);    
    end
end%在给定的范围内生成两个中心为(-10,10)(10,-10)的高通滤波器
H=H1.*H2;%将生成的两个滤波器合成为一个带有四个高通滤波器的滤波器
figure(1);
mesh(H);%显示滤波器

图二(修改的地方)

for u=1:60
    for 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);    
    end
end for u=1:60
    for 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);    
    end
end

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);%根据上述矩阵创建表示空间变化的一个结构tform

figure(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;clc
f=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);%显示滤波后的图像

图像:上文都以截图展示

发布了17 篇原创文章 · 获赞 12 · 访问量 1662

猜你喜欢

转载自blog.csdn.net/weixin_42784535/article/details/105122369