当前位置: 首页 > news >正文

opencv源码解析之(2):滤波前言2

      在上次的opencv源码解析之滤波前言1中,按照opencv_tutorials.pdf中的滤波部分试了下常用的4种滤波器的使用方法。在opencv的C++中,这4个函数分别为:blur,GaussianBlur,meidaBlur,bilateralFilter.下面就这几个函数在opencv中的功能,以及参数做个介绍:

  1. 均值滤波:其函数声明为:void blur(InputArray src, OutputArray dst, Size ksize, Point anchor=Point(-1,-1), int borderType=BORDER_DEFAULT )。

这个函数在上一节中介绍过了,这里简单些一下。

功能:对输入的图像src进行均值滤波后用dst输出。

参数:src和dst当然分别是输入图像和输出图像。size为均值滤波器模板大小。Anchor为锚点(具体什么没看源码不懂),如果为Point(-1,-1),则锚点是滤波器的中心点。borderType为边缘点插值类型。

理解:以原图对应像素为中心的与模板中心重叠,将模板覆盖领域内全部像素求均值就是滤波后像素的值了。

  1. 高斯滤波:其函数声明为: void GaussianBlur(InputArray src, OutputArray dst, Size ksize, double sigmaX, double sigmaY=0, int borderType=BORDER_DEFAULT ) ;

功能:对输入的图像src进行高斯滤波后用dst输出。

参数:src和dst当然分别是输入图像和输出图像。Ksize为高斯滤波器模板大小,sigmaX和sigmaY分别为高斯滤波在横线和竖向的滤波系数(有点晦涩,等下解释)。borderType为边缘点插值类型。

理解:数字图像的滤波可以简单的这么理解,就是对原图像的每一个像素滤波,那么对应这个像素滤波后的值是根据其相邻像素(包括自己那个点)与一个滤波模板进行相乘即可。所以具体到高斯滤波,我们只要知道这个高斯滤波的模板即可。

那怎么确定这个模板呢?首先这个模板的大小为ksize,其每个数字的计算是这样的:

 

其中 是归一化系数,因为其和要为1.

为了简化,一般在二维图像处理中,ui和uj取0,sigma1和sigma2取相等。所以公式就简化为 :

因此很容易就计算出模板每个位置的数字了,简单吧!

但是要注意2点,第一点就是ksize的宽和高必须是奇数;第二点就是如果参数sigmaX=sigmaY=0,则实际用的是公式sigma = 0.3*((ksize-1)*0.5 - 1) + 0.8 .

  1. 中值滤波:其函数声明为void medianBlur(InputArray src, OutputArray dst, int ksize)。

功能:对输入的图像src进行中值滤波后用dst输出。

参数:src和dst当然分别是输入图像和输出图像。ksize为均值滤波器模板大小,因为模板为正方形,所以只有一个参数。

理解:以原图对应像素为中心的与模板中心重叠,将模板覆盖领域内全部像素排序后的中间值就是滤波后像素的值了,所以模板长度必须为奇数。

  1. 双向滤波:其函数声明为:void bilateralFilter(InputArray src, OutputArray dst, int d, double sigmaColor, double sigmaSpace, int borderType=BORDER_DEFAULT )

功能:对输入的图像src进行双向滤波后用dst输出。

参数:src和dst当然分别是输入图像和输出图像。d为每个像素领域的直径,sigmaColor为颜色空间的标准偏差,sigmaSpace为坐标空间的标准偏差。borderType为边缘点插值类型。

理解:暂时不明白双向滤波的工作原理,以后有时间弄懂再补上吧,也欢迎大家补上。

      就写到这里吧,输入公式和文字都累死了!并且写这种文章怎么感觉在写翻译文档呢!

转载于:https://www.cnblogs.com/tornadomeet/archive/2012/03/05/2379921.html

相关文章:

  • 流媒体服务器搭建实例——可实现录音,录像功能
  • Redis之hash数据结构实现
  • SCUT - G - 魔法项链 - 树状数组
  • SCUT - 482 - 生成树上的点 - Prufer
  • ACM算法相关资料
  • 洛谷 - P1462 - 通往奥格瑞玛的道路 - 二分 - Dijkstra
  • 洛谷 - P1522 - 牛的旅行 - Cow Tours - Floyd
  • wamp5环境配置基础教程
  • 模板 - Floyd
  • 这样的设计师,你们伤不起啊
  • 洛谷 - P1346 - 电车 - Dijkstra/01BFS
  • 图文解析五大外链误区
  • js中字符串操作函数
  • vsftpd每个虚拟用户的不同目录
  • 模板 - Prim
  • [笔记] php常见简单功能及函数
  • 【腾讯Bugly干货分享】从0到1打造直播 App
  • 【跃迁之路】【519天】程序员高效学习方法论探索系列(实验阶段276-2018.07.09)...
  • ➹使用webpack配置多页面应用(MPA)
  • create-react-app做的留言板
  • ES6简单总结(搭配简单的讲解和小案例)
  • JavaScript DOM 10 - 滚动
  • open-falcon 开发笔记(一):从零开始搭建虚拟服务器和监测环境
  • Python 使用 Tornado 框架实现 WebHook 自动部署 Git 项目
  • Python学习之路16-使用API
  • Rancher-k8s加速安装文档
  • SpiderData 2019年2月16日 DApp数据排行榜
  • 笨办法学C 练习34:动态数组
  • 分享一份非常强势的Android面试题
  • 理解在java “”i=i++;”所发生的事情
  • 你真的知道 == 和 equals 的区别吗?
  • 前端临床手札——文件上传
  • 让你的分享飞起来——极光推出社会化分享组件
  • 探索 JS 中的模块化
  • 延迟脚本的方式
  • 这几个编码小技巧将令你 PHP 代码更加简洁
  • 【运维趟坑回忆录 开篇】初入初创, 一脸懵
  • 3月7日云栖精选夜读 | RSA 2019安全大会:企业资产管理成行业新风向标,云上安全占绝对优势 ...
  • linux 淘宝开源监控工具tsar
  • Nginx惊现漏洞 百万网站面临“拖库”风险
  • Prometheus VS InfluxDB
  • ​HTTP与HTTPS:网络通信的安全卫士
  • !!【OpenCV学习】计算两幅图像的重叠区域
  • #Z0458. 树的中心2
  • (10)STL算法之搜索(二) 二分查找
  • (篇九)MySQL常用内置函数
  • (全注解开发)学习Spring-MVC的第三天
  • (十五)使用Nexus创建Maven私服
  • (转)GCC在C语言中内嵌汇编 asm __volatile__
  • (转)创业的注意事项
  • (轉貼) 寄發紅帖基本原則(教育部禮儀司頒布) (雜項)
  • ******之网络***——物理***
  • .dat文件写入byte类型数组_用Python从Abaqus导出txt、dat数据
  • .NET 6 在已知拓扑路径的情况下使用 Dijkstra,A*算法搜索最短路径
  • .NET CF命令行调试器MDbg入门(三) 进程控制