对中值滤波还不是很了解的朋友可以看下我之前写的文章:MATLAB-中值滤波原理、实现及应用,链接的这文章是我根据 《数字图像处理》许录平版 相关内容而写的,中值窗口有线状、正方形、十字形、X型、菱形以及圆形,窗口很丰富,但没有完完全全实现medfilt2函数的功能,而且边缘处理的算法都是统一的,便有了现在这篇文章

这篇文章主要涉及如何实现medfilt2函数,medfilt2的详细用法可以在MATLAB输入help medfilt2查看或者看:Matlab中消除图像噪声之中值滤波器:medfilt2

注:实际上处理效果与medfilt2函数有点小差别,对边缘的处理,我是使边缘处的像素点取最近值,而且对四个顶角的处理方法也不同。具体处理方法可以看上面链接的我写的那篇文章(有图解)或看下面的代码

代码

不过多解释,都有注释,不懂为何如此处理的请看:MATLAB-中值滤波原理、实现及应用

close all;clear;clc;%仿medfilt2函数
%l、w分别为方形中值滤波窗口的行和列l=3;w=3; %进行中值滤波的窗口大小f=imread('cameraman.tif'); %读取图像
f=im2double(f);
fsap=imnoise(f,'salt & pepper',0.05); %加入椒盐噪声
[m,n]=size(f);
fmed=fsap;
S=l*w;
a=zeros(l,w);%计算常用数值,简洁代码
if rem(l,2)==1 %窗口行数为奇数l1=(l-1)/2;l2=(l+1)/2;
else %窗口行数为偶数l1=l/2;l2=l1;
endif rem(w,2)==1 %同上,此处为列数的情况w1=(w-1)/2;w2=(w+1)/2;
elsew1=w/2;w2=w1;
endfor i=l2:m-l1for j=w2:n-w1for k=1:lfor p=1:wa(k,p)=fsap(i+k-l2,j+p-w2); %取点endenda2=reshape(a,S,1); %排成一列,方便排序赋值a3=sort(a2); %排序if rem(S,2)==1 %奇数赋中值,偶数赋俩中间值的平均值fmed(i,j)=a3((S+1)/2); %赋中值elsefmed(i,j)=(a3(S/2)+a3(S/2+1))/2;endend
end%处理边缘处的像素点
for i=1:l1 %处理第l1列——倒数第l1列的第1——l1行、倒数第1——l1行的像素点for j=l1:n+1-l1fmed(i,j)=fmed(l2,j);fmed(m+1-i,j)=fmed(m-l1,j);end
endfor j=1:w1 %处理第w1行——倒数第w1行的第1——w1列、倒数第1——w1列的像素点for i=w1:m+1-w1fmed(i,j)=fmed(i,w2);fmed(i,n+1-j)=fmed(i,n-w1);end
end%处理四个顶角
for i=1:l2-1for j=1:w2-1fmed(i,j)=fmed(l2,w2); %左上顶角fmed(i,n-w2+1+j)=fmed(l2,n-w2+1); %右上顶角fmed(m-l2+1+i,j)=fmed(m-l2+1,w2); %左下顶角fmed(m-l2+1+i,n-w2+1+j)=fmed(m-l2+1,n-w2+1); %右下顶角end
end%图像对比
subplot(131),imshow(fsap),title('加噪图像')
subplot(132),imshow(fmed),title(sprintf('使用%d*%d方形窗口进行中值滤波',l,w))
subplot(133),fimg=medfilt2(fsap,[l w]);imshow(fimg),title('medfilt2函数对比')

图像对比

可以留意下处理后的图像的边缘处和四个顶角处的不同

2*2方形窗口

2*3方形窗口

3*3方形窗口

9*9方形窗口

如果对你有用的话,能否点个赞呢?

