高斯模糊浅析_ps高斯模糊没反应

高斯模糊浅析_ps高斯模糊没反应所谓高斯模糊,就是指一个图像与二维高斯分布的概率密度函数做卷积。它的效果如下:是不是有点像变成了近视眼的感觉?没错,高斯模糊常常用来模拟人眼中的物体变远、变快的效果。在照片处理中,我们常常将背景施以高

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

      所谓高斯模糊,就是指一个图像与二维高斯分布的概率密度函数做卷积。它的效果如下:

高斯模糊浅析_ps高斯模糊没反应

是不是有点像变成了近视眼的感觉?没错,高斯模糊常常用来模拟人眼中的物体变远、变快的效果。在照片处理中,我们常常将背景施以高斯模糊,使得背景仿佛变远了,从而突出前景的人物或物体。一些所谓“先拍照,后对焦”的技术利用的也是高斯模糊这个效果。若想弄出视点飞快移动的效果,也可以对背景使用高斯模糊。在一些CG动画中,视点移动得越快,背景将被施以越重的高斯模糊,以模拟人的视觉特点。事实上,在早期对人眼的视觉特性研究中,就是使用高斯模糊为模型近似模拟人眼的特性。但是我们知道,人眼的原理十分复杂,并非一个函数就可以模拟得了的。实际上人眼的特性近似于一个带通滤波器,而非高斯模糊这样的低通滤波器。

      说回高斯模糊。前面说了高斯模糊是指一个图像与二维高斯分布的概率密度函数做卷积。高斯分布即正态分布。由于图像是离散的,所以高斯分布的概率密度函数需要先做采样才能与图像进行卷积。

      为简便起见,下面我们将“高斯分布的概率密度函数”简称为“高斯函数”,虽然它只是高斯函数的一个特例。真正的高斯函数为
高斯模糊浅析_ps高斯模糊没反应

      若不特别强调,以下出现的“高斯函数”均指“高斯分布的概率密度函数”。

      一维的高斯函数如下,其中μ为均值,σ为标准差。

高斯模糊浅析_ps高斯模糊没反应 

      在图像分析方面,通常只考虑μ为零的情况,即。

高斯模糊浅析_ps高斯模糊没反应

同样在μ为零的情况下,二维的高斯函数如下

高斯模糊浅析_ps高斯模糊没反应

      注意到它可以看成是两个高斯函数的乘积
高斯模糊浅析_ps高斯模糊没反应

      又注意到高斯模糊浅析_ps高斯模糊没反应的存在,让我们直觉地感受到这个曲面有一个圆的结构存在。若令f(x,y)取一个常数值C,则上式可以画出一个圆。这意味着这个曲面的等高线是个圆。我们也可以把上式看成是以下高斯函数绕z轴旋转而成。
高斯模糊浅析_ps高斯模糊没反应

      这说明了高斯函数的一个重要特性:圆周对称性(Circular symmetry),又叫做各向同性(Isotropy)

      如前所述,为了能与离散的图像做卷积,我们必须对高斯函数进行采样。这个采样通常是限定在以x,y轴的原点为中心的一个正方形的区域内。采样的结果被称作“高斯核”(Gaussian kernel)。由于高斯模糊的普遍应用,如今计算一个高斯核已相当简单。不必说各种函数库,直接在网上找一个在线高斯核计算工具即可算出。但是若要深究其中的数学原理,却不是这么简单。下面将一步步说明高斯核究竟是怎么生成的。

 

一、采样方法

      首先是如何采样。

      采样的最简单的一个做法是直接取曲面上的值。例如,先把xy平面划分成许多1×1大小的方格子,直接取高斯模糊浅析_ps高斯模糊没反应这些点上z值,便可完成采样。另一种采样方法是,令采样值z在1×1的格子上形成的立方柱的体积,等于该格子范围内的曲面下的体积。语言描述有些难懂,让我们来看一下一维的高斯函数,使用这两种采样方法的对比图。

高斯模糊浅析_ps高斯模糊没反应高斯模糊浅析_ps高斯模糊没反应

                            图(1) 直接取点采样                                                       图(2) 积分式采样

        图(1)是对一维的高斯函数直接取点采样。采样位置为x轴的整数点。图(2)的采样位置同样是x轴的整数点,但并不是直接取该点的函数值,而是令红色矩形的面积等于该范围内曲线下方的面积。这种采样方法的特点是更好地近似了曲线的积分特性。若采样后要对采样值进行某些加法(或者加权加法)运算,使用第2种采样法更合适。两种方法本无优劣之分,到底该使用哪种方法一切要看我们后面如何使用这些采样值。如前所述,我们求得高斯核之后最终是要与输入图像做卷积。卷积在连续域是一种积分形式,在离散域是一种加权求和,所以应使用第2种采样法比较合适。我们不难想象把一维高斯函数扩展到二维高斯函数的情景,其实也就是将红色矩形变成红色立方体,将曲线下的面积变为曲面下的体积而已。

 

