(转载)计算机视觉、图像处理中常见的滤波操作
前言:计算机视觉是让计算机理解图像与视频,本系列博客的目的在于加深自己在学习计算机视觉过程中对相关知识理解与回顾。其中很多内容参照:教材《ComputerVision: Algorithms and Applications》,教材《Learning Image Processing with OpenCV》工具书《LearningOpenCV》,国外大学的课程《Computer Vision》和课程《ComputerVision》。
图像滤波既可以在实域进行,也可以在频域进行。图像滤波可以更改或者增强图像。通过滤波,可以强调一些特征或者去除图像中一些不需要的部分。滤波是一个邻域操作算子,利用给定像素周围的像素的值决定此像素的最终的输出值。(个人认为《LearningImage Processing with OpenCV》中这一段写的很好:Image filtering is a process to modify or enhance images.Emphasizing certain features or removing others in an image are examples ofimage filtering. Filtering is a neighborhood operation. The neighborhood is aset of pixels around a selected one. Image filtering determines the outputvalue of a certain pixel located at a position (x,y) by performing someoperations with the values of the pixels in its neighborhood.)
图像滤波可以通过公式:
进行计算,其中K为滤波器,在很多文献中也称之为核(kernel)。常见的应用包括去噪、图像增强、检测边缘、检测角点、模板匹配等。其中用于平滑图像的常见滤波算子包括(Code:https://github.com/opencv/opencv/blob/master/samples/cpp/tutorial_code/ImgProc/Smoothing.cpp):
均值滤波(normalized box filter):用其像素点周围像素的平均值代替元像素值,在滤除噪声的同时也会滤掉图像的边缘信息。在OpenCV中,可以使用boxFilter和blur函数进行均值滤波。均值滤波的核为:
高斯滤波(Gaussian filter):高斯滤波为最常用的滤波器,具有可分离性质,可以把二维高斯运算转换为一维高斯运算,其本质上为一个低通滤波器。在OpenCV中可通过函数GaussianBlur进行操作。
中值滤波(median filter):中值滤波用测试像素周围邻域像素集中的中值代替原像素。中值滤波去除椒盐噪声和斑块噪声时,效果非常明显。在OpenCV中,可以使用函数medianBlur进行操作。
双边滤波(bilateral filter):双边滤波在平滑图像时能够很好的保留边缘特性,但是其运算速度比较慢。在OpenCV中,可以使用函数bilateralFilter进行操作。
除了平滑去噪,图像锐化,求边缘等也是常见的图像滤波应用。这类滤波器常常使用一节或者二阶差分(或微分,对于数字图像而言,其为离散信号,长用差分代替导数)核算子对图像进行滤波。一节差分常用于求取图像边缘。二阶差分常用于图像增强。常用的这类算子包括:
Sobel operator:Sobel算子通过计算水平和垂直方向上的一节差分来进行计算。在OpenCV函数中,可通过使用Sobel函数进行计算。
Laplacian operator:Laplacian算子通过计算二阶差分(微分)来进行计算。在OpenCV函数中,可通过使用Laplacian函数进行计算。
除了上面列举的较为经典的滤波器(或者说是核算子)外,在OpenCV中也可以自己定义自己的滤波器,然后使用filter2D函数进行运算。
对于以上在实域进行滤波的滤波器来说,边界问题是一个不得不考虑的事情。通常有以下几种办法来进行处理:
(black) (wrap around) (copy edge) (reflectacross edge)
除了在实域进行滤波之外,在频域也可以进行滤波。傅里叶变换保存每个频率对于的幅度和相位信息,其中幅度表示在某个特定的频率信号有多少信号。相位则表示信号的空间信息,主要指方向信息。
在频域中滤波主要就是设计相应的低通、高通或者带通等滤波器以实现保留某些频率,滤除其余频率的目的。此外在实域中的卷积运算可以放到频域中做乘积运算,可以降低运算复杂度。
(转载)计算机视觉、图像处理中常见的滤波操作相关推荐
- JavaScript中常见的字符串操作函数及用法汇总
转载地址:http://www.jb51.net/article/65358.htm 这篇文章主要介绍了JavaScript中常见的字符串操作函数及用法,实例汇总了javascript常见的字符串转换 ...
- Opencv中常见的滤波方法
Opencv中常见的滤波方法 - 随性岁分享 - 博客园 opencv:基于opencv的五种滤波方法_M海洋的博客-CSDN博客_opencv滤波 OpenCV3学习(4.2)--图像常用滤波方法( ...
- 图像处理中的均值滤波和中值滤波
在开始我们今天的博客之前,我们需要先了解一下什么是滤波: openCV之中值滤波&均值滤波(及代码实现)首先我们看一下图像滤波的概念.图像滤波,即在尽量保留图像细节特征的条件下对目标图像的噪声 ...
- 转载:建设工程中常见的项目建设管理模式有哪些(DBB模式、EPC模式)
原文标题:建设工程中常见的项目建设管理模式有哪些? - 知乎 (zhihu.com) 一.DBB模式 即设计-招标-建造(Design-Bid-Build)模式,这是最传统的一种工程项目管理模式.该管 ...
- 错误内存【读书笔记】C程序中常见的内存操作有关的典型编程错误
题记:写这篇博客要主是加深自己对错误内存的认识和总结实现算法时的一些验经和训教,如果有错误请指出,万分感谢. 对C/C++程序员来讲,内存管理是个不小的挑战,绝对值得慎之又慎,否则让由上万行代码构成的 ...
- 转载:编程中常见的Foo,bar是什么意思
原始链接:编程中常见的Foo,是什么意思.._xhmz的专栏-CSDN博客_foo是什么意思 编程中常见的Foo,是什么意思.. xhmz 于 2014-07-28 13:08:34 发布 4796 ...
- C语言中常见的置位操作(置0或置1)转载
如何对某一位置0或者置1? 写成宏,方便移植 #define setbit(x,y) x|=(1<<y) //将X的第Y位置1 #define clrbit(x,y) x&=~(1 ...
- C语言中常见的置位操作(置0或置1)
如何对某一位置0或者置1? 方法一: 写成宏,方便移植 #define setbit(x,y) x|=(1<<y) //将X的第Y位置1 #define clrbit(x,y) x& ...
- 转载iOS开发中常见的警告及错误
iOS警告收录及科学快速的消除方法 前言:现在你维护的项目有多少警告?看着几百条警告觉得心里烦么?你真的觉得警告又不是错误可以完全不管么? 如果你也被这些问题困惑,可以和我一起进行下面的操作.其实 ...
最新文章
- 操作系统 进程调度-银行家算法实验报告
- cocos2d JS 自定义事件分发器(接收与传递数据) eventManager
- 对学校的希望和寄语_放飞青春梦,奋斗十四五——2020年福州文教职业中专学校寄宿生联欢晚会...
- C# 关于MVC框架的简单实例(计算器)
- 信息学奥赛一本通(1114:白细胞计数)
- matlab检查错误 函数,检查代码中的错误和警告
- 【目标跟踪】|MOSSE原理及对应代码解释 matlab C
- 常用手机屏幕显示级别与分辨率对照
- 明解C语言(入门篇)第十章
- 酒桌上的潜规则和技巧,男人必学
- Astalavista被蹂躏过程 转载自baoz net
- few-shot vid2vid部署安装及测试
- qq2018内测android,社交无止境:QQ for Android 4.7内测版
- Python编写随机一百个人的姓名,加面试考核得分
- 方舟正版服务器连接超时,方舟连接超时解决方案是什么
- halcon 将数据保存到excel_halcon保存数据到excel表格-怎样把图像里面的数据提取到excel表格里面去?...
- OSPF状态切换以及包内容的交互,以及如何根据LSDB还原单区域拓扑
- 云计算,社交网络,移动互联网
- 工作这两年的经验与教训
- 互联网寒冬,我们应该抓住什么救命稻草?