通常,图像处理软件会提供"模糊"(blur)滤镜,使图片产生模糊的效果。

"模糊"的算法有很多种,其中有一种叫做"高斯模糊"(Gaussian Blur)。它将正态分布(又名"高斯分布")用于图像处理。

本文介绍"高斯模糊"的算法,你会看到这是一个非常简单易懂的算法。本质上,它是一种数据平滑技术(data smoothing),适用于多个场合,图像处理恰好提供了一个直观的应用实例。

1. 高斯模糊的原理

所谓"模糊",可以理解成每一个像素都取周边像素的平均值

上图中,2是中间点,周边点都是1。

"中间点"取"周围点"的平均值,就会变成1。在数值上,这是一种"平滑化"。在图形上,就相当于产生"模糊"效果,"中间点"失去细节。

显然,计算平均值时,取值范围越大,"模糊效果"越强烈

上面分别是原图、模糊半径3像素、模糊半径10像素的效果。模糊半径越大,图像就越模糊。从数值角度看,就是数值越平滑。

接下来的问题就是,既然每个点都要取周边像素的平均值,那么应该如何分配权重呢?

如果使用简单平均,显然不是很合理,因为图像都是连续的,越靠近的点关系越密切,越远离的点关系越疏远。因此,加权平均更合理,距离越近的点权重越大,距离越远的点权重越小。

2. 高斯分布(又名正态分布)的权重

正态分布显然是一种可取的权重分配模式。

在图形上,正态分布是一种钟形曲线,越接近中心,取值越大,越远离中心,取值越小。
计算平均值的时候,我们只需要将"中心点"作为原点,其他点按照其在正态曲线上的位置,分配权重,就可以得到一个加权平均值。

3. 高斯分布及其概率密度函数

3.1 高斯分布及其概率密度函数定义

其概率密度函数又称为“高斯函数”

如上所示,如果只有一个变量,称之为一维高斯分布,其概率密度函数称为一维高斯函数

3.2 高斯函数各部分的意义

这里将能够对曲线产生影响的3个部分指代为a,b,c。

a具体公式为,b公式为 即均值,c表示即标准差。

a表示得到曲线的高度,b是指曲线在x轴的中心,c指width(与半峰全宽有关),图形如下:

3.3 3sigma的引入

再次回到这张图,这张图的横轴的0.5,1.5,2,2.5表示几个标准差大小,0.5即0.5个标准差大小,具体数值等于0.5sigma。1即1个标准差大小,具体数值为sigma,以此类推。其中19.1%表示分布在0-0.5sigma区间内占整个分布的19.1%,15%表示分布在0.5-1sigma区间内占整个分布的15%,以此类推。

这个分布可以一直取值,不停地向两边延伸,但是分了方便计算以及精度的考量,当我们取-3sigma到3sigma区间内时,此时该段区间内占整个分布的99.8%,我们就大致认为该段分布已经包含了所有的情况。(如果有理解错误请指正啊)

3.4 二维高斯函数的引入

一维高斯函数只能在一个方向上,而图像是二维的,此时引入二维高斯函数是一个很好地解决方案。

一维高斯函数的公式如下所示:

其中,μ是x的均值,σ是x的方差。因为计算平均值的时候,中心点就是原点,所以μ默认等于0。得到以下公式:

根据一维高斯函数,可以推导得到二维高斯函数:

有了这个函数 ,就可以计算每个点的权重了。

一维高斯函数推广到多维高斯函数_mjiansun的专栏-CSDN博客

4. 高斯函数运用模糊的基本认识

将高斯核函数得出的卷积核模板称之为高斯核

有了高斯函数的工具,那么怎么将他运用到图像中呢?

假设一个高斯函数的卷积和模板是5*5,那么他这25个点的x,y具体取值为:

此时只需要假定一个sigma值,即可确定一个高斯核。但是这个高斯核不完整,因为他求出的5*5的卷积核进行卷积操作时,改变了图像原始的0-255的范围。为解决该问题只需要将卷积核归一化即可,也就是卷积核中每一个值除以卷积的总和。

