中值过滤matlab实现
时间: 2023-08-11 21:06:33 浏览: 65
中值滤波是一种常见的图像处理方法,可以有效地去除图像中的噪声。Matlab中可以使用medfilt2函数实现中值滤波。
medfilt2函数的语法如下:
```matlab
B = medfilt2(A, [m n])
```
其中,A为原始图像,[m n]为滤波器的大小。滤波器大小必须是奇数,例如3x3、5x5等。函数返回的B为滤波后的图像。
示例代码如下:
```matlab
I = imread('lena.jpg'); % 读入图像
J = imnoise(I, 'salt & pepper', 0.02); % 添加椒盐噪声
K = medfilt2(J, [3 3]); % 中值滤波
subplot(1,3,1), imshow(I), title('原始图像');
subplot(1,3,2), imshow(J), title('添加噪声后的图像');
subplot(1,3,3), imshow(K), title('中值滤波后的图像');
```
这段代码读入了一张lena图像,并在其上添加了椒盐噪声,然后使用3x3的中值滤波器对图像进行滤波。最后将原始图像、添加噪声后的图像和中值滤波后的图像分别显示在三个子图中。
相关问题
中值过滤源代码matlab实现
中值滤波的Matlab实现代码如下:
```matlab
function [B] = median_filter(A, m, n)
% 中值滤波
% A: 原始图像
% m, n: 滤波器大小,必须是奇数
% B: 滤波后的图像
% 处理边缘像素
pad_size = floor([m, n] / 2);
pad_A = padarray(A, pad_size, 'symmetric', 'both');
% 中值滤波
B = zeros(size(A));
for i = 1:size(A, 1)
for j = 1:size(A, 2)
patch = pad_A(i:i+m-1, j:j+n-1);
B(i, j) = median(patch(:));
end
end
```
其中,A为原始图像,m和n为滤波器的大小,必须是奇数。函数返回的B为滤波后的图像。
该函数中,首先使用padarray函数对原始图像进行边缘填充,以便对边缘像素进行处理。然后使用双向对称填充方式进行填充,保证了边缘像素的连续性。接着在循环中对每个像素的邻域进行中值计算,得到该像素的滤波结果。
使用该函数的代码示例如下:
```matlab
I = imread('lena.jpg'); % 读入图像
J = imnoise(I, 'salt & pepper', 0.02); % 添加椒盐噪声
K = median_filter(J, 3, 3); % 中值滤波
subplot(1,3,1), imshow(I), title('原始图像');
subplot(1,3,2), imshow(J), title('添加噪声后的图像');
subplot(1,3,3), imshow(K), title('中值滤波后的图像');
```
这段代码与前面的示例代码类似,不同之处在于使用了自定义的中值滤波函数median_filter来对图像进行滤波。
matlab中值滤波函数
MATLAB中的中值滤波函数是'medfilt2'。该函数用于对二维图像进行中值滤波,即将每个像素的值替换为该像素周围邻域内像素的中值。 下面是一个示例代码,可以演示如何使用'medfilt2'函数对图像进行中值滤波处理:
A = rgb2gray(imread('cameraman.png')); % 读取一张灰度图像
B = medfilt2(A, [3 3], 'symmetric'); % 对图像进行中值滤波
figure, imshow(A), title('Original Image'); % 显示原图
figure, imshow(B), title('Filtered Image'); % 显示滤波后的图像
另外,还可以使用以下代码进行中值滤波处理:
x=imread('G:\matlab\1.jpg');% 需要过滤的图像
n=3; % 模板大小
[height, width]=size(x); % 获取图像的尺寸
figure; imshow(x);% 显示原图
x = imnoise(x,'salt & pepper'); % 加入椒盐噪声
figure; imshow(x); % 显示加噪声后的图像
x1=double(x); % 数据类型转换
x2=x1; % 转换后的数据赋给x2
for i=1:height-n+1
for j=1:width-n+1
c=x1(i:i+n-1,j:j+n-1); % 在x1中取模板大小的块赋给c
e=c(1,:); % e中存放c矩阵的第一行
for u=2:n % 将c中的其他行元素取出来接在e后使e为一个行矩阵
e=[e,c(u,:)];
end
med=median(e); % 取一行的中值
x2(i+(n-1)/2,j+(n-1)/2)=med; % 将模板各元素的中值赋给模板中心位置的元素
end
end
d=uint8(x2); % 未被赋值的元素取原值
figure; imshow(d); % 显示过滤图像
x0=rgb2gray(x); % 灰度处理,得到二维矩阵
b=medfilt2(x0,[n,n]); % 使用'medfilt2'函数进行中值滤波
figure; imshow(b); % 显示滤波后的灰度图像<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* [Matlab中值滤波](https://blog.csdn.net/CC_Lsh/article/details/130166797)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
- *3* [中值滤波(matlab)](https://blog.csdn.net/qq_43211132/article/details/87455793)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]