本文主要根据作者的理解整理而来,有什么错误之处,请大家共同讨论指出。

1、图像滤波

在三维计算机视觉领域,通常对于二维图像的特征抽取是很关键的第一步,这主要包括抽取二维图像上的边缘、角点、纹理等。通常从这些被称为基元图的组成部分中,我们可以提取图像的以下特征:

        1)不同物体边缘成像所带来的灰度跃变;

2)物体不同材料或者不同颜色组成部分之间的分界线会产生灰度跃变;

3)物体轮廓线与背景具有不同的反射特性,也会形成灰度值不连续;

4)物体受到光照会形成阴影,这也会形成层灰度的跃变。

从上面分析可以看出,如果能够较好的从二维图像中提取出这些信息,那么对于三维重建,物体定位,空间监控等后期目标能够有很好的支撑作用。而这些含有图像轮廓以及空间位置信息的点、线、面等特征,在图像上都体现为灰度值的不连续或者剧烈变化。也就是说,如果我们能够根据图像灰度矩阵找到灰度不连续的点位置,那么也就是实现了特征抽取。

不失一般性,从最简单的一维信号回忆,如果我们想从一维信号中找到其不连续的点,那么根据高等数学内容,可以对信号求导,其一阶导数局部最大值即为信号剧烈变化的点。

在二维函数中,梯度向量代表着函数的最大变化率方向,因此对于二维信号,可以采用其梯度向量的模来选取灰度值不连续点。这样在理想情况下,我们就可以用离散化的梯度逼近函数来检测图像灰度矩阵的灰度跃变位置,从而实现特征抽取。

现实中,有摄像机获取的图像,往往都存在噪声,而且信号并不存在理想的阶跃畸变,这样如果依然直接采用拉普拉斯算子进行灰度跃变检测,那样会产生很多的虚假特征点。因此,往往在图像处理之前,需要对灰度图进行滤波处理。

2、高斯滤波原理

高斯滤波是最常用的一种图像滤波方法,本文就要对这种滤波的思路以及具体的编程实现原理进行挖掘整理。

2.1噪声的特性总结

通常信息处理系统的目标是从测量到的带有噪声的信号中提取出真实的有用的信息,而往往真实有用信息是不可知的,因此只能通过滤波的方法进行信息估计。

在我们进行数学仿真或者误差评估是,往往认为传感器所引入的噪声服从正态分布(高斯白噪声),这样我们在进行滤波的时候就可以有针对性的来进行滤波器设计。

2.2滤波通俗理解

滤波就是根据观测某一随机过程的结果,对另一与之有关的随机过程进行估计的概率理论与方法。更通俗点讲,滤波就是建立的一个数学模型,通过这个模型来将图像数据进行能量转化,而能量低的就排除掉,噪声就是属于低能量部分。

通常从传感器所获得的数据都是离散的,常用的图像滤波方法都是根据像素点附近邻域像素的灰度值进行相应的加权平均所得(经过实际检验,通过这样,可以有效的消除近似白噪声的噪声信号,对于图像滤波来说,这会使得图像边缘相比滤波前模糊一点),不同的滤波方法这个权值大小以及所加权的数据范围不同。

2.3 高斯滤波

引入高斯滤波函数为:

该函数各向同性,其曲线是草帽状的对称图,该曲线对整个覆盖面积求积分为1。高斯滤波的思路就是:对高斯函数进行离散化,以离散点上的高斯函数值为权值,对我们采集到的灰度矩阵的每个像素点做一定范围邻域内的加权平均,即可有效消除高斯噪声。

3、高斯滤波离散化算法实现

可以发现很多教材以及网上的资料都描述高斯滤波的原理是采用高斯算子对图像进行卷积运算。其实在各个算法库如Matlab、OpenCV等,在实现的时候,就是采用一个矩阵模板进行加权运算,拿图像的八连通区域来说,中间点的像素值就等于八连通区的像素值的均值,这样达到平滑的效果,该模板我们常成为高斯核。

根据上述分析可知,高斯核是整个求解的关键。很显然,它是通过二维高斯函数计算得来的。这里给出离散高斯核矩阵的计算公式。

