MATLAB自适应中值滤波代码

本文介绍了作者在数字图像处理课程中,为完成课后作业自行修改并实现的MATLAB自适应中值滤波代码。虽然代码效率不高,但可以正常工作,适合有相似需求的人参考使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近数字图像处理课程课后作业,要求自己用代码实现自适应中值滤波器,虽然很简单,但是在网上找了一圈也没有可以直接拿来用的,所以就在网上找了一段代码,并且自己改了一下,能够实现效果了,虽然效率不是很高,但是能用,希望有需要的人也可以拿去用


代码

一共三段代码,主函数以及两个方法

  1. 主函数
    img_rgb = imread('D:\1.jpg');
    img_gray = rgb2gray(img_rgb);
    imshow(img_gray);
    title('原图');
    figure();
    imshow(img_gray);
    img_salt = imnoise(img_gray,'salt & pepper',0.4);
    imshow(img_salt);
    title('加入0.4椒盐噪声');
    figure();
    img_gaussian = imnoise(img_gray,'gaussian',0.3);
    imshow(img_gaussian);
    title('加入0.3高斯噪声');
    figure();
    imshow(medfilt2(img_salt),[3,3]);
    title('中值滤波处理椒盐噪声图像');
    figure();
    imshow(medfilt2(img_gaussian,[3,3]));
    title('中值滤波处理高斯噪声图像');
    figure();
    imshow(RAMF(img_salt,3));
    title('椒盐噪声图像自适应中值滤波后图片');
    figure();
    imshow(RAMF(img_gaussian,4));
    title('高斯噪声图像自适应中值滤波后图片');

     

  2.  自适应中值滤波方法
下面是一个简单的 MATLAB 自适应中值滤波的示例代码: ```matlab function [output_image] = adaptive_median_filter(input_image, window_size, max_window_size) % input_image: 输入图像 % window_size: 初始窗口大小 % max_window_size: 最大窗口大小 % 获取输入图像的大小 [rows, cols] = size(input_image); % 创建输出图像 output_image = zeros(rows, cols); % 遍历每个像素 for i = 1:rows for j = 1:cols % 获取当前像素周围的窗口 window = get_window(input_image, i, j, window_size); % 计算窗口中像素的中值和极差 median_value = median(window(:)); range_value = max(window(:)) - min(window(:)); % 如果中值和极差符合条件,则输出为中值;否则,增加窗口大小继续处理 if (input_image(i, j) > min(window(:))) && (input_image(i, j) < max(window(:))) && (range_value > 0) && (window_size <= max_window_size) output_image(i, j) = input_image(i, j); elseif (window_size < max_window_size) window_size = window_size + 2; output_image(i, j) = adaptive_median_filter(input_image, window_size, max_window_size); else output_image(i, j) = median_value; end end end end function [window] = get_window(input_image, i, j, window_size) % 获取像素周围的窗口 half_window_size = (window_size - 1) / 2; i_min = i - half_window_size; i_max = i + half_window_size; j_min = j - half_window_size; j_max = j + half_window_size; % 边界处理 if i_min < 1 i_min = 1; end if i_max > size(input_image, 1) i_max = size(input_image, 1); end if j_min < 1 j_min = 1; end if j_max > size(input_image, 2) j_max = size(input_image, 2); end % 获取窗口 window = input_image(i_min:i_max, j_min:j_max); end ``` 在这个代码中,`adaptive_median_filter` 函数实现了自适应中值滤波的主要逻辑,`get_window` 函数用于获取指定像素周围的窗口。你可以将这个代码保存为一个 `.m` 文件并在 MATLAB 中运行,输入你想要滤波的图像、初始窗口大小和最大窗口大小即可得到滤波后的图像。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值