二、高斯核的形状和大小

        确定了采样方法后,还要确定高斯核的形状和大小。最常用的高斯核是n×n的正方形,根据应用的不同,也可以采用菱形或者近似圆形。这里就只介绍最常用的正方形高斯核。

        正方形的边长n该如何确定呢?工程上常用的是取高斯模糊浅析_ps高斯模糊没反应。3σ和6σ都是统计学上常用的大数指标。它的数学意义是:在高斯模糊浅析_ps高斯模糊没反应的范围内,正态分布曲线下的面积约等于整条曲线下面积的93.3%;在高斯模糊浅析_ps高斯模糊没反应的范围内,正态分布曲线下的面积约等于整条曲线下面积的99.99966%。在不同精度的应用场景下,3σ以外或者6σ以外的部分通常被认为是可以忽略的部分。由于高斯核是要与输入图像作卷积,其中间大周围小的特性,正是为了给予靠近核中心的像素更大的权重、给远离核中心的像素更小的权重。(为什么?因为若是采用同等权重,当一个离核中心很远的像素若刚好有很大的值,就会影响整个卷积结果,这不符合人的直观感受,因此越远的像素应该给卷积结果带来越少的影响。)当像素离核中心的距离超过3σ时,通常认为其对中心的影响已不大,可以忽略。

        为了使高斯核有一个明确的“中心”,n通常取奇数。由于3σ不一定是整数,所以可以令n等于离3σ最近的奇数。当然也可以用向上圆整或者向下圆整,前者更注重精度,后者更注重减少计算量。你也可以无视什么3σ原理,自己取任意奇数,在数学上也没什么不可以的。

 

三、高斯核的计算

        确定了采样方法、高斯核的形状和大小,总算可以计算高斯核了。例如,取σ=1.5,n=5,根据上面说的积分式采样方法,可以得到如下高斯核:

高斯模糊浅析_ps高斯模糊没反应

我们可以观察到其中的圆周对称性。虽然不怎么好看,但总算大功告成了吧?且慢!既然高斯核要与输入图像作卷积,那么还得考虑像素值的溢出问题。我们常用的像素是的8位色的像素(或子像素),其取值范围是0~255。输入图像与高斯核作卷积之后的像素值不能超过这个范围。怎么办呢?我们对高斯核的每个元素除以一个常数,这个常数等于高斯核中所有元素之和。

高斯模糊浅析_ps高斯模糊没反应

这样就相当于对输入图像的像素做了加权平均。根据加权平均的性质,一组数字进行加权平均的结果,不会大于该组数字中的最大数,也不会小于该组数字中的最小数。这样就保证了卷积结果不会溢出了。等等!那个“所有元素之和”的常数怎么那么接近1?这是当然的了,因为高斯函数在整个曲线下的面积等于1(在二维的情况下,整个曲面下的体积等于1),所以所有元素之和自然就接近1了。也就是说,高斯核无需除以常数也可以保证卷积结果不会溢出。这里之所以要拿出来强调,是因为并非所有核都有高斯核这样好的性质,处理溢出问题切不可忘。

        也许是因为数字工程师厌恶小数,高斯核还有种常见的形式是将各个元素变成整数。具体做法是,将最小的四个角的元素设为1,其他元素按比例放大并圆整,最后在高斯核前除以所有元素之和,结果如下:

高斯模糊浅析_ps高斯模糊没反应

        这个核看起来“整洁”多了。它跟上面的核只有一些精度上的差别,没有本质上的差别。

 

四、高斯核以及高斯模糊的快速计算

        以上的计算均是按照定义进行的计算,由于高斯模糊的广泛应用,我们需要更快更省资源的计算方法。

        由于高斯核的圆周对称性,使得我们有了简化的方法。我们可以先算一维的高斯核:

高斯模糊浅析_ps高斯模糊没反应