离散的高斯卷积核H: (2k+1)×(2k+1)维,其元素计算方法为:

其中Sigma为方差,k确定核矩阵的维数,关于这两个取值,在下文进行分析。

4、与matlab函数运行结果对比

这里对高斯卷积核的矩阵算法进行验证。

1)在matlab中用以下代码可以产生一个3×3的核。

filter=fspecial('gaussian',3,1);

所产生的核矩阵为:

filter =

0.0751    0.1238   0.0751

0.1238    0.2042   0.1238

0.0751   0.1238    0.0751

2)同样对于上述的公式,我们取k=1,Sigma=1,即可得到3×3的高斯卷积核如下:

上文说到,我们进行加权滤波,权系数之和必须为1,上面所求出的高斯滤波核函数同样的必须进行归一化:

由此可以证明该核函数计算方法的正确性。

5、OpenCv中cvSmooth函数的用法

该函数原型为:

void cvSmooth(const CvArr* src, CvArr* dst,

int smoothtype=CV_GAUSSIAN,

int param1=3, int param2=0,double param3=0, double param4=0 );

该函数前三个参数很容易理解,至于后四个参数以下进行分析。

1) 如果指定param1和param2,则代表核函数的行列,即为滤波窗口的宽度和高度;

2) Param3:高斯卷积的Sigma值

3) 如果用户希望采用非对称的高斯核,则引入param4,最后两个参数分别代表水平核以及垂直核维数;

4) 如果param3没有给出,则有前两个参数param1和param2计算出Sigma。这里的根据是高斯分布的特点(如图所示,数值分布在(μ—3σ,μ+3σ)中的概率为0.9974),如果核矩阵更大,那么相应的Sigma也更大,相反,如果Sigma更大,那么核矩阵覆盖范围也更大。具体到OpenCv下,用如下公式进行计算(根据其源代码显示)。

5)同样的根据这个公式可知,如果param1和param2为0(或者没有给出),那么滤波窗口的尺寸,则有后两个参数代表的Sigma来确定。

6、总结

本文主要整理了本人最近几天学习的心得体会,主要包括对滤波的理解,对高斯滤波方法原理以及实现过程的初窥。同时对采用OpenCV进行滤波实现的函数也给出了相应的解释。在此还要再说一下,在选择Sigma时要注意,如果选的过大,那么会加深滤波程度,这样会导致图像边缘模糊,不利于下一步的边缘检测,如果过小,则滤波效果不佳,对于该参数的选取目前本人也没什么较好的理解,在此引出问题,希望大家共同探讨进步。

参考资料:

[1] http://zh.wikipedia.org/wiki/%E6%AD%A3%E6%80%81%E5%88%86%E5%B8%83

[2]http://www.opencv.org.cn/index.php/Cv%E5%9B%BE%E5%83%8F%E5%A4%84%E7%90%86

[3] http://www.cnblogs.com/donj/articles/1656122.html

[4]学习OpenCV中文版

[5]计算机视觉(马颂德版)

欢迎登陆我的个人主页,hello2019,查看原文:http://richardliu.cn/