具体的高斯核例如:

4.1 实际使用的例子

假定中心点的坐标是(0,0),那么距离它最近的8个点的坐标如下:

远的点以此类推。

为了计算权重矩阵,需要设定σ的值。假定σ=1.5,则模糊半径为1的权重矩阵如下:

这9个点的权重总和等于0.4787147,如果只计算这9个点的加权平均,还必须让它们的权重之和等于1,因此上面9个值还要分别除以0.4787147,得到最终的权重矩阵。

有了权重矩阵,就可以计算高斯模糊的值了。

假设现有9个像素点,灰度值(0-255)如下:

每个点乘以自己的权重值:

得到

将这9个值加起来,就是中心点的高斯模糊的值。

对所有点重复这个过程,就得到了高斯模糊后的图像。如果原图是彩色图片,可以对RGB三个通道分别做高斯模糊。

5. 二维高斯核的可分离核形式

引入二维高斯核的可分离形式,主要是为了计算加速。

原始的卷积过程为:

这需要对矩阵切割,就是取一部分行取一部分列,影响执行速度。将高斯核分解为一个行向量和一个列向量的操作时,减少时间复杂度,能产生明显加速。

5.1 基本概念

此段内容参考: 二维高斯模糊和可分离核形式的快速实现_zxpddfg的专栏-CSDN博客_分离高斯模糊

上述中的高斯核为:

这和我们想象中的不一样,缺少了

这一项。

其实我们可以推导一下:

5.2 可分离核形式实现

其实这个公式的由来也很简单:

那么高斯核矩阵又可以改写成归一化常数乘以一个列向量乘以一个行向量的形式,如下

5.3 实例分析

5.3.1 基本实现

5.4 符合局部性原则的内存访问加速

5.5 扩展与总结

6. 边界点的处理

如果一个点处于边界,周边没有足够的点,怎么办?

一个变通方法,就是把已有的点拷贝到另一面的对应位置,模拟出完整的矩阵。(其实这个在本文5.3.1 基本实现中已经有具体实例。)

7. 参考文献

[1] How to program a Gaussian Blur without using 3rd party libraries

[2] 二维高斯模糊和可分离核形式的快速实现_zxpddfg的专栏-CSDN博客_分离高斯模糊