然后再计算高斯模糊浅析_ps高斯模糊没反应即可得到完整高斯核。这样就减少了采样的次数。但是读者们可以自行验算一下高斯模糊浅析_ps高斯模糊没反应的结果,其每一个元素都比上面的二维高斯核元素要小。这就是误差。由于我们采用的是积分式采样法,采样值大多比直接取点采样要小,而圆周对称性其实是直接采样点才有的特性,所以算出的二维高斯核的元素要比实际值要小。这就是速度与精度的取舍。在实践中,人眼往往不会在意这等细节,所以这样的误差也是可以接受的。

        还有一种方法是,在算出一维的高斯核A后,直接用输入图像与其做卷积,得到一个中间图像;再用中间图像与A的转置做卷积。根据卷积的定义,很容易证明这样做的效果与“跟完整的高斯核做卷积”的效果一样。如果原图大小是M×N,那么这种方法能将计算量从高斯模糊浅析_ps高斯模糊没反应减少为高斯模糊浅析_ps高斯模糊没反应

        在具体的编程手法中,还可以通过一些编程技巧对计算量进行进一步的“压榨”。哪个库的高斯模糊算得更快,甚至可以作为该函数库的水平高低的一个侧面反映。

 

五、高斯模糊计算时的“切边”问题

         其实这并不是高斯模糊特有的问题,一个输入图像与任何的核做卷积的时候都必须处理边缘的问题。边缘的问题的本质是,图像的边缘试图与核做卷积时,核会超出图像边界。如下图所示,红色方框表示高斯核,红色虚线部分表示超出的图像的范围,无法进行卷积。

高斯模糊浅析_ps高斯模糊没反应

遇到这种情况一般有3种处理方式:1、丢弃边缘。不能参与卷积的边缘部分将被丢弃。这种做法的缺点是输出图像比输入图像要小“一圈”,尤其是进行多次卷积之后图像将越来越小;2、边缘不参与卷积。边缘的像素保留原值留在输出图像中;3、将图像外的部分设为0,然后参与卷积。三种方法可权衡利弊自行使用。我个人认为第3中种方法较为合适。

 

六、高斯模糊的一些重要性质

        高斯模糊能得到广泛的应用,一个重要原因是因为它具有许多独特的良好性质。除了上面提到的圆周对称性,高斯模糊还有以下几个重要的性质。

性质1:高斯函数的傅立叶变换仍是个高斯函数,也就是说它是个低通滤波器。

        可以直观地感受到高斯模糊的低通滤波性。如前所述,高斯模糊实际是做了个加权平均,因此变化剧烈的高频成分,如边缘、条纹、噪点等像素将会变得平滑(即被“压抑”)。而原本比较平滑的地方,做了加权平均一样比较平滑,变化不大(即被“通过”)。σ越小,曲线越尖,高斯核的中心像素的权重也就越大,周围的权重就越小,模糊程度也就越弱。反之,σ越大,则模糊程度越重。

        数学上的证明如下。先看一维的情况。
        设

高斯模糊浅析_ps高斯模糊没反应

则其傅立叶变换为

高斯模糊浅析_ps高斯模糊没反应

其中表示频域的频率。代入g(x)的表达式,可得

高斯模糊浅析_ps高斯模糊没反应

高斯模糊浅析_ps高斯模糊没反应

则有
高斯模糊浅析_ps高斯模糊没反应上式中的积分是著名的高斯积分
高斯模糊浅析_ps高斯模糊没反应计算过程这里不再详述,维基百科中有详细计算过程 跳转到维基百科
因此
高斯模糊浅析_ps高斯模糊没反应若使用角频率高斯模糊浅析_ps高斯模糊没反应,则
高斯模糊浅析_ps高斯模糊没反应

可见这是一个标准差为1/σ的高斯函数。σ越大,这个频域的曲线就越尖,高频成分就被抑制得越厉害,图像也就越模糊;反之,σ越小,则图像模糊程度越弱。这与上面在时域的分析结果是一致的。

        刚才我说了“时域”,其实这里说“时域”是不准确的,因为并没有“时间”这个变量存在。在图像处理领域,通常称之为“空域”或“空间域”(spatial domain)。而为了强调“频率”的空间性,有时也称之为“空间频率”(spatial frequency)。

        对于二维情况,傅立叶变换定义如下

高斯模糊浅析_ps高斯模糊没反应

其中uv可看成分别在xy方向上的像素变化频率。代入g(x,y)的表达式,可得

                                                              高斯模糊浅析_ps高斯模糊没反应

                                                                               高斯模糊浅析_ps高斯模糊没反应

                                                                               高斯模糊浅析_ps高斯模糊没反应

同样是个二维高斯函数,即为空间域上的低通滤波器。

 

性质2:一张图像经过两次高斯模糊,假设两次模糊的标准差分别为高斯模糊浅析_ps高斯模糊没反应高斯模糊浅析_ps高斯模糊没反应,则其效果相当于经过一次标准差为

高斯模糊浅析_ps高斯模糊没反应的高斯模糊。写成数学表达式,即为
高斯模糊浅析_ps高斯模糊没反应

