1. 图像去噪技术概述
图像去噪是数字图像处理中最基础也是最重要的任务之一。在实际应用中,无论是医学影像、卫星遥感还是日常摄影,图像都会受到各种噪声的干扰。噪声的存在不仅影响视觉效果,更会降低后续图像分析、识别的准确性。
1.1 噪声类型与特性
常见的图像噪声主要分为以下几类:
-
高斯噪声:又称正态噪声,特点是噪声值服从正态分布。这种噪声在电子设备中最为常见,主要来源于传感器电路的热噪声和散粒噪声。其概率密度函数为:
[
p(z) = \frac{1}{\sqrt{2\pi}\sigma}e^{-(z-\mu)^2/2\sigma^2}
]其中μ为均值,σ为标准差。
-
椒盐噪声:表现为图像中随机出现的黑白像素点,就像撒了胡椒和盐粒一样。这种噪声通常由图像传感器故障或传输错误引起。其特点是噪声点与周围像素差异极大。
-
泊松噪声:又称散粒噪声,主要出现在低光照条件下,噪声强度与信号强度相关,常见于光子计数设备。
-
乘性噪声:如斑点噪声,常见于雷达和超声成像系统,噪声与信号强度成正比。
1.2 去噪方法分类
根据处理域的不同,图像去噪方法可分为:
-
空间域方法:直接在像素值上进行操作
- 均值滤波
- 中值滤波
- 高斯滤波
- 双边滤波
-
变换域方法:将图像转换到其他域进行处理
- 小波变换去噪
- 傅里叶变换去噪
- DCT变换去噪
-
基于学习的方法:
- 传统机器学习方法
- 深度学习方法(如DnCNN、U-Net等)
提示:在实际应用中,往往需要根据噪声类型和图像特性选择合适的方法或组合多种方法。例如,对于同时含有高斯噪声和椒盐噪声的图像,可以先使用中值滤波去除椒盐噪声,再用小波变换处理高斯噪声。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 经典空间域去噪方法实现
2.1 均值滤波原理与实现
均值滤波是最简单的线性滤波方法,其核心思想是用邻域像素的平均值替代中心像素值。这种方法对高斯噪声有较好的平滑效果。
数学表达式:
对于图像I中位置(x,y)的像素,滤波后值Î(x,y)为:
[
Î(x,y) = \frac{1}{N} \sum_{i=-k}^{k} \sum_{j=-k}^{k} I(x+i, y+j)
]
其中N是邻域窗口内的像素总数(如3×3窗口N=9),k为滤波半径。
MATLAB实现:
matlab复制function denoised_img = mean_filter(img, window_size)
% 输入参数:
% img: 输入噪声图像
% window_size: 滤波窗口大小,如3表示3×3窗口
% 添加边界填充
pad_size = floor(window_size/2);
padded_img = padarray(img, [pad_size pad_size], 'symmetric');
% 初始化输出图像
denoised_img = zeros(size(img));
% 创建均值滤波核
kernel = ones(window_size) / (window_size^2);
% 应用滤波
for i = 1:size(img,1)
for j = 1:size(img,2)
neighborhood = padded_img(i:i+window_size-1, j:j+window_size-1);
denoised_img(i,j) = sum(sum(neighborhood .* kernel));
end
end
% 转换为与原图相同的数据类型
denoised_img = cast(denoised_img, class(img));
end
特点与注意事项:
- 优点:计算简单,实现容易
- 缺点:导致边缘模糊,丢失细节
- 窗口大小选择:通常3×3或5×5,过大窗口会加剧模糊
- 边界处理:常用对称填充或复制填充
2.2 中值滤波原理与实现
中值滤波是一种非线性滤波方法,用邻域像素的中值替代中心像素值,对椒盐噪声特别有效。
数学表达式:
[
Î(x,y) = \text{median} { I(x+i, y+j) }, \quad i,j \in [-k, k]
]
MATLAB实现:
matlab复制function denoised_img = median_filter(img
