关于平滑滤波,中值滤波,KNN滤波的图像处理(附matlab代码)
前些天小编上了数字图像的课程,里面提到了均值平滑滤波操作,中值滤波操作,和KNN平滑滤波操作。
1.何为均值平滑滤波呢?
均值滤波的核心就是在一定的小范围内,给这个小范围的像素取平均值(此操作是在原图上操作的
)然后利用这个平均值来取代该小范围内的所有像素,也就是如下黑色的区域是小范围而紫色的区域为原图像。我们对黑色区域范围(再次申明,此操作作用于原图像),在原图像的这个范围内对这个范围去均值,在黑色区域内,我们利用取得的均值来代替黑色区域内的所有像素。
优点在于,可以去除灰度值比较高的点(也就是所谓的噪声)
缺点在于,由于黑色区域范围的值都是一个值,就导致图像会变模糊。但是衣服图像很大,例如512512的图像,你用33的黑色区域(窗口)去框,其实框的范围并不是很大。
为了便于观察,我用notibility花了一个简图如上:
紫色的部分是一副图像,举例子说明,这里我就用一个55的图像
黑色的部分是一个33的窗口,这个窗口有什么用呢,我们作均值平滑滤波的关键就在于这个窗口。
在这个黑色图像的窗口里,我们对其进行取平均。
大体的公式是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); %由于模板是33,故其排序下来一共九个数,去中位数,即是第五位
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代码)相关推荐
- matlab mean 滤波,中值和均值滤波---matlab实现(Median and mean filter ---matlab implementation).doc...
中值和均值滤波---matlab实现(Median and mean filter ---matlab implementation) 中值和均值滤波---matlab实现(Median and me ...
- 【滤波跟踪】基于Huber函数和最大相关熵的抗差滤波算法实现GNSS导航定位粗差处理附matlab代码
1 内容介绍 雷达系统中跟踪滤波器的设计通常依赖于线性高斯系统.一旦系统为非线性且受到非高斯噪声干扰时,雷达跟踪性能便出现严重恶化.为了提高目标在非线性非高斯环境下跟踪的精度,将最大相关熵扩展卡尔曼滤 ...
- matlab 归一化_机器学习中如何用Fscore进行特征选择(附Matlab代码)
作者:kervin 编辑:阿吉 目前,机器学习在脑科学领域的应用可谓广泛而深入,不论你是做EEG/ERP研究,还是做MRI研究,都会看到机器学习的身影.机器学习最简单或者最常用的一个应用方向是分类,如 ...
- 密切值法解简单评价问题附matlab代码
一.密切值法 密切值法是系统工程中多目标决策的一种优选方法.多目标决策由于考虑的目标多,标准多,有些目标之间还存在着矛盾,这就使多目标问题成为一个复杂而困难的问题,密切值法是解决有限方案多目标决策的有 ...
- 【图像处理】小波编码图像中伪影和纹理的检测附Matlab代码和报告
✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信.
- C++手敲灰度图均值滤波中值滤波高斯滤波
一.均值滤波(Meaning Filtering)概念 均值滤波是典型的线性滤波算法,它是指在图像上对目标像素给一个模板,该模板包括了其周围的临近像素(以目标像素为中心的周围8个像素,构成一个滤波模板 ...
- opencv 滤波 方框滤波 均值滤波 高斯滤波 中值滤波 双边滤波
文章目录 一. 线性滤波 1.1. 方框滤波 demo 1.2. 均值滤波 demo 1.3. 高斯滤波 demo 二. 非线性滤波 2.1. 中值滤波 demo 2.2. 双边滤波 demo 结构体 ...
- OpenCV函数简记_第三章数字图像的滤波处理(方框,均值,高斯,中值和双边滤波)
系列文章目录 OpenCV函数简记_第一章数字图像的基本概念(邻域,连通,色彩空间) OpenCV函数简记_第二章数字图像的基本操作(图像读写,图像像素获取,图像ROI获取,图像混合,图形绘制) Op ...
- Opencv学习笔记 各向异性滤波/均值滤波/高斯滤波/中值滤波/加权中值滤波/高斯低通滤波
各向异性滤波 各向异性扩散滤波主要是用来平滑图像的,克服了高斯模糊的缺陷,各向异性扩散在平滑图像时是保留图像边缘的,和双边滤波很像. public static void ImageA ...
- 均值滤波高斯滤波中值滤波
1.均值滤波 均值滤波是一种线性滤波器,处理思路也很简单,就是将一个窗口区域中的像素计算平均值,然后将窗口中计算得到的均值设置为锚点上的像素值. 该算法有优点在于效率高,思路简单.同样,缺点也很明显, ...
最新文章
- AI虚拟偶像:知识图谱赋予AI“生命感”
- Windows核心编程 第四章 进程(中)
- android 判断时间是否过期_眉笔眉粉有保质期吗?怎么判断眉笔眉粉是否过期?...
- Visual Studio 智能提示消失解决办法
- 那些程序员身上共有的属性,这就是他为什么比你进步快的原因!
- python中os.path.join()的循环用法_Python os.path.join()用法及代码示例
- 外媒:柔宇科技搁置赴美上市计划 考虑在中国进行IPO
- linux如何判断网线插入_快速鉴定网线质量的常用方法
- Ubuntu自定义服务
- rails3高端observer模式
- GEE学习笔记3-导出table数据
- 设计模式(建造者模式)
- java mapxtreme_MapXtreme Java Edition 4.8使用心得(一)
- 用ajax请求豆瓣api,结合豆瓣Api v2.0实现Jsonp跨域
- 最最最简单从官方获取最新行政区划代码、区划拼音
- 一键DDOS防火墙安装程序
- 汇编语言中xor指令_XOR寄存器,寄存器(汇编程序)
- Linux7.5 安装mysql8.0.13教程
- 2021全球十大外盘期货交易平台排名
- C语言之栈实现(详细)
热门文章
- 电子元器件封装(3D或2D)下载攻略
- 星辰变鸿蒙林蒙,星辰变中的林蒙 就是盘龙中的林雷
- 2019最热门的区块链夺宝,熊市还怕没得玩?
- 插槽的使用教程(普通插槽、具名插槽、域名插槽)
- easyPOI基本用法
- react踩坑日记~useRef不会使页面更新
- docker命令(一) —— docker logs 日志输出
- php 腾讯短信接口api,关于腾讯云短信 API 成功调用的分享
- Cmake时遇见:No package ‘epoxy‘ found的解决方法
- 查询本机或线上服务器上oracle版本的方法