clear all; close all;
I = imread('coins.png');
I = im2double(I);
J = imnoise(I, 'salt & pepper', 0.02);
h1 = fspecial('average', 3);
h2 = fspecial('average', 5);
K1 = filter2(h1, J);
K2 = filter2(h2, J);
figure;
subplot(131);
imshow(J);
title('Salt & Pepper Noisy Image');
subplot(132);
imshow(K1);
title('Filtered Image with 3x3 Kernel');
subplot(133);
imshow(K2);
title('Filtered Image with 5x5 Kernel');
解释:
-
clear all; close all;
:清空工作空间中的所有变量并关闭所有图形窗口。 -
I = imread('coins.png');
:读取名为coins.png
的图像,并赋值给I
。 -
I = im2double(I);
:将图像I
的数据类型转换为双精度浮点数,以便进行后续处理。 -
J = imnoise(I, 'salt & pepper', 0.02);
:在图像I
上添加盐和胡椒噪声,噪声的比例为0.02。 -
h1 = fspecial('average', 3);
:使用fspecial
函数创建一个3x3的平均滤波器核h1
。 -
h2 = fspecial('average', 5);
:使用fspecial
函数创建一个5x5的平均滤波器核h2
。 -
K1 = filter2(h1, J);
:使用滤波器核h1
对噪声图像J
进行二维滤波,得到结果图像K1
。 -
K2 = filter2(h2, J);
:使用滤波器核h2
对噪声图像J
进行二维滤波,得到结果图像K2
。 -
figure;
:创建一个新的图形窗口。 -
subplot(131); imshow(J);
:在第一个子图(1,3,1)中显示添加了盐和胡椒噪声的图像J
。 -
subplot(132); imshow(K1);
:在第二个子图(1,3,2)中显示使用3x3核滤波后的图像K1
。 -
subplot(133); imshow(K2);
:在第三个子图(1,3,3)中显示使用5x5核滤波后的图像K2
。
拓展:
- 保存滤波后的图像:可以将滤波后的图像
K1
和K2
保存为文件。
% 保存滤波后的图像
imwrite(uint8(K1), 'coins_filtered_3x3.png');
imwrite(uint8(K2), 'coins_filtered_5x5.png');
-
分析不同核大小的影响:可以比较不同大小的滤波器核对图像噪声去除效果的影响。
-
尝试其他类型的滤波器:可以尝试使用其他类型的滤波器,如高斯滤波器、中值滤波器等,来比较不同的滤波效果。
-
计算滤波前后的图像质量:可以通过计算图像的峰值信噪比(PSNR)或其他图像质量指标来评估滤波效果。
-
创建交互式滤波器选择:可以创建一个交互式界面,允许用户选择不同的滤波器核并实时查看滤波效果。