opencv —— boxFilter、blur、GaussianBlur、medianBlur、bilateralFilter 线性滤波(方框滤波、均值滤波、高斯滤波)与非线性滤波(中值滤波、双边滤波)
图像滤波,指在尽量保留图像细节特征的条件下对目标图像的噪声进行抑制,是图像与处理中不可缺少的操作。
邻域算子,指利用给定像素及其周围的像素值,决定此像素的最终输出值的一种算子。线性邻域滤波器就是一种常见的邻域算子,像素的输出值取决于输入像素及其周围像素的加权和,权重是邻域算子相应位置上的值。
线性滤波概念:
原始数据与滤波结果是一种算术运算,即用加减乘除等运算实现,如均值滤波器(模板内像素灰度值的平均值)、高斯滤波器(高斯加权平均值)等。
非线性滤波概念:
原始数据与滤波结果是一种逻辑关系,即用逻辑运算实现,如最大值滤波器(膨胀)、最小值滤波器(腐蚀)、中值滤波器等,是通过比较一定邻域内的灰度值大小来实现的。
线性滤波:boxFilter 方框滤波、blur 均值滤波、GaussianBlur 高斯滤波
boxFilter 方框滤波
void boxFilter (InputArray src, OutputArray dst, int ddepth, Size ksize, Point anchor = Point (-1, -1), bool normalize = true, int borderType = BRODER_DEFAULT);
- src,输入图像,即原图像,填 Mat 类的对象即可。待处理的图像深度应该是 CV_8U、CV_16U、CV_16S、CV_32F、CV_64F。
- dst,目标图像,需要和原图像有一样的尺寸和类型。
- ddepth,输出图像的深度。“-1”代表使用原图深度,即 src.depth() 。
- ksize,内核大小。形式为 Size(x,y)
- anchor,锚点,即被平滑的那个点。默认值为 Point (-1, -1),表示取核的中心。
- normalize,一个标识符,表示内核是否被其区域归一化。默认值为 true。当 normalize = true 时,方框滤波就变成了均值滤波。
boxFilter 所用到的核表示如下:

其中

blur 均值滤波
void blur (InputArray src, OutputArray dst, Size ksize, Point anchor = Point (-1, -1), int borderType = BRODER_DEFAULT);
- 函数变量与 boxFilter 方框滤波几乎一样。
blur 所用到的核表示如下:

GaussianBlur 高斯滤波
void GaussianBlur (InputArray src, OutputArray dst, Size ksize, double sigmaX, double sigmaY = 0, int borderType = BRODER_DEFAULT);
GaussianBlur 两种常见的核表示如下:

高斯模板是通过高斯函数计算出来的,公式如下:
以3×3 的高斯滤波器模板为例,以模板的中心位置为坐标原点进行取样。模板在各个位置的坐标,如下所示(x轴水平向右,y轴竖直向上)。

- sigmaX (σx),表示高斯核函数在X方向的的标准偏差。
- sigmaY (σy),表示高斯核函数在Y方向的的标准偏差。若sigmaY为零,就将它设为sigmaX,如果sigmaX和sigmaY都是0,那么就由ksize.width和ksize.height计算出来。


