【实战演练】基于Matlab的图像去噪算法:高斯滤波、均值滤波、中值滤波和双边滤波
发布时间: 2024-05-21 19:25:38 阅读量: 142 订阅数: 213
# 2.1 高斯滤波原理
高斯滤波是一种线性平滑滤波器,它使用高斯函数作为滤波核。高斯函数是一个钟形曲线,其中心值最大,向两侧逐渐衰减。高斯滤波的原理是将高斯函数与图像卷积,从而对图像中的每个像素进行加权平均。
高斯函数的表达式为:
```
G(x, y) = (1 / (2πσ^2)) * exp(-(x^2 + y^2) / (2σ^2))
```
其中,σ 是高斯函数的标准差,控制着滤波器的平滑程度。σ 越大,滤波器越平滑,图像中的噪声去除得越多,但细节也丢失得越多。
# 2. 高斯滤波
### 2.1 高斯滤波原理
高斯滤波是一种线性平滑滤波器,它使用高斯函数作为滤波器核。高斯函数是一个钟形曲线,其形状由标准差σ控制。标准差越大,曲线越平缓,滤波效果越强。
高斯滤波的数学公式如下:
```
G(x, y) = (1 / (2πσ^2)) * exp(-(x^2 + y^2) / (2σ^2))
```
其中,(x, y) 是像素坐标,σ 是标准差。
### 2.2 高斯滤波实现
#### 2.2.1 Matlab中的高斯滤波函数
Matlab 中提供了 `imgaussfilt` 函数进行高斯滤波。该函数的语法如下:
```
B = imgaussfilt(A, sigma)
```
其中,`A` 是输入图像,`sigma` 是标准差。
#### 2.2.2 高斯滤波参数设置
高斯滤波的参数设置主要包括标准差 `sigma`。标准差越大,滤波效果越强,但也会导致图像模糊。一般情况下,建议将标准差设置为图像中噪声的估计值。
```
% 原始图像
I = imread('noisy_image.png');
% 设置标准差
sigma = 2;
% 进行高斯滤波
J = imgaussfilt(I, sigma);
% 显示原始图像和去噪图像
subplot(1, 2, 1);
imshow(I);
title('原始图像');
subplot(1, 2, 2);
imshow(J);
title('高斯滤波后图像');
```
**代码逻辑分析:**
* `imread('noisy_image.png')`:读取噪声图像。
* `sigma = 2`:设置标准差为 2。
* `J = imgaussfilt(I, sigma)`:对图像 `I` 进行高斯滤波,结果存储在 `J` 中。
* `subplot(1, 2, 1)`:创建第一个子图,用于显示原始图像。
* `imshow(I)`:显示原始图像。
* `title('原始图像')`:设置子图标题。
* `subplot(1, 2, 2)`:创建第二个子图,用于显示去噪图像。
* `imshow(J)`:显示去噪图像。
* `title('高斯滤波后图像')`:设置子图标题。
**参数说明:**
* `sigma`:高斯函数的标准差,控制滤波效果。
**代码扩展:**
```
% 不同标准差下的高斯滤波效果对比
sigma_values = [1, 2, 4, 8];
for i = 1:length(sigma_values)
sigma = sigma_values(i);
J = imgaussfilt(I, sigma);
subplot(2, 2, i);
imshow(J);
title(['标准差 = ' num2str(sigma)]);
end
```
**代码逻辑分析:**
* `sigma_values = [1, 2, 4, 8]`:定义不同标准差的值。
* `for i = 1:length(sigma_values)`:遍历标准差值。
* `sigma = sigma_values(i)`:设置当前标准差。
* `J = imgaussfilt(I, sigma)`:对图像 `I` 进行高斯滤波,结果存储在 `J` 中。
* `subplot(2, 2, i)`:创建子图,用于显示当前标准差下的去噪图像。
* `imshow(J)`:显示去噪图像。
* `title(['标准差 = ' num2str(sigma)])`:设置子图标题,显示当前标准差。
**参数说明:**
* `sigma_values`:不同标准差的值。
# 3. 均值滤波
### 3.1 均值滤波原理
均值滤波是一种非线性滤波技术,它通过计算图像中某个像素周围邻域像素的平均值来替换该像素的值。其主要原理如下:
1. **定义邻域窗口:**对于图像中的每个像素,定义一个固定大小的邻域窗口,通常为方形或圆形。
2. **计算邻域平均值:**对于每个像素,计算其邻域窗口内所有像素值的平均值。
3.
0
0