【图像处理】高斯模糊、高斯函数、高斯核、高斯卷积操作相关推荐

  1. 图像处理中的数学基础--高斯函数(Gaussian Function)分析

    摘要 论文中遇到很重要的一个元素就是高斯核函数,但是必须要分析出高斯函数的各种潜在属性,本文首先参考相关材料给出高斯核函数的基础,然后使用matlab自动保存不同参数下的高斯核函数的变化gif动图,同 ...

  2. AI笔记: 计算机视觉之SIFT特征检测: 尺度空间、二维高斯函数、高斯金字塔

    SIFT概述 SIFT的全称是Scale Invariant Feature Transform(尺度不变特征变换),是由加拿大教授David G.Lowe在1999年发表于计算机视觉国际会议,200 ...

  3. 高斯函数(Gaussian function)的详细分析

    摘要 论文中遇到很重要的一个元素就是高斯核函数,但是必须要分析出高斯函数的各种潜在属性,本文首先参考相关材料给出高斯核函数的基础,然后使用matlab自动保存不同参数下的高斯核函数的变化gif动图,同 ...

  4. 高斯低通滤波 matlab_一维和二维高斯函数及其一阶和二阶导数

    二维高斯函数 高斯函数在图像滤波.边缘检测等中发挥着重要的作用.高斯滤波是典型的低通滤波,对图像有平滑作用.同时,高斯函数的一阶.二阶导数也可以用于高通滤波,比如canny算子中用到的是高斯函数的一阶 ...

  5. 基于BP神经网络的非线性函数拟合(一维高斯函数)研究-含Matlab代码

    目录 一.引言 二.BP神经网络的结构与原理 2.1 信息前向传播 2.2 误差的反向传播过程 三.基于BP神经网络的非线性函数拟合 3.1 数据生成 3.2 神经网络拟合结果 四.参考文献 五.Ma ...

  6. 高斯分布(正态分布)(高斯函数)(Gaussian)(高斯噪声)

    高斯分布就是正态分布 有两个参数,期望μ和方差σ^2, N(μ,σ^2) 当μ = 0,σ = 1时的正态分布是标准正态分布 一维高斯函数 二维高斯函数 高斯噪声 高斯噪声是指它的概率密度函数服从高斯 ...

  7. 高斯函数曲线及简单积分

    高斯函数曲线及简单积分 一.高斯函数的分布曲线 高斯函数形式 其中a.b与c为实数常数,且a> 0. 在统计学与概率论中,高斯函数是**正态分布**的密度函数: 服从N(μ,σ^2),期望值μ决 ...

  8. 卷积层参数个数计算公式,卷积操作的计算复杂度

    卷积神经网络算法是什么? 一维构筑.二维构筑.全卷积构筑. 卷积神经网络(ConvolutionalNeuralNetworks,CNN)是一类包含卷积计算且具有深度结构的前馈神经网络(Feedfor ...

  9. OpenCV(C++版本)基础相关(7):直方图均衡化、图像卷积操作、高斯模糊、高斯双边模糊、实时人脸检测案例

    文章目录 二十六.直方图均衡化 26.1 quickopencv.h 26.2 QuickDemo.cpp 26.3 test.cpp 二十七.图像卷积操作 27.1 quickopencv.h 27 ...

  10. 高斯函数以及在图像处理中的应用总结

    1.一维高斯函数: a表示得到曲线的高度,b是指曲线在x轴的中心,c指width(与半峰全宽有关),图形如下: . 2.根据一维高斯函数,可以推导得到二维高斯函数: 在图形上,正态分布是一种钟形曲线, ...

最新文章

  1. python使用什么函数接收用户输入的数据_python 3.x:调用和执行函数的用户输入...
  2. java连接kafka api_Kafka-JavaAPI(Producer And Consumer)
  3. android多屏幕适配注意几点
  4. Spring3 M2 quartz-2.1.7 解决bean不能注入问题
  5. 华东交通大学计算机调剂,华东交通大学2018考研调剂信息
  6. 有关UNLIMITED TABLESPACE权限
  7. 201114阶段二qt自定义图元类
  8. JDK9的新特性:JVM的xlog
  9. Python 之数据类型
  10. Python 为了提升性能,竟运用了共享经济!赶紧看看!!
  11. 多线程的那点儿事(之生产者-消费者)
  12. Nagios监控HP硬件状态
  13. java filter重定向_Java Filter(过滤器)——重定向
  14. 老华为交换机S3500配置SSH
  15. java考试系统倒计时的实现_(Java程序设计)第11章设计考试系统中的倒计时.ppt
  16. pdf怎么压缩文件到最小?pdf文件怎么变小内存?
  17. mac上的android模拟器下载安装,Mac电脑上安装安卓模拟器,Mac如何安装Android模拟器...
  18. php 读取微信对账单,扣丁学堂PHP培训简述PHP如何实现微信对账单处理
  19. 选型宝访谈:怎样构建端到端的IT透视能力?
  20. 动态圣诞树html,圣诞了,送大家一颗HTML5圣诞树

热门文章

  1. 读react.js小书 01
  2. Error during WebSocket handshake: Sent non-empty ‘Sec-WebSocket-Protocol‘ header but no response was
  3. java 做窗体_java怎么做窗体
  4. 高校邦后台挂课答题助手可后台可多开可答题
  5. Java 大白话讲解设计模式之 -- 建造者(Builder)模式
  6. 开源一个cmpp协议转http协议项目
  7. 雕刻机可以制作PCB
  8. 面试之MySQL调优问题
  9. java断点下载文件_java实现文件断点续传下载功能
  10. BI项目规划的四个建议