matlab:设计一个中值滤波器 代码
时间: 2023-08-12 07:06:05 浏览: 98
好的,以下是 MATLAB 中设计中值滤波器的代码:
```matlab
% 读取图像
img = imread('lena.jpg');
% 设置滤波器大小
filter_size = 3;
% 对图像进行中值滤波
filtered_img = medfilt2(img, [filter_size filter_size]);
% 显示原始图像和滤波后的图像
subplot(1,2,1),imshow(img),title('Original Image');
subplot(1,2,2),imshow(filtered_img),title('Filtered Image');
```
在这个代码中,我们首先使用 `imread` 函数读取了一个名为 `lena.jpg` 的图像。接着,我们设置了滤波器的大小为 3x3,然后使用 `medfilt2` 函数对图像进行中值滤波。最后,我们使用 `subplot` 和 `imshow` 函数将原始图像和滤波后的图像显示在同一个窗口中。
相关问题
matlab:设计一个中值滤波器处理不同的噪声 代码
好的,以下是 MATLAB 中设计中值滤波器处理不同噪声的代码示例:
```matlab
% 读取图像
img = imread('lena.jpg');
% 添加椒盐噪声
img_salt_pepper = imnoise(img, 'salt & pepper', 0.05);
% 添加高斯噪声
img_gaussian = imnoise(img, 'gaussian', 0, 0.01);
% 设置滤波器大小
filter_size = 3;
% 对椒盐噪声图像进行中值滤波
filtered_img_salt_pepper = medfilt2(img_salt_pepper, [filter_size filter_size]);
% 对高斯噪声图像进行中值滤波
filtered_img_gaussian = medfilt2(img_gaussian, [filter_size filter_size]);
% 显示原始图像和处理后的图像
subplot(2,3,1),imshow(img),title('Original Image');
subplot(2,3,2),imshow(img_salt_pepper),title('Salt & Pepper Noise');
subplot(2,3,3),imshow(filtered_img_salt_pepper),title('Filtered Salt & Pepper');
subplot(2,3,5),imshow(img_gaussian),title('Gaussian Noise');
subplot(2,3,6),imshow(filtered_img_gaussian),title('Filtered Gaussian');
```
在这个代码中,我们首先使用 `imread` 函数读取了一个名为 `lena.jpg` 的图像。接着,我们分别添加了椒盐噪声和高斯噪声,并将它们存储在 `img_salt_pepper` 和 `img_gaussian` 变量中。然后,我们设置了滤波器的大小为 3x3,并使用 `medfilt2` 函数对椒盐噪声图像和高斯噪声图像进行中值滤波,并将其存储在 `filtered_img_salt_pepper` 和 `filtered_img_gaussian` 变量中。最后,我们使用 `subplot` 和 `imshow` 函数将原始图像、椒盐噪声图像、处理后的椒盐噪声图像、高斯噪声图像和处理后的高斯噪声图像显示在同一个窗口中。
MATLAB 设计一个中值滤波器
在 MATLAB 中,可以使用以下代码设计一个简单的中值滤波器,该滤波器可以对图像进行滤波并去除噪声。
```
function output_img = median_filter(input_img, filter_size)
% input_img: 输入图像
% filter_size: 滤波器大小(正方形)
% 获取图像大小
[m, n] = size(input_img);
% 初始化输出图像
output_img = zeros(m, n);
% 获取滤波器半径
r = floor(filter_size / 2);
% 对图像进行遍历和滤波
for i = r+1:m-r
for j = r+1:n-r
% 获取当前像素的邻域像素
neighborhood = input_img(i-r:i+r, j-r:j+r);
% 将邻域像素排序
sorted_neighborhood = sort(neighborhood(:));
% 取中间值作为当前像素的新值
output_img(i, j) = sorted_neighborhood(floor(length(sorted_neighborhood)/2)+1);
end
end
% 将输出图像转换为 uint8 类型
output_img = uint8(output_img);
end
```
在上述代码中,我们首先获取输入图像的大小,然后初始化输出图像为一个全零矩阵。接下来,我们对输入图像进行遍历和滤波,对于每个像素,我们获取其邻域像素并将其排序,然后取中间值作为当前像素的新值。最后,我们将输出图像转换为 uint8 类型并返回。
使用该中值滤波器的示例代码如下:
```
% 读取图像
img = imread('lena.jpg');
% 将图像转换为灰度图像
gray_img = rgb2gray(img);
% 添加高斯噪声
noisy_img = imnoise(gray_img, 'gaussian', 0, 0.01);
% 使用中值滤波器进行滤波
filtered_img = median_filter(noisy_img, 3);
% 显示原始图像、带噪声的图像和滤波后的图像
figure;
subplot(1, 3, 1);
imshow(gray_img);
title('Original Image');
subplot(1, 3, 2);
imshow(noisy_img);
title('Noisy Image');
subplot(1, 3, 3);
imshow(filtered_img);
title('Filtered Image');
```
在上述代码中,我们首先读取一张图像并将其转换为灰度图像,然后向其添加高斯噪声。接下来,我们使用上述中值滤波器对带噪声的图像进行滤波,并显示原始图像、带噪声的图像和滤波后的图像。
阅读全文