OpenCV学习笔记(六):非线性滤波-中值、双边:medianBlur(),bilateralFilter()

1、中值滤波(Median filter)
是一种典型的非线性滤波技术,基本思想是用像素点邻域灰度值的中值来代替该像素点的灰度值,该方法在去除脉冲噪声、斑点噪声(speckle noise)和椒盐噪声(salt-and-pepper noise)的同时又能保留图像边缘细节。
优点:
中值滤波在一定的条件下可以克服常见线性滤波器带来的图像细节模糊,而且对滤除脉冲干扰及图像扫描噪声非常有效,也常用于保护边缘信息, 保存边缘的特性使它在不希望出现边缘模糊的场合也很有用,是非常经典的平滑噪声处理方法。
缺点:
1)中值滤波花费的时间是均值滤波的5倍以上
2)对一些细节多,特别是线、尖顶等细节多的图像不宜采用

2、双边滤波(Bilateral filter)
是结合图像的空间邻近度和像素值相似度的一种折衷处理,同时考虑空域信息和灰度相似性,达到保边去噪的目的。具有简单、非迭代、局部的特点。
优点:
双边滤波器的好处是可以做边缘保存(edge preserving),双边滤波器顾名思义比高斯滤波多了一个高斯方差sigma-d,它是基于空间分布的高斯滤波函数,所以在边缘附近,离的较远的像素不会太多影响到边缘上的像素值,这样就保证了边缘附近像素值的保存。
缺点:
但是由于保存了过多的高频信息,对于彩色图像里的高频噪声,双边滤波器不能够干净的滤掉,只能够对于低频信息进行较好的滤波。
在双边滤波器中,输出像素的值依赖于邻域像素值的加权值组合,而加权系数w(i,j,k,l)取决于定义域核和值域核的乘积。

代码示例:

#include <opencv2/opencv.hpp>Mat g_srcImage,g_dstImage1,g_dstImage2,g_dstImage3;   //存储图片的Mat类型int g_nMedianBlurValue=10;                 //中值滤波参数值
int g_nBilateralFilterValue=30;             //双边滤波参数值using namespace cv;
using namespace std;int main(int argc, char *argv[])
{// 载入原图g_srcImage = imread( "F:/C++/2. OPENCV 3.1.0/TEST/7.jpg", 1 );if( !g_srcImage.data ){ printf("Oh,no,读取srcImage错误~! \n"); return false; }//克隆原图到三个Mat类型中g_dstImage1 = g_srcImage.clone( );g_dstImage2 = g_srcImage.clone( );//显示原图imshow("【<0>原图窗口】",g_srcImage);// 1、中值滤波namedWindow("【<4>中值滤波】", 1);createTrackbar("参数值:", "【<4>中值滤波】",&g_nMedianBlurValue, 50,on_MedianBlur );on_MedianBlur(g_nMedianBlurValue,0);// 2、双边滤波namedWindow("【<5>双边滤波】", 1);createTrackbar("参数值:", "【<5>双边滤波】",&g_nBilateralFilterValue, 50,on_BilateralFilter);on_BilateralFilter(g_nBilateralFilterValue,0);//输出一些帮助信息cout<<endl<<"\t运行成功,请调整滚动条观察图像效果~\n\n"<<"\t按下“q”键时,程序退出。\n";//按下“q”键时,程序退出while(char(waitKey(1)) != 'q') {}return 0
}
// 1、中值滤波操作的回调函数
static void on_MedianBlur(int, void *)
{medianBlur ( g_srcImage, g_dstImage1, g_nMedianBlurValue*2+1 );imshow("【<4>中值滤波】", g_dstImage1);
}// 2、双边滤波操作的回调函数
static void on_BilateralFilter(int, void *)
{bilateralFilter ( g_srcImage, g_dstImage2, g_nBilateralFilterValue, g_nBilateralFilterValue*2, g_nBilateralFilterValue/2 );imshow("【<5>双边滤波】", g_dstImage2);
}

结果:



参考:【OpenCV入门教程之九】 非线性滤波专场:中值滤波、双边滤波