I(x,y)为输入图像,g为高斯函数,高斯模糊浅析_ps高斯模糊没反应为卷积运算符号。根据卷积的结合律,有
高斯模糊浅析_ps高斯模糊没反应

也就是说,这个性质其实说的是如下等式成立。
高斯模糊浅析_ps高斯模糊没反应

        以下是证明过程。

        由傅立叶变换的卷积特性,有
高斯模糊浅析_ps高斯模糊没反应

代入上面算得的二维高斯函数的傅立叶变换表达式,可得

高斯模糊浅析_ps高斯模糊没反应

这样我们就得到了高斯模糊浅析_ps高斯模糊没反应的傅立叶变换的表达式。再对比高斯模糊浅析_ps高斯模糊没反应高斯模糊浅析_ps高斯模糊没反应的表达式和傅立叶变换表达式,自然可以得出高斯模糊浅析_ps高斯模糊没反应的表达式应该为
高斯模糊浅析_ps高斯模糊没反应

高斯模糊浅析_ps高斯模糊没反应的标准差为
高斯模糊浅析_ps高斯模糊没反应

        证明结束。

        同样,一维的情况下也有这个结论。
        当然,在图像处理这种离散的情况,会发生误差,使得两次标准差分别为高斯模糊浅析_ps高斯模糊没反应高斯模糊浅析_ps高斯模糊没反应模糊的结果不能严格等于一次标准差为高斯模糊浅析_ps高斯模糊没反应的模糊结果。再加上,高斯模糊浅析_ps高斯模糊没反应高斯模糊浅析_ps高斯模糊没反应高斯模糊浅析_ps高斯模糊没反应的核很可能大小都不一样,其结果就更不可能相等了。这些误差在图像处理中通常都被忽略,但是我们要知道这些误差的存在。

 

总结

         关于高斯模糊就介绍到这里。这样一个如此常见的概念,细究起来是不是还挺复杂的呢?尤其是以上几个积分,认真计算一下还是得颇费一番工夫的。我们今天轻易地、普遍地使用的工具,其实都是由前人进行了大量的、艰辛的工作所铸就的。向图像分析的开拓者们致敬。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/168079.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 双线性插值(Bilinear Interpolation)[通俗易懂]

    双线性插值(Bilinear Interpolation)[通俗易懂]双线性插值(BilinearInterpolation)  假设源图像大小为mxn,目标图像为axb。那么两幅图像的边长比分别为:m/a和n/b。注意,通常这个比例不是整数,编程存储的时候要用浮点型。目标图像的第(i,j)个像素点(i行j列)可以通过边长比对应回源图像。其对应坐标为(i*m/a,j*n/b)。显然,这个对应坐标一般来说不是整数,而非整数的坐标是无法在图像这种离散数据上使用…

  • Gitlab+Docker实现持续集成(CI)与持续部署(CD)

    点击上方“全栈程序员社区”,星标公众号 重磅干货,第一时间送达 作者:愤怒的小猿猿 blog.csdn.net/qq_27520051/article/details/805522…

  • coco2dx c++ HTTP实现

    coco2dx c++ HTTP实现

    2021年12月17日
  • 一套键盘鼠标跨电脑切换使用「建议收藏」

    一套键盘鼠标跨电脑切换使用「建议收藏」       身为一名涉猎领域广泛的码农,工作间中往往会出现同时使用超过一台电脑的场景,笔记本+台式机基本是常态,甚至会出现Win+MAC或者Win+LINUX这样的跨平台同时操作需求。那么最令人烦恼的莫过于切换使用电脑时需要来回切换键鼠,如果可以用桌面上的一套键鼠,实现对多台电脑的无缝操作切换,岂不是美滋滋。      博主这样的愿望由来已久,今日终于完美解决,特分享给诸位道友。  …

    2022年10月10日
  • getopt在Python中的使用

    getopt在Python中的使用在运行程序时,可能需要根据不同的条件,输入不同的命令行选项来实现不同的功能。目前有短选项和长选项两种格式。短选项格式为”-“加上单个字母选项;长选项为”–“加上一个单词。长格式是在Linux下引入的。许多Linux程序都支持这两种格式。在Python中提供了getopt模块很好的实现了对这两种用法的支持,而且使用简单。取得命令行参数  在使用之前,首先要取得命令行参数。使用sys模块

  • pytest指定用例_测试用例怎么编写

    pytest指定用例_测试用例怎么编写前言测试用例在设计的时候,我们一般要求不要有先后顺序,用例是可以打乱了执行的,这样才能达到测试的效果.有些同学在写用例的时候,用例写了先后顺序,有先后顺序后,后面还会有新的问题(如:上个用例返回

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号