中值滤波函数程序 function X = medfilter(x, m) % 中值滤波 原矩阵为x 使用的模板为m % x = double(x); % 模板大小 dim1 = size(m, 1); dim2 = size(m, 2); % 对边界的像素不处理 计算需要处理像素的范围 row_min = (dim1+1) / 2; row_max = size(x, 1) - row_min + 1; col_min = (dim2+1) / 2; col_max = size(x, 2) - col_min + 1; ind_nz = find( m ~= 0); X = x; for i = row_min : row_max for j = col_min : col_max temp = x( i-(dim1-1)/2:i+(dim1-1)/2, j-(dim2-1)/2:j+(dim2-1)/2); element = sort( temp(ind_nz) ); X(i, j) = element( round( size(element, 1)/2 ) ); end end
时间: 2023-12-17 22:03:30 浏览: 39
这是一个用于实现中值滤波的 MATLAB 函数程序。中值滤波是一种用于去除图像中噪声的滤波方法,它的思想是用像素点周围一定大小的邻域内的中值来代替该像素点的值,以达到去除噪声的目的。在这个程序中,输入参数 x 是原始矩阵,m 是滤波模板,输出结果 X 是经过中值滤波处理后的矩阵。程序中会对边界的像素不进行处理,然后计算需要处理的像素点的范围。对于每个需要处理的像素点,程序会取出其周围的邻域元素,去掉不在模板中的元素,然后对剩余元素进行排序,然后取其中位数作为该像素点的值。这样,经过处理后的图像就会更加清晰。
相关问题
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 ]
matlab 中值滤波函数
以下是MATLAB中使用中值滤波函数medfilt2()的示例:
```matlab
% 读取图像
img = imread('example.jpg');
% 对图像进行中值滤波
filtered_img = medfilt2(img);
% 显示原始图像和中值滤波后的图像
subplot(1,2,1), imshow(img), title('Original Image');
subplot(1,2,2), imshow(filtered_img), title('Filtered Image');
```
上述代码中,首先使用imread()函数读取一张图像,然后使用medfilt2()函数对图像进行中值滤波,最后使用subplot()和imshow()函数将原始图像和中值滤波后的图像显示在同一窗口中。