OpenCV学习笔记(六):非线性滤波-中值、双边:medianBlur(),bilateralFilter()相关推荐

  1. opencv 手选roi区域_【opencv学习笔记六】图像的ROI区域选择与复制

    图像的数据量还是比较大的,对整张图片进行处理会影响我们的处理效率,因此常常只对图像中我们需要的部分进行处理,也就是感兴趣区域ROI.今天我们来看一下如何设置图像的感兴趣区域ROI.以及对ROI区域图像 ...

  2. 【theano-windows】学习笔记六——theano中的循环函数scan

    前言 Scan是Theano中最基础的循环函数, 官方教程主要是通过大量的例子来说明用法. 不过在学习的时候我比较习惯先看看用途, 然后是参数说明, 最后再是研究实例. 国际惯例, 参考网址 官网关于 ...

  3. opencv学习笔记(六)---图像梯度

    图像梯度的算法有很多方法:sabel算子,scharr算子,laplacian算子,sanny边缘检测(下个随笔)... 这些算子的原理可参考:https://blog.csdn.net/poem_q ...

  4. opencv学习笔记六十八:显示中文汉字

    opencv中putText只能显示英文,如果在某个程序中你想显示汉字,可在该项目上新建一个头文件项putText.h和一个putText.cpp即可. putText.h #ifndef PUTTE ...

  5. OpenCV学习笔记六-提高对比度

    提高像素对比度 P7 按像素提高图像的对比度#include<iostream> #include<opencv2/opencv.hpp>using namespace std ...

  6. opencv学习笔记六十三:基于CNN的性别、年龄预测

    来自于2015年CVPR的一篇paper<Age and Gender Classification using Convolutional Neural Networks>. Paper ...

  7. 分水岭算法java,OpenCV 学习笔记 04 深度估计与分割——GrabCut算法与分水岭算法...

    1 使用普通摄像头进行深度估计 1.1 深度估计原理 这里会用到几何学中的极几何(Epipolar Geometry),它属于立体视觉(stereo vision)几何学,立体视觉是计算机视觉的一个分 ...

  8. opencv学习笔记11:图像滤波(均值,方框,高斯,中值)

    为什么要使用滤波 消除图像中的噪声成分叫作图像的平滑化或滤波操作.信号或图像的能量大部分集中在幅度谱的低频和中频段是很常见的,而在较高频段,感兴趣的信息经常被噪声淹没.因此一个能降低高频成分幅度的滤波 ...

  9. OpenCV学习笔记(五十六)——InputArray和OutputArray的那些事core OpenCV学习笔记(五十七)——在同一窗口显示多幅图片 OpenCV学习笔记(五十八)——读《Mast

    OpenCV学习笔记(五十六)--InputArray和OutputArray的那些事core 看过OpenCV源代码的朋友,肯定都知道很多函数的接口都是InputArray或者OutputArray ...

最新文章

  1. linux终端运行pytorch,Linux虚拟机测试pytorch运行
  2. 2021牛客暑期多校训练营(二) J. Product of GCDs 不动脑子的莫比乌斯反演做法(
  3. vue-cli4.x 中 配置允许跨域请求
  4. bootstrap中导航、导航栏、表单及自定义表单
  5. 电影《你好,李焕英》进入全球票房榜前100
  6. Flex导出Excel
  7. Android 9 带着 AI 来了,为什么我们还停留在 6?
  8. 【STRIDE】【4】安全威胁分析设计
  9. 【Gym-100085 E】Eve【模拟题】
  10. CFree注册码及破解过程【转】
  11. Android 实现拍照功能,并将图片保存到本地存储
  12. css层叠性css层叠性
  13. 云服务器deeplearning_吴恩达deeplearning.ai将于11月6日开放第四课,主讲卷积神经网络...
  14. Windows Server各版本差异
  15. 三毛的诗 I 如果有来生
  16. 15、wxapp - 小程序登录以及全局参数 - 微擎小程序模块应用开发
  17. 人生苦短我用Python 五:ERROR: No matching distribution found for REfo==0.13
  18. Python做一个简单的抽奖程序
  19. 【光链路分析二】OTDR 测量文件 SOR文件解析
  20. endnote生成参考文献(可自定义)——小白手把手

热门文章

  1. java组装树状结构数据集合_JAVA构建List集合为树形结构
  2. mask属性是css3的吗_使用CSS3 mask(蒙版,遮罩)属性实现超酷按钮悬停动画
  3. 直通BAT必考题系列:深入剖析JVM之G1收集器、及回收流程、与推荐用例
  4. Netty异步非阻塞事件驱动及原理详解
  5. 论文浅尝 - JWS2020 | FEEL: 实体抽取和链接的集成框架
  6. 认识Windows Communication Foundation
  7. 课后作业-阅读任务-阅读笔记4
  8. Linux下查看/管理当前登录用户及用户操作历史记录
  9. c# 配置文件App.config操作类库
  10. python web框架之Tornado