前些天小编上了数字图像的课程,里面提到了均值平滑滤波操作,中值滤波操作,和KNN平滑滤波操作。
1.何为均值平滑滤波呢?
均值滤波的核心就是在一定的小范围内,给这个小范围的像素取平均值(此操作是在原图上操作的
)然后利用这个平均值来取代该小范围内的所有像素,也就是如下黑色的区域是小范围而紫色的区域为原图像。我们对黑色区域范围(再次申明,此操作作用于原图像),在原图像的这个范围内对这个范围去均值,在黑色区域内,我们利用取得的均值来代替黑色区域内的所有像素。
优点在于,可以去除灰度值比较高的点(也就是所谓的噪声)
缺点在于,由于黑色区域范围的值都是一个值,就导致图像会变模糊。但是衣服图像很大,例如512512的图像,你用33的黑色区域(窗口)去框,其实框的范围并不是很大。

为了便于观察,我用notibility花了一个简图如上:
紫色的部分是一副图像,举例子说明,这里我就用一个55的图像
黑色的部分是一个3
3的窗口,这个窗口有什么用呢,我们作均值平滑滤波的关键就在于这个窗口。
在这个黑色图像的窗口里,我们对其进行取平均。
大体的公式是Y=1/9(x1+x2+x3+x4+x5+x6+x7+x8+x9)其中x1–x9是这个黑色框图的像素。Y是我们最终要用这个像素去替代所有的x,即用Y去替代x1,x2,x3,x4,x5,x6,x7,x8,x9.(具体的详看代码)

然后整个黑色框图右移一直到图像(紫色区域的边界),如上图的第二张图片,就是第二步,对于55的图像,用33的框去移动的时候,三步就可以走完一行。最终得到的效果是上图的第三章图片也就是有红色圈圈的那张。红色圈圈就是我们最终取平均得到的九个值。
有人问,55的图像(紫色区域)变成33的(红色圈圈),我进行滤波难道还把图像滤小了?
其实不然,最终我们要对没有进行操作的区域要进行边界的填充。填充完以后,中间的红色圈圈区域的值改变,其他(边界)看自己如何操作。
2.中值滤波操作
中值滤波和均值滤波的操作一样,唯一的区别就是,均值滤波以平均值代替黑框里的像素值即x1,x2,x3,x4,x5,x6,x7,x8,x9,而中值滤波则以这九个数的中位数来替代原来的九位数。
3.KNN平滑滤波操作。
KNN平滑滤波操作和均值滤波和中值滤波的操作是类似的,只不过是通过与黑色框图的中心像素(x5)的比较,取距离与x5最近的前五位像素然后取均值,得到一个值去取代黑框图里的九位数
最终附一下代码(matlab):
f=[2 6 2 4 38 10 2 16
2 9 221 7 0 10 3 10
30 9 6 120 120 3 10 8
3 7 5 10 8 3 6 66
4 120 9 12 8 240 6 6
2 0 7 9 6 4 2 8]; %f为图像
%%进行3*3的均值滤波
for i=2:5
for j=2:7
src(i-1,j-1)=floor((f(i-1,j-1)+f(i-1,j)+f(i-1,j+1)+f(i,j-1)+f(i,j)+f(i,j+1)+f(i+1,j-1)+f(i+1,j)+f(i+1,j+1))/9);
end
end
figure(1)
imshow(src);

%进行33的中值滤波
for i=2:5
for j=2:7
%src1(i-1,j-1)=floor((f(i-1,j-1)+f(i-1,j)+f(i-1,j+1)+f(i,j-1)+f(i,j)+f(i,j+1)+f(i+1,j-1)+f(i+1,j)+f(i+1,j+1))/9);
a=[f(i-1,j-1),f(i-1,j),f(i-1,j+1),f(i,j-1),f(i,j),f(i,j+1),f(i+1,j-1),f(i+1,j),f(i+1,j+1)];
b=sort(a);
src1(i-1,j-1)=b(5); %由于模板是3
3,故其排序下来一共九个数,去中位数,即是第五位
end
end
figure(2)
imshow(src1);

%进行KNN平滑滤波
%由于图像本身的维度就很小,所以采用3*3模板对f图像进行KNN平滑滤波,并取k=5;
%便于计算,这里采用L1范数作为计算公式,即绝对值
for i=2:5
for j=2:7
distance1=abs(f(i,j)-f(i-1,j-1));
distance2=abs(f(i,j)-f(i-1,j));
distance3=abs(f(i,j)-f(i-1,j+1));
distance4=abs(f(i,j)-f(i,j-1));
distance5=abs(f(i,j)-f(i,j+1));
distance6=abs(f(i,j)-f(i+1,j-1));
distance7=abs(f(i,j)-f(i+1,j));
distance8=abs(f(i,j)-f(i+1,j+1));
distance_sort=[distance1,distance2,distance3,distance4,distance5,distance6,distance7,distance8];
src2(i-1,j-1)=floor((distance1+distance2+distance3+distance4+distance5)/5); %k=5在这里显现
end
end
figure(3)
imshow(src2);

f显示后的图像(原图)

经过滤波以后(三种方法得出来的结果相同)

