用MATLAB写中值滤波
时间: 2024-05-06 10:20:52 浏览: 12
中值滤波是一种基于排序的滤波方法,可以去除图像中的噪声。MATLAB中可以使用medfilt2函数实现中值滤波。
以下是一个简单的示例代码:
```matlab
% 读取图像
img = imread('lena.jpg');
% 添加高斯噪声
noisy_img = imnoise(img, 'gaussian', 0.1);
% 中值滤波
filtered_img = medfilt2(noisy_img, [3 3]);
% 显示结果
figure;
subplot(1,3,1); imshow(img); title('原图');
subplot(1,3,2); imshow(noisy_img); title('添加高斯噪声');
subplot(1,3,3); imshow(filtered_img); title('中值滤波');
```
其中,medfilt2函数的第一个参数为待滤波的图像,第二个参数为滤波器的大小,这里使用了一个3x3的滤波器。在示例代码中,首先读取了一张图像,然后使用imnoise函数添加了高斯噪声,接着使用medfilt2函数进行中值滤波,最后使用subplot函数将原图、加噪图和滤波后的图像显示在一张图中。
相关问题
matlab手写中值滤波
中值滤波是一种非线性数字滤波器技术,用于降噪。在Matlab中,可以通过以下步骤手写实现中值滤波:
1. 读取图像并显示原图。
2. 对图像进行填充,以便处理边缘像素。
3. 加入椒盐噪声,模拟需要去除的噪声。
4. 将图像转换为double类型,便于后续计算。
5. 创建一个与图像大小相同的新矩阵x2,用于存储滤波后的图像。
6. 遍历图像中的每个像素,利用模板大小n获取相应的块。
7. 在每个块中,将所有像素值排序,并取其中值作为中心像素的值。
8. 将中值赋给x2中对应位置的像素。
9. 将x2转换为uint8类型,并显示滤波后的图像。
10. 将原图像转换为灰度图像。
11. 使用Matlab中的medfilt2函数对灰度图像进行中值滤波,并显示滤波后的图像。
这样就完成了手写的中值滤波过程。
用matlab写中值滤波,不要用函数
以下是使用Matlab编写中值滤波算法的示例代码:
```matlab
% 读入图像
img = imread('lena.bmp');
% 显示原始图像
subplot(1,2,1);
imshow(img);
title('原始图像');
% 定义滤波器大小
winSize = 3;
% 计算边缘扩展大小
border = floor(winSize/2);
% 边缘扩展
imgBorder = padarray(img,[border border],'symmetric','both');
% 中值滤波
for i = 1:size(img,1)
for j = 1:size(img,2)
% 提取当前像素点的邻域
window = imgBorder(i:i+2*border,j:j+2*border);
% 对邻域进行排序
windowSort = sort(window(:));
% 取中间值作为滤波结果
imgFiltered(i,j) = windowSort((winSize^2+1)/2);
end
end
% 显示滤波结果
subplot(1,2,2);
imshow(imgFiltered);
title('中值滤波结果');
```
该代码中,首先读入了一张图像,并显示了原始图像。然后定义了滤波器大小和边缘扩展大小,并进行了边缘扩展。接着使用两个for循环遍历图像中的每个像素点,提取当前像素点的邻域,对邻域进行排序,取中间值作为滤波结果。最后显示滤波结果。