一、实验目的
1、了解 MATLAB 工具箱中滤波器
2、掌握用滤波方式去除图像噪声算法
3、学会对图像的空间变换
二、实验内容
练习图像增强的 Matlab 命令,熟悉下列模块函数:
Image enhancement:
imadjust - Adjust image intensity values or colormap
Image noising:
imnoise - Add noise to an image
Noise estimation:
Roipoly, histroi, statmoments
Image filtering:
medfilt2 - Perform 2-D median filtering
ordfilt2 - Perform 2-D order-statistic filtering
spfilt
wiener2 - Perform 2-D adaptive noise-removal filtering
Test image making:
maketform,imtransform
三、实验步骤
1、 使用 imadjust 函数调整图像视觉效果
2、生成含有噪声的图像
分别用 imnoise,imnoise2,imnoise3 函数生成含有噪声的图像,改
变相应参数,观察图像变化,理解各参数的作用。
imnoise2 的使用:在图像‘Fig0704(Vase).tif.tif’中加入均值为
0,标准差为 0.1 的高斯噪声。显示如下图。
3、噪声估计
用 roipoly、histroi、statmoments 等函数进行图像噪声参数估计。
显示图如下。

4、加载图像cameraman.tif,图像分别加入gaussian, salt&pepper, speckle
噪声,比较其对均值和方差的影响。
5、分别用函数medfilt2, ordfilt2 和 wiener2 去除所加的噪声。将处理后
的图像与原图像比较,讨论各种方法的作用。
6、设计陷波滤波器(Notch filter)
利用以下公式编程实现陷波滤波器。

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

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

 四、实验结果以及代码(分段)

a=imread('C:\PICTURE_YUWEI\Fig0704(Vase).tif.tif');
b=imread('C:\PICTURE_YUWEI\camera.tif');

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

%使用imadjust函数调整图像视觉效果
a1=imadjust(a,[0 1],[0 1],0.5);%gamma=0.5<1时,图象变亮
a2=imadjust(a,[0 1],[0 1],1.5);%gamma=1.5>1时,图象变暗
a3=imadjust(a,[0 1],[1 0]);%负片
figure(1);
subplot(2,2,1),imshow(a);title('图1.1 原图');
subplot(2,2,2),imshow(a1);title('图1.2 gamma=0.5<1时,图象变亮');
subplot(2,2,3),imshow(a2);title('图1.3 gamma=1.5>1时,图象变暗');
subplot(2,2,4),imshow(a3);title('图1.4 负片');

%分别用 imnoise(),imnoise2(),imnoise3()函数生成含有噪声的图像

%分别用 imnoise(),imnoise2(),imnoise3()函数生成含有噪声的图像
b1=imnoise(a,'gaussian',0,0.01); %在图像中加入均值为0、方差为0.1的高斯白噪声
n1=imnoise2('gaussian',512,512,0,0.1);%产生均值为0、方差为0.1的白噪声
b2=im2double(a)+n1; %将原图转换为双精度,并且与噪声n1进行叠加
C=[6 32;-2 2];%冲击位置的坐标
A=[1 5];%1*k维向量包含振幅的冲击对
[n2 R S]=imnoise3(512,512,C,A);%产生一个大小为M*N的正弦噪声模型n2;R为傅里叶变换,S为正弦噪声模型的傅里叶的频谱
n_gray=mat2gray(n2);%将得到的数据换归化成gray数据
b3=n_gray+im2double(a);%将原图转换为双精度再与噪声进行叠加
figure(2);
subplot(2,2,1),imshow(a);title('图2.1 原图');
subplot(2,2,2),imshow(a);title('图2.2 加imnoise噪声后的图像');
subplot(2,2,3),imshow(b2);title('图2.3 加imnoise2噪声后的图像');
subplot(2,2,4),imshow(b3,[]);title('图2.4 加imnoise3周期噪声后的图像');

%噪声估计

