自编matlab双边滤波器和均值滤波器
时间: 2023-10-16 07:31:34 浏览: 80
matlab实现均值滤波和中值滤波(自编写源码)
双边滤波器和均值滤波器都是常见的图像滤波器,下面分别介绍如何在 MATLAB 中自编这两种滤波器。
1. 双边滤波器
双边滤波器是一种非线性滤波器,它可以保留图像的边缘信息,同时去除噪声。在 MATLAB 中,我们可以使用 `bfilter2` 函数来实现双边滤波器。该函数需要输入原始图像、滤波器的半径和两个标准差参数。以下是一个简单的双边滤波器的代码示例:
```
% 读取原始图像
img = imread('lena.png');
% 定义滤波器半径和标准差参数
w = 5;
sigma_r = 20;
sigma_d = 20;
% 实现双边滤波器
img_filtered = bfilter2(img, w, sigma_r, sigma_d);
% 显示原始图像和滤波后的图像
figure();
subplot(1, 2, 1);
imshow(img);
title('Original Image');
subplot(1, 2, 2);
imshow(img_filtered);
title('Filtered Image');
```
在上面的代码中,我们使用了 `imread` 函数读取了一张名为 `lena.png` 的图像。然后定义了滤波器的半径 `w` 和两个标准差参数 `sigma_r` 和 `sigma_d`。最后使用 `bfilter2` 函数实现了双边滤波器,并将滤波后的图像 `img_filtered` 显示出来。
2. 均值滤波器
均值滤波器是一种线性滤波器,它可以用于去除图像中的高斯噪声。在 MATLAB 中,我们可以使用 `fspecial` 函数创建一个均值滤波器的核,然后使用 `imfilter` 函数实现滤波操作。以下是一个简单的均值滤波器的代码示例:
```
% 读取原始图像
img = imread('lena.png');
% 创建均值滤波器的核
w = 5;
kernel = fspecial('average', [w w]);
% 实现均值滤波器
img_filtered = imfilter(img, kernel);
% 显示原始图像和滤波后的图像
figure();
subplot(1, 2, 1);
imshow(img);
title('Original Image');
subplot(1, 2, 2);
imshow(img_filtered);
title('Filtered Image');
```
在上面的代码中,我们同样使用了 `imread` 函数读取了一张名为 `lena.png` 的图像。然后使用 `fspecial` 函数创建了一个大小为 `w x w` 的均值滤波器的核。最后使用 `imfilter` 函数实现了均值滤波器,并将滤波后的图像 `img_filtered` 显示出来。
阅读全文