高斯图像滤波原理及其编程离散化实现方法相关推荐

  1. matlab怎么根据波宽度去波,使用Matlab图像处理(三)——图像滤波原理

    既然是去除噪声,接下来我们就介绍几种常见的噪声.02 - 常见噪声种类? 首先我们介绍最著名的噪声--高斯噪声:无论是做什么的小伙伴,或多或少都会听说过高斯噪声.小白不想把复杂的数学公式拿上进行讲解, ...

  2. OpenCV——几种图像滤波总结(python实现和c++实现)

    OpenCV--图像滤波原理及实现 4.1 简介 图像的实质是一种二维信号,滤波是信号处理中的一个重要概念.在图像处理中,滤波是一种非常常见的技术,它们的原理非常简单,但是其思想却十分值得借鉴,滤波是 ...

  3. python一维平滑滤波_高斯滤波器的原理及其实现过程(附模板代码)

    本文主要介绍了高斯滤波器的原理及其实现过程高斯滤波器是一种线性滤波器,能够有效的抑制噪声,平滑图像.其作用原理和均值滤波器类似,都是取滤波器窗口内的像素的均值作为输出.其窗口模板的系数和均值滤波器不同 ...

  4. 【opencv】(3) 图像滤波:均值、方框、中值、高斯

    内容有: 均值滤波 cv2.blur(),方框滤波 cv2.boxFilter(),高斯滤波 cv2.GaussianBlur(),中值滤波 cv2.medianBlur() 滤波可理解为,平均卷积操 ...

  5. 图像滤波常用算法实现及原理解析

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 导读 图像滤波是一种非常重要的图像处理技术,本文详细介绍了四种常见 ...

  6. python高斯滤波和降噪_高斯滤波原理及python实现

    高斯滤波器时一种线性平滑滤波器,主要适用处理高斯噪声,所以在了解高斯滤波之前,我们首先熟悉一下高斯噪声.噪声在图像中表现的通常是引起视觉效果的孤立像素点和像素块,简单说噪声点就是会给图像带来干扰,让图 ...

  7. Halcon图像滤波方法与原理概述

    目录 简介 Halcon算子与算法原理 基础滤波 a.均值滤波 b.中值滤波 c.高斯滤波 d.导向滤波 简介 图像滤波,即在尽量保留图像细节特征的条件下对目标图像的噪声进行抑制,是图像预处理中不可缺 ...

  8. 【图像处理】——图像滤波(Python+opencv实现三种方法:均值滤波、中值滤波、高斯滤波等)

    目录 一.什么是滤波以及滤波的目的? 二.均值滤波(cv2.blur()) 1.原理 2.关键代码 3.封装代码 二.中值滤波(cv2.medianBlur()) 1.原理 2.关键代码 3.封装代码 ...

  9. 高斯滤波与双边滤波原理、MATLAB实现及结果对照

    本文详细介绍高斯滤波和双边滤波的原理并给出MATLAB实现,最后对照高斯滤波与双边滤波的效果. 目录 一.滤波原理 1.1 一维高斯分布 1.2 二维高斯分布 1.3 高斯滤波总结 二.双边滤波 1. ...

最新文章

  1. mysql general bin区别_MySQL中几种常见的日志
  2. 理解ThreadLocal 2
  3. python翻译成matlab_matlab语言转译成python
  4. 基于连通域字符分割的流程_基于OpenCV及连通域分析进行文本块分割
  5. 【Tools】MarkDown教程(五)-CSDN MarkDown介绍
  6. asp.net中生命周期的浅析
  7. 借助财务客户评估解决方案在云中构建AppDev
  8. php session页面传值,PHP session在页面间传递的问题
  9. 第8章6节MonkeyRunner启动运行过程-启动Monkey 2
  10. 软件测试--selenium脚本编写注意点(一)
  11. docker使用阿里云镜像仓库docker
  12. 看看DelayQueue源码
  13. 一封来自老男孩的学生的辞职信!
  14. U-net,及其和FCN的区别
  15. 800个小炒,一天吃一个叫你吃三年
  16. 图灵工业机器人说明书_从2020世界人工智能大会,看工业机器人领域领军企业布局|机器人大讲堂...
  17. 海马玩安卓模拟器linux,Droid4X 0.8.4 海马玩安卓模拟器 安卓的福音
  18. 关于ubantu安装cmake
  19. CSS3解决连续英文字符或数字不能自动换行的问题
  20. winform遍历bartender_标签打印软件 - 第25页 共52页 - BarTender

热门文章

  1. 货场RFID智能称重管理系统
  2. 【Azure Data Platform】ETL工具(13)——ADF并行加载多个文件
  3. 2020年最新android端前沿技术架构
  4. 一些兼容性的问题收集
  5. 健康保险公司如何进行客户体验管理XM?
  6. (八十)第五章编程练习
  7. java异常处理和文本i o_JAVASE之JAVAI/O流篇
  8. Eclipse 寻找迷失的ID
  9. Markdown 编辑阅读器使用方法
  10. Jetpack Compose 自定义流式布局