非线性滤波: medianBlur 中值滤波、bilateralFilter 双边滤波
medianBlur 中值滤波
void medianBlur (InputArray src, OutputArray dst, int ksize);
- ksize,滤波器的大小,必须是大于一的奇数。
- 其他函数变量与 boxFilter 方框滤波几乎一样。
bilateralFilter 双边滤波
双边滤波也是采用加权平均的方法,用周边像素亮度值的加权平均代表某个像素的强度,所用的加权平均基于高斯分布。最重要的是,双边滤波的权重不仅考虑了像素的欧氏距离(如普通的高斯低通滤波,只考虑了位置对中心像素的影响),还考虑了像素范围域中的辐射差异(例如卷积核中像素与中心像素之间相似程度、颜色强度,深度距离等),在计算中心像素的时候同时考虑这两个权重。
void bilateralFilter (InputArray src, OutputArray dst,int d, double sigmaColor, double sigmaSpace, int borderType = BRODER_DEFAULT);
- d,过滤过程中每个像素邻域的直径。如果 d < 0,则会根据第五个参数 sigmaSpace 来计算。
- sigmaColor(σcolor),颜色空间滤波器的 σ 值,这个参数越大,表明该像素邻域内有越宽广的颜色被混到一起。
- sigmaSpace(σspace),坐标空间滤波器的 σ 值,它的值越大,意味着越远的像素会相互影响,从而使更大的区域中足够相似的颜色获取相同颜色。当 d > 0 时,d 指定了邻域大小且与 sigmaSpace 无关,否则,d 正比于 sigmaSpace。
- 其他函数变量与 boxFilter 方框滤波几乎一样。
opencv —— boxFilter、blur、GaussianBlur、medianBlur、bilateralFilter 线性滤波(方框滤波、均值滤波、高斯滤波)与非线性滤波(中值滤波、双边滤波)的更多相关文章
- 【OpenCV】邻域滤波:方框、高斯、中值、双边滤波
原文:http://blog.csdn.net/xiaowei_cqu/article/details/7785365 邻域滤波(卷积) 邻域算子值利用给定像素周围像素的值决定此像素的最终输出.如 ...
- OpenCV计算机视觉学习(4)——图像平滑处理(均值滤波,高斯滤波,中值滤波,双边滤波)
如果需要处理的原图及代码,请移步小编的GitHub地址 传送门:请点击我 如果点击有误:https://github.com/LeBron-Jian/ComputerVisionPractice &q ...
- [学习opencv]高斯、中值、均值、双边滤波
http://www.cnblogs.com/tiandsp/archive/2013/04/20/3031862.html [学习opencv]高斯.中值.均值.双边滤波 四种经典滤波算法,在ope ...
- 机器学习进阶-阈值与平滑-图像平滑操作(去噪操作) 1. cv2.blur(均值滤波) 2.cv2.boxfilter(方框滤波) 3. cv2.Guassiannblur(进行高斯滤波) 4. cv2.medianBlur(进行中值滤波)
1.cv2.blur(img, (3, 3)) 进行均值滤波 参数说明:img表示输入的图片, (3, 3) 表示进行均值滤波的方框大小 2. cv2.boxfilter(img, -1, (3, ...
- OpenCv高斯,中值,均值,双边滤波
#include "cv.h" #include "highgui.h" #include <iostream> using namespace s ...
- OpenCV笔记(1)(图片读取与现实、色彩空间、基础运算、均值方差、逻辑运算、泛洪填充、均值中值及自定义平滑)
一.图片读取和显示 import cv2 as cv # 图片读取cv.imread(img_path) car_img = cv.imread("car1.png") # 图片显 ...
- opencv.js双边滤波 磨皮处理
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta http ...
- 双边滤波算法的简易实现bilateralFilter
没怎么看过双边滤波的具体思路,动手写一写,看看能不能突破一下. 最后,感觉算法还是要分开 水平 与 垂直 方向进行分别处理,才能把速度提上去. 没耐性写下去了,发上来,给大伙做个参考好了. 先上几张效 ...
- cv2.bilateralFilter 双边滤波
双边滤波bilateralFilter 双边滤波是一种非线性的滤波方法,是结合图像的空间邻近度和像素值相似度的一种折衷处理,同时考虑空间与信息和灰度相似性,达到保边去噪的目的,具有简单.非迭代.局部处 ...
随机推荐
- 自学Java第一章——《Java概述》
1.1 Java历史 Java诞生于SUN(Stanford University Network),09年SUN被Oracle(甲骨文)收购. Java之父是詹姆斯.高斯林(James Goslin ...
- Codeforces_801
A.直接暴力就行了,先把能组合的按线性组合掉,再枚举剩下相邻没用过的. #include<bits/stdc++.h> using namespace std; string s; ] = ...
- Codeforces_739_B
http://codeforces.com/problemset/problem/739/B dfs,记录距离前缀和,每次找到离最近的不符合的点. #include<iostream> # ...
- android studio sqlite实际应用中存在的问题
原项目已上传到github long f = dbdatabase.update("user", values, "id=?", new String[]{St ...
- 林大妈的JavaScript进阶知识(二):JS异步行为
JavaScript 是单线程执行的 JavaScript运行在浏览器中.浏览器是多线程的,但只分配了其中一条给JavaScript,作为它的主线程.对于编码者来说,JavaScript是单线程的.因 ...
- ELF文件之六——使用链接脚本-2个函数-data-bss-temp
main.c int enable; ; int main() { int temp; ; } int add() { ; } elf反汇编结果如下,可以看出main函数中的栈多开了8字节,虽然局部变 ...
- VNC 远程桌面 连接(安装桌面程序)
1.修改linux启动方式 # vi /etc/inittab 将3改为5 id:5:initdefault: 2.关闭防火墙(或者单独打开接口) #s ...
- 一键安装MySQL5.6.43脚本
[root@lamp ~]# cat /server/scripts/mysql-5.6.43_install.sh #!/bin/bash #卸载系统自带的Mysql /bin/rpm -e $(/ ...
- light oj 1014 - Ifter Party分解因子
1014 - Ifter Party I have an Ifter party at the 5th day of Ramadan for the contestants. For this r ...
- 显示二维码-智能TFT模块
应用范例: 使用 TOPWAY Smart LCD (HMT050CC-C) 显示二维码 第一步 建立工程 ① 开 Editor 软件, 点击菜单栏建立新工程File --> New Proje ...