(这一部分没有搞出实验结果,总是报错,I'm sooo blue。遂重新写了一个程序文件,把这部分代码单独放在该文件中。在本文里,把有关噪声估计的代码放在最后。 )

%加载图像cameraman.tif,图像分别加入gaussian, salt&pepper, speckle噪声

%加载图像cameraman.tif,图像分别加入gaussian, salt&pepper, speckle噪声
nn1=imnoise(b,'gaussian',0,0.09);%加入均值为0,方差为0.09的高斯噪声
nn2=imnoise(b,'salt & pepper',0.15);%加入密度为0.1的椒盐噪声
nn3=imnoise(b,'speckle',0.09);%加入方差为0.09的乘性噪声系数的斑点噪声
figure(3);
subplot(2,2,1);imshow(b);title('图3.1 原图');
subplot(2,2,2);imshow(nn1);title('图3.2 加高斯噪声的图');
subplot(2,2,3);imshow(nn2);title('图3.3 加椒盐噪声的图');
subplot(2,2,4);imshow(nn3);title('图3.4 加斑点噪声的图');

%分别用函数medfilt2,ordfilt2和wiener2去除所加的噪声。将处理后的图像与原图像比较。

%分别用函数medfilt2,ordfilt2和wiener2去除所加的噪声。将处理后的图像与原图像比较。
%1. 中值滤波
f11=medfilt2(b,[4 4],'symmetric');%使用4*4大小的中值滤波器进行滤波
f12=medfilt2(b,[8 8],'symmetric');%8*8
figure(4);
subplot(131);imshow(g);title('图5.1 噪声图');
subplot(132);imshow(f11);title('图5.2 4*4滤波器滤过的图');
subplot(133);imshow(f12);title('图5.3 8*8滤波器滤过的图');
%2. 顺序滤波
f21=ordfilt2(g,4,ones(4,4));%即在4*4的矩阵中将值按照由大到小排序,选取第五个值
f22=ordfilt2(g,9,ones(4,4));%第九个值
figure(5);
subplot(131);imshow(g);title('图6.1 噪声原图 ');
subplot(132);imshow(f21);title('图6.2 3*3的滤波器第四大');
subplot(133);imshow(f22);title('图6.3 3*3的滤波器第九大');
%3. 维纳滤波
f31=wiener2(g,[4 4]);%4*4滤波器滤波
f33=wiener2(g,[15 15]);%15*15滤波器
figure(6);
subplot(131);imshow(g);title('图7.1 原图');
subplot(132);imshow(f31);title('图7.2 4*4维纳滤波器滤过的图');
subplot(133);imshow(f33);title('图7.3 15*15维纳滤波器滤过的图');

设计陷波滤波器(Notch filter)

%设计陷波滤波器(Notch filter)
M=60;
N=60;%大小为60*60的滤波器
n=3;%滤波器的尖峰程度/衰减速度
D0=5;%滤波器截止频率
H=ones(60,60);%生成一个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);               end
end %在给定的范围内生成两个中心为(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);    end
end%生成两个中心为(-10,10)(10,-10)的高通滤波器
H=H1.*H2;%将两个滤波器合成为一个有四个中心的高通滤波器J=ones(60,60);%生成一个矩阵
for u=1:60for v=1:60
J1(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%生成两个中心为(25,25)(25,10)的高通滤波器
end
for u=1:60for v=1:60
J2(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
J=J1.*J2;%将生成的两个滤波器合成为一个带有四个高通滤波器的滤波器
figure(7);
subplot(1,2,1),mesh(H);title('图8.1 3*3的滤波器,3');
subplot(1,2,2),mesh(J);title('图8.2 3*3的滤波器,3');

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

%研究空间滤波方法和噪声特征间的关系,利用spfilt函数举例说明所得结论
addpath('C:\PICTURE_YUWEI\dipum_toolbox_2.0.2');%添加.p文件
g1=imnoise(b,'gaussian',0,0.09);%加入均值为0,方差为0.09的高斯噪声
figure(8);
subplot(1,2,1);imshow(g1);title('图9.1 被高斯噪声污染的图像');
g2=spfilt(g1,'atrimmed',3,3,2);%滤波
subplot(1,2,2);imshow(g2);title('图9.2 滤波后的图像');

图像的空间变换

%图像的空间变换
C=checkerboard(64,4,4);%在生成的图像中,每个正方形的大小是64*64
T1=[1 0.8 0;0 1 0;0 0 1];%x'=x+0.8y;y'=y
tform1=maketform('affine',T1);%根据T1创建tform,表示空间变化
C1=imtransform(C,tform1);%将原图进行反向映射
T2=[1 0 0;0.8 1 0;0 0 1];%x'=x;y'=y+0.8x
tform1=maketform('affine',T2);
C2=imtransform(C,tform1);
figure(9);
subplot(131);imshow(C);title('图10.1');
subplot(132);imshow(C2);title('图10.2');
subplot(133);imshow(C1);title('图10.3');

五、conclusions

(1)在使用imadjust函数调整视觉效果时,当gamma>1时,图像变亮;gamma<1时,图像变暗;gamma=1是,图像成为负片。

(2)学会了使用imnoise,imnoise2,imnoise3进行噪声的生成。使用imnoise的时候,是直接在图像中加入一定性质的噪声,而使用imnoise2时,是直接产生一个特定性质的噪声图像,他是双精度的,需要将原图转换为双精度后与之叠加,才能得到加入噪声的图像;使用imnoise3和imnoise2相似,不同的是,imnoise还需要将噪声图像转换为灰度图像,再与转换为双精度的原图相加才可以得到加了噪声后的图像。

(3)学会了使用函数生成特定性质的高斯、椒盐、斑点噪声。并学会使用中值medfilt2滤波、顺序ordfilt2滤波和维纳wiener2滤波将图像中的噪声去除。

(4)学会了如何设计陷波滤波器。需要定义它的像素大小、尖峰程度、截止频率,需要先生成两组包含两个有特定中心的高通滤波器,再将这两组滤波器合成一个包含四个高通滤波器的陷波滤波器。

(5)学会如何使用checkerboard函数生成棋盘格图像,使用maketform函数对其进行空间变换,使用imtransform函数对其进行反向映射。

(6)学会噪声估计的基本思路。即,首先生成一个特定的噪声图像,使用roipoly函数来选取一个ROI范围。分别画出这个范围的直方图,和噪声图像的直方图,并进行比较。可惜的是,matlab提示我输入参数太多,没有成功地完成噪声估计。

六、实验代码(全部)

%第一部分:除了噪声估计之外的其他部分代码。
a=imread('C:\PICTURE_YUWEI\Fig0704(Vase).tif.tif');
b=imread('C:\PICTURE_YUWEI\camera.tif');%使用imadjust函数调整图像视觉效果
a1=imadjust(a,[0 1],[0 1],0.5);%gamma=0.5<1时,图象变亮
a2=imadjust(a,[0 1],[0 1],1.5);%gamma=1.5>1时,图象变暗
a3=imadjust(a,[0 1],[1 0]);%负片
figure(1);
subplot(2,2,1),imshow(a);title('图1.1 原图');
subplot(2,2,2),imshow(a1);title('图1.2 gamma=0.5<1时,图象变亮');
subplot(2,2,3),imshow(a2);title('图1.3 gamma=1.5>1时,图象变暗');
subplot(2,2,4),imshow(a3);title('图1.4 负片');
%分别用 imnoise(),imnoise2(),imnoise3()函数生成含有噪声的图像
b1=imnoise(a,'gaussian',0,0.01); %在图像中加入均值为0、方差为0.1的高斯白噪声
n1=imnoise2('gaussian',512,512,0,0.1);%产生均值为0、方差为0.1的白噪声
b2=im2double(a)+n1; %将原图转换为双精度,并且与噪声n1进行叠加
C=[6 32;-2 2];%冲击位置的坐标
A=[1 5];%1*k维向量包含振幅的冲击对
[n2 R S]=imnoise3(512,512,C,A);%产生一个大小为M*N的正弦噪声模型n2;R为傅里叶变换,S为正弦噪声模型的傅里叶的频谱
n_gray=mat2gray(n2);%将得到的数据换归化成gray数据
b3=n_gray+im2double(a);%将原图转换为双精度再与噪声进行叠加
figure(2);
subplot(2,2,1),imshow(a);title('图2.1 原图');
subplot(2,2,2),imshow(a);title('图2.2 加imnoise噪声后的图像');
subplot(2,2,3),imshow(b2);title('图2.3 加imnoise2噪声后的图像');
subplot(2,2,4),imshow(b3,[]);title('图2.4 加imnoise3周期噪声后的图像');%加载图像cameraman.tif,图像分别加入gaussian, salt&pepper, speckle噪声
nn1=imnoise(b,'gaussian',0,0.09);%加入均值为0,方差为0.09的高斯噪声
nn2=imnoise(b,'salt & pepper',0.15);%加入密度为0.1的椒盐噪声
nn3=imnoise(b,'speckle',0.09);%加入方差为0.09的乘性噪声系数的斑点噪声
figure(3);
subplot(2,2,1);imshow(b);title('图3.1 原图');
subplot(2,2,2);imshow(nn1);title('图3.2 加高斯噪声的图');
subplot(2,2,3);imshow(nn2);title('图3.3 加椒盐噪声的图');
subplot(2,2,4);imshow(nn3);title('图3.4 加斑点噪声的图');%分别用函数medfilt2,ordfilt2和wiener2去除所加的噪声。将处理后的图像与原图像比较。
%1. 中值滤波
f11=medfilt2(b,[4 4],'symmetric');%使用4*4大小的中值滤波器进行滤波
f12=medfilt2(b,[8 8],'symmetric');%8*8
figure(4);
subplot(131);imshow(g);title('图5.1 噪声图');
subplot(132);imshow(f11);title('图5.2 4*4滤波器滤过的图');
subplot(133);imshow(f12);title('图5.3 8*8滤波器滤过的图');
%2. 顺序滤波
f21=ordfilt2(g,4,ones(4,4));%即在4*4的矩阵中将值按照由大到小排序,选取第五个值
f22=ordfilt2(g,9,ones(4,4));%第九个值
figure(5);
subplot(131);imshow(g);title('图6.1 噪声原图 ');
subplot(132);imshow(f21);title('图6.2 3*3的滤波器第四大');
subplot(133);imshow(f22);title('图6.3 3*3的滤波器第九大');
%3. 维纳滤波
f31=wiener2(g,[4 4]);%4*4滤波器滤波
f33=wiener2(g,[15 15]);%15*15滤波器
figure(6);
subplot(131);imshow(g);title('图7.1 原图');
subplot(132);imshow(f31);title('图7.2 4*4维纳滤波器滤过的图');
subplot(133);imshow(f33);title('图7.3 15*15维纳滤波器滤过的图');%设计陷波滤波器(Notch filter)
M=60;
N=60;%大小为60*60的滤波器
n=3;%滤波器的尖峰程度/衰减速度
D0=5;%滤波器截止频率
H=ones(60,60);%生成一个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);               end
end %在给定的范围内生成两个中心为(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);    end
end%生成两个中心为(-10,10)(10,-10)的高通滤波器
H=H1.*H2;%将两个滤波器合成为一个有四个中心的高通滤波器J=ones(60,60);%生成一个矩阵
for u=1:60for v=1:60
J1(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%生成两个中心为(25,25)(25,10)的高通滤波器
end
for u=1:60for v=1:60
J2(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
J=J1.*J2;%将生成的两个滤波器合成为一个带有四个高通滤波器的滤波器
figure(7);
subplot(1,2,1),mesh(H);title('图8.1 3*3的滤波器,3');
subplot(1,2,2),mesh(J);title('图8.2 3*3的滤波器,3');%研究空间滤波方法和噪声特征间的关系,利用spfilt函数举例说明所得结论
addpath('C:\PICTURE_YUWEI\dipum_toolbox_2.0.2');%添加.p文件
g1=imnoise(b,'gaussian',0,0.09);%加入均值为0,方差为0.09的高斯噪声
figure(8);
subplot(1,2,1);imshow(g1);title('图9.1 被高斯噪声污染的图像');
g2=spfilt(g1,'atrimmed',3,3,2);%滤波
subplot(1,2,2);imshow(g2);title('图9.2 滤波后的图像');%图像的空间变换
C=checkerboard(64,4,4);%在生成的图像中,每个正方形的大小是64*64
T1=[1 0.8 0;0 1 0;0 0 1];%x'=x+0.8y;y'=y
tform1=maketform('affine',T1);%根据T1创建tform,表示空间变化
C1=imtransform(C,tform1);%将原图进行反向映射
T2=[1 0 0;0.8 1 0;0 0 1];%x'=x;y'=y+0.8x
tform1=maketform('affine',T2);
C2=imtransform(C,tform1);
figure(9);
subplot(131);imshow(C);title('图10.1');
subplot(132);imshow(C2);title('图10.2');
subplot(133);imshow(C1);title('图10.3');
%第二部分:噪声估计部分的代码
c=imread('C:\PICTURE_YUWEI\Fig0704(Vase).tif.tif');
g=imnoise(c,'gaussian',0,0.1);%添加均值0 方差0.1的高斯噪声图像
B=roipoly(g);%在噪声图像中交互生成的ROI npix=sum(B(:));%求ROI区域的点数
figure(1);
subplot(2,2,1);
imshow(g);%显示被高斯噪声污染的图像
subplot(2,2,2);
imshow(B);%显示ROI区域 subplot(2,2,3);
h=imhist(c(B));%画出ROI区域的直方图
bar(h,1);
axis([0,256,0,1000]);
title('ROI区域的直方图');
[v,unv]=statmoments(h,2);%计算均值与方差;
subplot(2,2,4);
X=imnoise2('gaussian',npix,1,unv(1,1),sqrt(unv(1,2)));%生成与图片中有相同均值方差的高斯噪声
hist(X,140);%输出高斯噪声的直方图
axis([0,256,0,1000]);

[数图] 实验四 图像的滤波处理与图像空间变换相关推荐

  1. 数字图像处理实验四图像频域增强

    一.实验目的 (1)了解图像增强的目的及意义,加深对图像增强的感性认识,巩固所学的图像增强的理论知识和相关算法. (2)熟练掌握低通.高通.带通.同态滤波器的使用方法,明确不同性质的滤波器对图像的影响 ...

  2. [数图] 实验八 形态学图像处理

    一.实验目的 1.利用 MATLAB 研究二值形态学图像处理常用算法: 2.掌握 MATLAB 形态学图像处理基本操作函数的使用方法: 3.了解形态学的基本应用. 二.实验内容 1.编程实现二值图像的 ...

  3. [数图] 实验三 傅里叶变换及其应用

    一. 实验目的 1. 掌握二维 DFT 变换及其物理意义 2. 掌握二维 DFT 变换的 MATLAB 程序 3. 空间滤波及频域滤波 二. 实验内容 学习使用函数 fft2, ifft2, abs, ...

  4. 实验四 图像频域平滑与锐化(Python实现)

    一.实验目的与要求 了解频域变换过程,掌握频域变换特点 熟练掌握频域滤波中常用的平滑和锐化滤波器,能够对不同要求的图像进行滤波处理,体会并正确评价滤波效果,了解不同滤波方式的使用场合,能够从理论上作出 ...

  5. 数图实验1直方图均衡化c语言,直方图均衡化

    直方图均衡化Tag内容描述: 1.直方图均衡化的matlab实现 海南大学课程论文课程名称:数字图像处理 题目名称:直方图均衡化的matlab实现 学 院:信息科学技术学院 专业班级:2010级计算机 ...

  6. 20计算机数电实验四--编译器的门级建模

    一 实验过程 第一步:打开Quartus II新建一个工程文件路径如图(新建一个与项目名称相同的文件) 第二步:点击file 新建,对话框中选择 Verilog HDL File 第三步:输入代码 m ...

  7. opencv-python数图实验(三)膨胀腐蚀、击中

    1.基础实验部分 1. 了解膨胀.腐蚀原理 2. 了解开运算.闭运算原理 3. 掌握膨胀.腐蚀函数的使用 4. 掌握开运算.闭运算函数的使用 实现效果 开运算.闭运算 腐蚀.膨胀 二.思考题 2.1: ...

  8. 数电实验四-触发器(Multisim和Basys3)

    特别说明:该系列内容均是本人实验记录,无盗取侵权之嫌,仅供参考,请多动手实践! 一.实验目的 详见报告 二.实验仪器 1.数字电路实验箱 2.器材 三.实验内容详解 1.基本RS触发器逻辑功能的测试 ...

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

    目录 1.Objectives: 2.Experiment Content: 3.Experiment Principle: 4.Experiment Steps Result and Conlusi ...

  10. java用十字链表实现无向图_实验四:图的实现与应用

    20162317袁逸灏 实验四:图的实现与应用 实验内容 用 邻接矩阵 十字链表 实现无向图中的 添加结点 删除结点 添加边 删除边 size() isEmpty() 广度优先迭代器 深度优先迭代器 ...

最新文章

  1. 程序员提升编程效率的十五点建议!
  2. 专访阿里云MVP王俊杰:开发者的超能力是用技术让世界更美好
  3. Linux下FTP服务器搭建
  4. halcon知识:圆度和紧凑度
  5. payara 创建 集群_Apache Payara:让我们加密
  6. 机器学习之支持向量机(SVM)总结
  7. 如何解决Macbook pro无法写入U盘的问题
  8. data:image/png;base64
  9. 基于scikit-learn的随机森林调参实战
  10. 用Redis实现分布式锁 与 实现任务队列【转载】
  11. java创建集合有的不用泛型_Java如何创建泛型集合?
  12. DCMI 接口DMA 传送数据问题
  13. 智商情商哪个重要_你认为哪个更重要,情商还是智商?为什么?
  14. 【Proteus】动态数码管显示
  15. 服务器上的文件夹设置ftp,设置ftp服务器上传文件夹
  16. python中算术位移运算
  17. 如何学习自然语言处理:一本书和一门课
  18. C语言:计算阶乘和阶乘的和
  19. [Unity学习笔记:FPS游戏制作(1)]角色的移动,旋转与推进上升————(2021.6.13学习笔记)
  20. 路由器CFE-固件-NVRAM

热门文章

  1. 围棋的基本下法与规则
  2. win查看服务器主板型号,Win10怎么看电脑主板型号?
  3. (十二)c#Winform自定义控件-分页控件
  4. walking机器人入门教程-离线建图-cartographer算法建图
  5. 如何用ps将图片修改成指定大小
  6. [MATLAB] ks检验 混合von mises分布
  7. 淘宝/天猫API:item_search_similar-搜索相似的商品
  8. winform高仿腾讯QQ2013,几十个界面哦!!
  9. 结对项目—地铁出行路线规划
  10. 实现memcmp函数