这段 MATLAB 代码的主要功能是对一张 saturn.png
图片进行灰度化、裁剪、加噪声处理,并使用 维纳滤波(Wiener Filter) 来去噪,最后以对比方式展示加噪后的图像和去噪后的图像。
代码解析
clear all; close all;
clear all;
清除所有变量,释放工作区内存。close all;
关闭所有打开的图形窗口。
RGB = imread('saturn.png');
I = rgb2gray(RGB);
- 读取彩色图像
saturn.png
并存入RGB
。 - 使用
rgb2gray
将彩色图像转换为灰度图像I
。
I = imcrop(I, [100, 100, 1024, 1024]);
- 使用
imcrop
对灰度图像I
进行裁剪,裁剪区域的 起始点为 (100,100),大小为 1024×1024 像素。
J = imnoise(I, 'gaussian', 0, 0.03);
- 使用
imnoise
向图像I
添加 高斯噪声,均值为0
,方差为0.03
,得到加噪后的图像J
。
[K, noise] = wiener2(J, [5, 5]);
- 使用
wiener2
进行 维纳滤波 去噪,滤波窗口大小为5×5
。 K
为去噪后的图像,noise
为估计出的噪声方差图。
figure;
subplot(121); imshow(J);
subplot(122); imshow(K);
- 创建一个新的图像窗口。
subplot(121); imshow(J);
显示加噪后的图像J
。subplot(122); imshow(K);
显示去噪后的图像K
。
程序运行效果
-
原始图片 (
saturn.png
)- 先转换为灰度图像并裁剪。
-
加噪图像 (
J
)- 加入高斯噪声后,图像出现随机噪声点。
-
去噪图像 (
K
)- 经过 维纳滤波 处理后,噪声被抑制,图像质量改善。
改进建议
-
调整
wiener2
窗口大小5×5
窗口可能对某些细节处理不够精细,可尝试3×3
或7×7
进行对比。
[K, noise] = wiener2(J, [3, 3]);
-
使用
medfilt2
进行中值滤波medfilt2
对去除椒盐噪声更有效:
K_med = medfilt2(J, [3, 3]);
-
测试不同噪声强度
- 改变
imnoise
的方差值,例如0.01
、0.05
,观察维纳滤波效果。
- 改变
总结
- 代码主要完成 图像加噪 + 去噪处理。
- 维纳滤波 适用于 高斯噪声 去除,效果取决于窗口大小。
- 可以结合其他滤波方法(如均值滤波、中值滤波)来优化去噪效果。