一、实验目的
了解图像平滑滤波器(均值滤波和中值滤波)和图像锐化算子(Sobel算子、Prewitt算子、Laplacian算子)在工程领域中的应用;理解图像平滑滤波器和图像锐化算子的工程应用范围;掌握图像平滑滤波器和图像锐化算子的常用算法原理;熟悉图像中常见的几种噪声模型(高斯噪声、脉冲噪声、指数噪声、瑞利噪声);根据任务要求选择图像空域增强算法并编程实现。了解几种不同滤波方式的使用和使用的场合,培养处理实际图像的能力,并为课堂教学提供配套的实践机会。
二、实验内容:
(1) 学生应当完成对于给定图像+噪声,使用平均滤波器、中值滤波器对不同强度的高斯噪声和椒盐噪声,进行(平滑)滤波处理;能够正确地评价处理的结果;能够从理论上作出合理的解释。
利用MATLAB软件实现空域滤波的程序:
示例:
a) 调入并显示原始图像。
b) 利用imnoise 命令在图像上加入高斯(gaussian) 噪声
c)利用预定义函数fspecial 命令产生平均(average)滤波器
d)分别采用3x3和5x5的模板,分别用平均滤波器以及中值滤波器,对加入噪声的图像进行处理并观察不同噪声水平下,上述滤波器处理的结果;
e)选择不同大小的模板,对加入某一固定噪声水平噪声的图像进行处理,观察上述滤波器处理的结果。
f)利用imnoise 命令在图像上加入椒盐噪声(salt & pepper)
g)重复c)~ e)的步骤
h)输出全部结果并进行讨论。
I=imread('Lenna.jpg');
J = imnoise(I,'gauss',0.02); %添加高斯噪声
J = imnoise(I,'salt & pepper',0.02); %添加椒盐噪声
ave1=fspecial('average',3); %产生3×3的均值模版
ave2=fspecial('average',5); %产生5×5的均值模版
K = filter2(ave1,J)/255; %均值滤波3×3
L = filter2(ave2,J)/255; %均值滤波5×5
M = medfilt2(J,[3 3]); %中值滤波3×3模板
N = medfilt2(J,[4 4]); %中值滤波4×4模板
figure,imshow(I);
figure,imshow(J);
figure,imshow(K);
figure,imshow(L);
figure,imshow(M);
figure,imshow(N);
(2) 学生对于给定图像,可以采用一阶梯度算子(‘prewitt’、’sobel’),二阶拉普拉斯算子进行锐化滤波处理;能够正确地评价处理的结果;能够从理论上作出合理的解释。
(3) 自行设计滤波器算子,验证图像滤波结果。
(4) 对比采用imfilter函数或某种卷积运算时边界选项,如’replicate’,’symmetric’,’circular’的影响。
(5) 有余力的同学可根据指导书的知识点进行相关验证实验(非必须项)。
三.实验程序、实验结果与实验分析:
1.实验程序
% 读取图像
I = imread('Lenna.jpg');
I = rgb2gray(I); % 转换为灰度图像以简化处理
figure;subplot(1, 3, 1);imshow(I);title('原始图像');
% 添加高斯噪声
J_gauss = imnoise(I,'gaussian',0.02); % 第二个参数为均值,第三个参数为方差
subplot(1, 3, 2);imshow(J_gauss);title('添加高斯噪声后的图像');
% 添加椒盐噪声
J_saltpepper = imnoise(I,'salt & pepper',0.02);
subplot(1, 3, 3);imshow(J_saltpepper);title('添加椒盐噪声后的图像');
% 创建滤波器
ave1 = fspecial('average',3);
ave2 = fspecial('average',5);
% 对高斯噪声图像进行滤波
K_gauss = filter2(ave1,J_gauss)/255; %均值滤波3×3
L_gauss= filter2(ave2,J_gauss)/255; %均值滤波5×5
M_gauss = medfilt2(J_gauss,[3 3]); %中值滤波3×3模板
N_gauss = medfilt2(J_gauss,[5 5]); %中值滤波5×5模板
% 对椒盐噪声图像进行滤波
K_saltpepper = filter2(ave1,J_saltpepper)/255;
L_saltpepper = filter2(ave2,J_saltpepper)/255;
M_saltpepper = medfilt2(J_saltpepper,[3 3]);
N_saltpepper = medfilt2(J_saltpepper,[5 5]);
figure;
subplot(2, 4, 1);imshow(K_gauss);title('高斯噪声 - 3x3 平均滤波');
subplot(2, 4, 2);imshow(L_gauss);title('高斯噪声 - 5x5 平均滤波');
subplot(2, 4, 3);imshow(M_gauss);title('高斯噪声 - 3x3 中值滤波');
subplot(2, 4, 4);imshow(N_gauss);title('高斯噪声 - 5x5 中值滤波');
subplot(2, 4, 5);imshow(K_saltpepper);title('椒盐噪声 - 3x3 平均滤波');
subplot(2, 4, 6);imshow(L_saltpepper);title('椒盐噪声 - 5x5 平均滤波');
subplot(2, 4, 7);imshow(M_saltpepper);title('椒盐噪声 - 3x3 中值滤波');
subplot(2, 4, 8);imshow(N_saltpepper);title('椒盐噪声 - 5x5 中值滤波');
% 锐化滤波
prewitt_x = fspecial('prewitt');
prewitt_y = prewitt_x'; % Prewitt滤波器的y方向等于x方向的转置
sobel_x = fspecial('sobel');
sobel_y = sobel_x'; % Sobel滤波器的y方向等于x方向的转置
laplacian = fspecial('laplacian', 0.5);
% 应用锐化滤波器
sharp_prewitt = imfilter(double(I), prewitt_x, 'replicate') + imfilter(double(I), prewitt_y, 'replicate');
sharp_sobel = imfilter(double(I), sobel_x, 'replicate') + imfilter(double(I), sobel_y, 'replicate');
sharp_laplacian = imfilter(double(I), laplacian, 'replicate');
% 显示锐化结果
figure;
subplot(1, 3, 1);imshow(mat2gray(sharp_prewitt));title('Prewitt锐化');
subplot(1, 3, 2);imshow(mat2gray(sharp_sobel));title('Sobel锐化');
subplot(1, 3, 3);imshow(mat2gray(sharp_laplacian));title('Laplacian锐化');
% 自定义滤波器
custom_filter = ones(3, 3) / 9;
sharp_custom = imfilter(double(I), custom_filter,'replicate');
% 显示自定义滤波器结果
figure;imshow(mat2gray(sharp_custom));title('自定义滤波器滤波结果');
% 对高斯噪声图像进行滤波
K_gauss_replicate = imfilter(J_gauss, ave1, 'replicate');
K_gauss_symmetric = imfilter(J_gauss, ave1, 'symmetric');
K_gauss_circular = imfilter(J_gauss, ave1, 'circular');
figure;subplot(1, 3, 1);imshow(K_gauss_replicate);
title('高斯噪声 - 3x3 平均滤波 - replicate');
subplot(1, 3, 2);imshow(K_gauss_symmetric);
title('高斯噪声 - 3x3 平均滤波 - symmetric');
subplot(1, 3, 3);imshow(K_gauss_circular);
title('高斯噪声 - 3x3 平均滤波 - circular');
2.实验结果
(1)为图像分别加入高斯噪声、椒盐噪声
(2)分别采用3x3和5x5的模板,分别用平均滤波器以及中值滤波器,对加入噪声的图像进行处理并观察不同噪声水平下,上述滤波器处理的结果;
(3)一阶梯度算子(‘prewitt’、’sobel’),二阶拉普拉斯算子进行锐化滤波处理结果
(4)使用自定义滤波器算子进行滤波
(5)采用imfilter函时边界选项,’replicate’,’symmetric’,’circular’的影响。
3.实验分析
(1)读取名为"Lenna.jpg"的彩色图像,并将其转换为灰度图像
I = imread('Lenna.jpg');
I = rgb2gray(I); % 转换为灰度图像以简化处理
(2)添加高斯噪声和添加椒盐噪声。
J_gauss = imnoise(I,'gaussian',0.02);
J_saltpepper = imnoise(I,'salt & pepper',0.02);
(3)创建了两个平均滤波器(3x3和5x5)
ave1 = fspecial('average',3);
ave2 = fspecial('average',5);
(4)对添加了高斯噪声的图像和添加了椒盐噪声的图像分别应用了这些滤波器
% 对高斯噪声图像进行滤波
K_gauss = filter2(ave1,J_gauss)/255; 3
L_gauss= filter2(ave2,J_gauss)/255;
M_gauss = medfilt2(J_gauss,[3 3]);
N_gauss = medfilt2(J_gauss,[5 5]);
% 对椒盐噪声图像进行滤波
K_saltpepper = filter2(ave1,J_saltpepper)/255;
L_saltpepper = filter2(ave2,J_saltpepper)/255;
M_saltpepper = medfilt2(J_saltpepper,[3 3]);
N_saltpepper = medfilt2(J_saltpepper,[5 5]);
(5)使用Prewitt、Sobel和Laplacian滤波器进行图像的锐化
% 锐化滤波
prewitt_x = fspecial('prewitt');
prewitt_y = prewitt_x';
sobel_x = fspecial('sobel');
sobel_y = sobel_x';
laplacian = fspecial('laplacian', 0.5);
% 应用锐化滤波器
sharp_prewitt = imfilter(double(I), prewitt_x, 'replicate') + imfilter(double(I), prewitt_y, 'replicate');
sharp_sobel = imfilter(double(I), sobel_x, 'replicate') + imfilter(double(I), sobel_y, 'replicate');
sharp_laplacian = imfilter(double(I), laplacian, 'replicate');
(6)自定义一个3x3的均值滤波器对图像进行滤波
custom_filter = ones(3, 3) / 9;
sharp_custom = imfilter(double(I), custom_filter,'replicate');
% 显示自定义滤波器结果
figure;imshow(mat2gray(sharp_custom));title('自定义滤波器滤波结果');
(7)对添加了高斯噪声的图像分别应用3种不同的边界填充方式(replicate、symmetric、circular)的3x3平均滤波器
K_gauss_replicate = imfilter(J_gauss, ave1, 'replicate');
K_gauss_symmetric = imfilter(J_gauss, ave1, 'symmetric');
K_gauss_circular = imfilter(J_gauss, ave1, 'circular');
四.思考题
1. 简述高斯噪声和椒盐噪声的特点。
答:(1)高斯噪声(Gaussian Noise):
高斯噪声是一种概率密度函数服从高斯分布(即正态分布)的噪声。在时域和频域中,高斯噪声都有均匀的分布特性。高斯噪声在图像上表现为像素值随机波动,但波动范围通常较小,且在整个图像上分布较为均匀。
(2)椒盐噪声(Salt and Pepper Noise):
椒盐噪声也称为脉冲噪声,它随机改变一些像素值。椒盐噪声由两种噪声组成,一种是盐噪声(salt noise),即图像中随机出现的白色点;另一种是椒噪声(pepper noise),即图像中随机出现的黑色点。椒盐噪声通常是由图像传感器、传输信道或解码处理等过程中产生的错误或损坏引起的。在视觉上,椒盐噪声表现为图像上的黑白亮点,这些点随机分布在图像中,可能破坏图像的细节信息。
2. 结合实验内容,定性评价平均滤波器/中值滤波器对高斯噪声和椒盐噪声的去噪效果?
答:(1)平均滤波器对高斯噪声的去噪效果评价:
平均滤波器的基本原理是对图像中每个像素周围的邻域进行均值计算,对于轻度的高斯噪声,平均滤波器可以有效地模糊图像并减少噪声。然而,对于较强的高斯噪声,平均滤波器可能导致图像细节的丢失和模糊。
(2)中值滤波器对高斯噪声的去噪效果评价:
中值滤波器采用每个像素周围邻域的中值来替代像素值,这使得它对高斯噪声有很好的去噪效果,中值滤波器能够在保留图像边缘和细节的同时有效地去除高斯噪声。它对于不同尺度和强度的高斯噪声都能提供相对较好的去噪效果。
(3)平均滤波器对椒盐噪声的去噪效果评价:
平均滤波器在处理椒盐噪声时表现一般。由于椒盐噪声将一些像素值替换为最大或最小值,平均滤波器导致图像中出现模糊和残留的噪点。
(4)中值滤波器对椒盐噪声的去噪效果评价:
中值滤波器对椒盐噪声有较好的去噪效果。通过取邻域中像素的中值,中值滤波器可以有效地去除椒盐噪声,而不会对图像边缘和细节产生明显的影响。
3. 结合实验内容,定性评价滤波窗口对去噪效果的影响?
对于平均滤波器和中值滤波器,滤波窗口的大小会直接影响去噪效果。较小的滤波窗口适用于轻度噪声和保留图像细节,但可能不能完全去除强烈的噪声。较大的滤波窗口能够更有效地去除强烈的噪声,但可能会导致图像模糊和细节丢失。