MATLAB-medfilt2函数的实现源代码相关推荐

  1. 查看matlab中函数源代码的方法

    有几种方法可以实现查看matlab里自带函数的源代码: 在命令窗口中输入: (1).type 函数名(如 type rgb2gray 或者 type rgb2gray.m):即可在命令窗口中显示此函数 ...

  2. matlab如何查看函数源代码,通达信fft函数,如何查看matlab fft函数源代码

    Q1:如何查看matlab fft函数源代码 n要取最接近数据长度的2的整数次方,命令是2^nextpow2(n),其中n是实际数据长度,因为这样的n可以使fft更快.比如,n=1021,执行n=2^ ...

  3. MATLAB图像的中值滤波——手动滤波和medfilt2函数滤波

    本文还是书接上回,https://blog.csdn.net/weixin_44502554/article/details/126283957?spm=1001.2014.3001.5502 前期的 ...

  4. matlab freqz函数使用

    Matlab freqz函数使用 (2012-10-22 13:42:03) 转载▼ 标签: 杂谈 freqz函数计算线性系统的频率响应,包括幅频响应和相频响应,基本输入为线性系统的AMMA模型系数向 ...

  5. matlab图像处理函数大全

    1.图像的变换   ① fft2:fft2函数用于数字图像的二维傅立叶变换,如:i=imread('104_8.tif'); j=fft2(i); ②ifft2::ifft2函数用于数字图像的二维傅立 ...

  6. matlab的函数要写在哪,matlab函数库在哪

    ---WORD 格式--可编辑--专业资料--- 在 MATLAB 环境下访问外部函数的共享库文件,必须首先把该库文件加载到内存中.一旦加载 成功,就能直接在 MATLAB 中直接请求...... 1 ...

  7. matlab watershed函数简单实现_薛定宇教授大讲堂(卷):MATLAB程序设计|文末赠书...

    00作者简介 薛定宇 分别在沈阳工业大学.东北大学和英国Sussex大学获得学士(1985年).硕士(1988年)和博士学位(1992年),1997年任东北大学信息学院教授.深耕于计算机在数学与自动控 ...

  8. Matlab mfcc函数参数详解(英文附例)

    Matlab mfcc函数参数详解 其实可以直接打开源代码看哈. %MFCC Extract the mfcc, log-energy, delta, and delta-delta of audio ...

  9. matlab模拟频谱仪,毕业设计基于MATLAB的声音信号频谱分析仪源代码V3.1(手机版)...

    <[毕业设计]基于MATLAB的声音信号频谱分析仪源代码.doc>由会员分享,可免费在线阅读全文,更多与<毕业设计基于MATLAB的声音信号频谱分析仪源代码(V3.1)>相关文 ...

最新文章

  1. SLAM后端优化中卡尔曼滤波的直观通俗解释
  2. 你真敢ZAO吗?解读换脸AI “细思极恐” 的用户协议
  3. 使用OpenCV玩家营造出一个视频控制(没有声音)
  4. python 剪切一行内容到另一个文件
  5. 没有基础的想转行学习Python怎么学
  6. Node.js抓取网页信息(cheerio网络爬虫)
  7. 嘀嗒出行被曝五一活动虚假宣传,官方回应:为打击黑产
  8. win10开发java_java的开发环境(win10)
  9. (一)开始使用混合边缘AI进行面部识别
  10. 苹果Mac临时文件存储助手工具:Yoink
  11. atitit.窗体静听esc退出本窗体java swing c# .net php
  12. 软件项目管理 project 实验
  13. 机器学习入门好文章--超级推荐
  14. Java推箱子游戏,文档+源码
  15. 看《大明王朝1566》聊分布式中的CAP和BASE理论
  16. 2012年2月51CTO壁纸点评活动获奖名单【已结束】
  17. iOS 手势的用法
  18. 【Openfire】网页版的用户注册、登录、修改密码
  19. 任务调度框架Quartz用法指南
  20. 贪吃蛇大作战的开发(一)

热门文章

  1. loss不收敛可能的原因以及相应的解决方法
  2. 分享138个HTML公司企业模板,总有一款适合您
  3. 导航系统中坐标系介绍
  4. form表单提交数据如何拿到返回值
  5. 实验四 交换机配置方式及基本命令的熟悉
  6. Android开发实例-高校录取分数线应用(一)
  7. Bright Data VPN和ClonBrowser:如何通过全球VPN网络保护你的在线隐私和安全?
  8. Node中的事件轮询机制
  9. blr不是已知的css属性名,js判断并告知支持css属性(值)的何种情况
  10. WiFi 6:802.11ax RU