关于平滑滤波,中值滤波,KNN滤波的图像处理(附matlab代码)相关推荐

  1. matlab mean 滤波,中值和均值滤波---matlab实现(Median and mean filter ---matlab implementation).doc...

    中值和均值滤波---matlab实现(Median and mean filter ---matlab implementation) 中值和均值滤波---matlab实现(Median and me ...

  2. 【滤波跟踪】基于Huber函数和最大相关熵的抗差滤波算法实现GNSS导航定位粗差处理附matlab代码

    1 内容介绍 雷达系统中跟踪滤波器的设计通常依赖于线性高斯系统.一旦系统为非线性且受到非高斯噪声干扰时,雷达跟踪性能便出现严重恶化.为了提高目标在非线性非高斯环境下跟踪的精度,将最大相关熵扩展卡尔曼滤 ...

  3. matlab 归一化_机器学习中如何用Fscore进行特征选择(附Matlab代码)

    作者:kervin 编辑:阿吉 目前,机器学习在脑科学领域的应用可谓广泛而深入,不论你是做EEG/ERP研究,还是做MRI研究,都会看到机器学习的身影.机器学习最简单或者最常用的一个应用方向是分类,如 ...

  4. 密切值法解简单评价问题附matlab代码

    一.密切值法 密切值法是系统工程中多目标决策的一种优选方法.多目标决策由于考虑的目标多,标准多,有些目标之间还存在着矛盾,这就使多目标问题成为一个复杂而困难的问题,密切值法是解决有限方案多目标决策的有 ...

  5. 【图像处理】小波编码图像中伪影和纹理的检测附Matlab代码和报告

    ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信.

  6. C++手敲灰度图均值滤波中值滤波高斯滤波

    一.均值滤波(Meaning Filtering)概念 均值滤波是典型的线性滤波算法,它是指在图像上对目标像素给一个模板,该模板包括了其周围的临近像素(以目标像素为中心的周围8个像素,构成一个滤波模板 ...

  7. opencv 滤波 方框滤波 均值滤波 高斯滤波 中值滤波 双边滤波

    文章目录 一. 线性滤波 1.1. 方框滤波 demo 1.2. 均值滤波 demo 1.3. 高斯滤波 demo 二. 非线性滤波 2.1. 中值滤波 demo 2.2. 双边滤波 demo 结构体 ...

  8. OpenCV函数简记_第三章数字图像的滤波处理(方框,均值,高斯,中值和双边滤波)

    系列文章目录 OpenCV函数简记_第一章数字图像的基本概念(邻域,连通,色彩空间) OpenCV函数简记_第二章数字图像的基本操作(图像读写,图像像素获取,图像ROI获取,图像混合,图形绘制) Op ...

  9. Opencv学习笔记 各向异性滤波/均值滤波/高斯滤波/中值滤波/加权中值滤波/高斯低通滤波

    各向异性滤波         各向异性扩散滤波主要是用来平滑图像的,克服了高斯模糊的缺陷,各向异性扩散在平滑图像时是保留图像边缘的,和双边滤波很像. public static void ImageA ...

  10. 均值滤波高斯滤波中值滤波

    1.均值滤波 均值滤波是一种线性滤波器,处理思路也很简单,就是将一个窗口区域中的像素计算平均值,然后将窗口中计算得到的均值设置为锚点上的像素值. 该算法有优点在于效率高,思路简单.同样,缺点也很明显, ...

最新文章

  1. AI虚拟偶像:知识图谱赋予AI“生命感”
  2. Windows核心编程 第四章 进程(中)
  3. android 判断时间是否过期_眉笔眉粉有保质期吗?怎么判断眉笔眉粉是否过期?...
  4. Visual Studio 智能提示消失解决办法
  5. 那些程序员身上共有的属性,这就是他为什么比你进步快的原因!
  6. python中os.path.join()的循环用法_Python os.path.join()用法及代码示例
  7. 外媒:柔宇科技搁置赴美上市计划 考虑在中国进行IPO
  8. linux如何判断网线插入_快速鉴定网线质量的常用方法
  9. Ubuntu自定义服务
  10. rails3高端observer模式
  11. GEE学习笔记3-导出table数据
  12. 设计模式(建造者模式)
  13. java mapxtreme_MapXtreme Java Edition 4.8使用心得(一)
  14. 用ajax请求豆瓣api,结合豆瓣Api v2.0实现Jsonp跨域
  15. 最最最简单从官方获取最新行政区划代码、区划拼音
  16. 一键DDOS防火墙安装程序
  17. 汇编语言中xor指令_XOR寄存器,寄存器(汇编程序)
  18. Linux7.5 安装mysql8.0.13教程
  19. 2021全球十大外盘期货交易平台排名
  20. C语言之栈实现(详细)

热门文章

  1. 电子元器件封装(3D或2D)下载攻略
  2. 星辰变鸿蒙林蒙,星辰变中的林蒙 就是盘龙中的林雷
  3. 2019最热门的区块链夺宝,熊市还怕没得玩?
  4. 插槽的使用教程(普通插槽、具名插槽、域名插槽)
  5. easyPOI基本用法
  6. react踩坑日记~useRef不会使页面更新
  7. docker命令(一) —— docker logs 日志输出
  8. php 腾讯短信接口api,关于腾讯云短信 API 成功调用的分享
  9. Cmake时遇见:No package ‘epoxy‘ found的解决方法
  10. 查询本机或线上服务器上oracle版本的方法