【实验目的】
1、理解并掌握线性平滑滤波原理。
2、理解并掌握非线性锐化滤波技术原理。
【实验内容】
1. 线性平滑滤波的应用。
2. 非线性锐化滤波技术的应用。
【实验原理】
1、线性平滑滤波原理。
线性滤波器的原始数据与滤波结果是一种算术运算,即用加减乘除等运算实现,如均值滤波器(模板内像素灰度值的平均值)、高斯滤波器(高斯加权平均值)等。由于线性滤波器是算术运算,有固定的模板,因此滤波器的转移函数是可以确定并且是唯一的(转移函数即模板的傅里叶变换)。输出图像fo(x,y)= T[ fi(x,y) ],T是线性算子,即:输出图像上每个像素点的值都是由输入图像各像素点值加权求和的结果。
2、非线性锐化滤波技术原理。
非线性滤波器的原始数据与滤波结果是一种逻辑关系,即用逻辑运算实现,如最大值滤波器、最小值滤波器、中值滤波器等,是通过比较一定邻域内的灰度值大小来实现的,没有固定的模板,因而也就没有特定的转移函数(因为没有模板作傅里叶变换),另外,膨胀和腐蚀也是通过最大值、最小值滤波器实现的。非线性滤波的算子中包含了取绝对值、置零等非线性运算。
【实验代码】
1. 线性平滑滤波的应用:
1)邻域平均法
a)邻域平均法原理示例
close all
clear
clc
% % -- 设置图片和坐标轴的属性 -------------------------------------------------
% fs = 7.5; % FontSize : 五号:10.5磅,小五号:9磅,六号:7.5磅
% ms = 5; % MarkerSize: 五号:10.5磅,小五号:9磅,六号:7.5磅
% set(gcf,'Units','centimeters','Position',[25 11 6 4.5]); % 设置图片的位置和大小[left bottom width height],width:height=4:3
% set(gca,'FontName','宋体','FontSize',fs); % 设置坐标轴(刻度、标签和图例)的字体和字号
% set(gca,'Position',[.12 .11 .83 .77]); % 设置坐标轴所在的矩形区域在图片中的位置[left bottom width height]
Fxy = [ 0 20 40 70
80 100 120 150
160 180 200 230]
uint8Fxy = uint8(Fxy)
subplot(2,2,1),imshow(uint8Fxy),xlabel('(b) 原始图像');
subplot(2,2,2),imhist(uint8Fxy), axis([0,255,0,1]),xlabel('(c) 原始图像灰度统计直方图','position',[120,-0.23]);
text(255,-0.17,'\itk','FontName','Times New Roman');
text(-70,1,'{\itH}({\itk})','FontName','Times New Roman');
Gxy = filter2(fspecial('average',3), uint8Fxy)
uint8Gxy = uint8(Gxy)
subplot(2,2,3),imshow(uint8Gxy),xlabel('(g) 变换图像');
subplot(2,2,4),imhist(uint8Gxy), axis([0,255,0,1]),xlabel('(h) 变换图像灰度统计直方图','position',[120,-0.23]);
text(255,-0.17,'\itk','FontName','Times New Roman');
text(-70,1,'{\itH}({\itk})','FontName','Times New Roman');
b) 邻域平均法实现消除噪声
close all
clear
clc
I=imread('eight.tif');
subplot(2,3,1),imshow(I),xlabel('(a) 原始图像');
J=imnoise(I,'salt & pepper',0.04);
subplot(2,3,2),imshow(J),xlabel('(b) 噪声图像');
K1=filter2(fspecial('average',3),J);
subplot(2,3,3),imshow(uint8(K1)),xlabel('(c) 3*3模板均值滤波');
K2=filter2(fspecial('average',5),J);
subplot(2,3,4),imshow(uint8(K2)),xlabel('(d) 5*5模板均值滤波');
mask1=[0 1 0
1 0 1
0 1 0];
mask1=(1/4)*mask1;
K3=filter2(mask1,J);
subplot(2,3,5),imshow(uint8(K3)),xlabel('(e) 4邻域模板均值滤波');
mask2=[1 1 1
1 0 1
1 1 1];
mask2=(1/8)*mask2;
K4=filter2(mask2,J);
subplot(2,3,6),imshow(uint8(K4)),xlabel('(f) 8邻域模板均值滤波');
2)Wiener滤波
a)Wiener滤波示例
% F5_14.m
close all
clear
clc
I=imread('eight.tif');
subplot(2,3,1),imshow(I),xlabel('(a) 原始图像');
% imwrite(I,'.\F5_14a.bmp');
J=imnoise(I,'salt & pepper',0.04);
subplot(2,3,2),imshow(J),xlabel('(b) 噪声图像');
% imwrite(J,'.\F5_14b.bmp');
K1=wiener2(J,[3,3]);
subplot(2,3,3),imshow(uint8(K1)),xlabel('(c) 3*3Wiener滤波');
% imwrite(K1,'.\F5_14c.bmp');
K2=wiener2(J,[5,5]);
subplot(2,3,4),imshow(uint8(K2)),xlabel('(d) 5*5Wiener滤波');
% imwrite(K2,'.\F5_14d.bmp');
K3=wiener2(J,[7,7]);
subplot(2,3,5),imshow(uint8(K3)),xlabel('(e) 7*7Wiener滤波');
% imwrite(K3,'.\F5_14e.bmp');
K4=wiener2(J,[9,9]);
subplot(2,3,6),imshow(uint8(K4)),xlabel('(f) 9*9Wiener滤波');
% imwrite(K4,'.\F5_14f.bmp');
2. 非线性锐化滤波技术的应用:
1)梯度法
a)梯度法示例
% F5_30.m
close all
clear
clc
I=imread('lena.bmp');
subplot(2,3,1),imshow(I),xlabel('(a) 原始图像');
% imwrite(I,'.\F5_30a.bmp');
I=double(I);
[Gx,Gy]=gradient(I);
G=sqrt(Gx.*Gx+Gy.*Gy);
J1=G;
subplot(2,3,2),imshow(uint8(J1)),xlabel('(b) 梯度法滤波图像');
% imwrite(uint8(J1),'.\F5_30b.bmp');
J2=I;
K=find(G>=7);
J2(K)=G(K);
subplot(2,3,3),imshow(uint8(J2)),xlabel('(c) 第一种情况滤波图像');
% imwrite(uint8(J2),'.\F5_30c.bmp');
J3=I;
K=find(G>=7);
J3(K)=255;
subplot(2,3,4),imshow(uint8(J3)),xlabel('(d) 第二种情况滤波图像');
% imwrite(uint8(J3),'.\F5_30d.bmp');
J4=G;
K=find(G<=7);
J4(K)=255;
subplot(2,3,5),imshow(uint8(J4)),xlabel('(e) 第三种情况滤波图像');
% imwrite(uint8(J4),'.\F5_30e.bmp');
J5=I;
K=find(G<=7);
J5(K)=0;
Q=find(G>=7);
J5(Q)=255;
subplot(2,3,6),imshow(uint8(J5)),xlabel('(f) 第四种情况滤波图像');
% imwrite(uint8(J5),'.\F5_30f.bmp');
2)Prewitt算子
a)Prewitt算子原理示例
% F5_33.m
close all
clear
clc
im=imread('F5_33.bmp');
subplot(1,3,1),imshow(im),xlabel('(a) 原始图像');
% imwrite(im,'.\F5_33a.bmp');
dim = size(size(im));
if ~(dim(2)==2)
I = rgb2gray(im);
end
MaskPrewittV = fspecial('prewitt')
MaskPrewittH = MaskPrewittV'
KB1=filter2(MaskPrewittH,I);
subplot(1,3,2),imshow(uint8(KB1)),xlabel('(b) 水平模板滤波图像');
% imwrite(uint8(KB1),'.\F5_33b.bmp');
KB2 = filter2(MaskPrewittV,I);
subplot(1,3,3),imshow(uint8(KB2)),xlabel('(c) 垂直模板滤波图像');
% imwrite(uint8(KB2),'.\F5_33c.bmp');
b) Prewitt算子示例
% F5_34.m
close all
clear
clc
I=imread('lena.bmp');
subplot(3,3,2),imshow(I),xlabel('(a) 原始图像');
% imwrite(I,'.\F5_34a.bmp');
MaskPrewittV=fspecial('prewitt')
MaskPrewittH=MaskPrewittV'
KB1=filter2(MaskPrewittH,I);
subplot(3,3,4),imshow(uint8(KB1)),xlabel('(b) 水平模板滤波图像');
% imwrite(uint8(KB2),'.\F5_34b.bmp');
subplot(3,3,5),imshow(uint8(double(I)+KB1)),xlabel('(c) 水平模板加法叠加图像');
% imwrite(uint8(double(I)+KB2),'.\F5_34c.bmp');
subplot(3,3,6),imshow(uint8(double(I)-KB1)),xlabel('(d) 水平模板减法叠加图像');
% imwrite(uint8(double(I)-KB2),'.\F5_34d.bmp');
KB2=filter2(MaskPrewittV,I);
subplot(3,3,7),imshow(uint8(KB2)),xlabel('(e) 垂直模板滤波图像');
% imwrite(uint8(KB1),'.\F5_34e.bmp');
subplot(3,3,8),imshow(uint8(double(I)+KB2)),xlabel('(f) 垂直模板加法叠加图像');
% imwrite(uint8(double(I)+KB1),'.\F5_34f.bmp');
subplot(3,3,9),imshow(uint8(double(I)-KB2)),xlabel('(g) 垂直模板减法叠加图像');
% imwrite(uint8(double(I)-KB1),'.\F5_34g.bmp');
3)Log算子
a)Log算子示例
% F5_39.m
close all
clear
clc
I=imread('liftingbody.png');
subplot(2,2,1),imshow(I),xlabel('(a) 原始图像');
% imwrite(I,'.\F5_39a.bmp');
MaskLog=fspecial('log')
KB=filter2(MaskLog,I);
subplot(2,2,2),imshow(uint8(KB)),xlabel('(b) 滤波图像');
% imwrite(uint8(KB),'.\F5_39b.bmp');
subplot(2,2,3),imshow(uint8(double(I)+KB)),xlabel('(c) 加法叠加图像');
% imwrite(uint8(double(I)+KB),'.\F5_39c.bmp');
subplot(2,2,4),imshow(uint8(double(I)-KB)),xlabel('(d) 减法叠加图像');
% imwrite(uint8(double(I)-KB),'.\F5_39d.bmp');
【实验结果】
1. 线性平滑滤波的应用:
1)邻域平均法
a)邻域平均法原理示例
b) 邻域平均法实现消除噪声
2)Wiener滤波
a)Wiener滤波示例
2. 非线性锐化滤波技术的应用:
1)梯度法
a)梯度法示例
2)Prewitt算子
a)Prewitt算子原理示例
b) Prewitt算子示例
3)Log算子
a)Log算子示例
【实验心得】
通过本次实验理解并掌握线性平滑滤波原理,同时理解并掌握非线性锐化滤波技术原理。
通过书籍对实验原理进行理解,按照题目要求实现算法。通过上机实践,对理论知识进行巩固复习,也对图像处理有了更深的理解,激发了我的学习兴趣,在今后继续努力。