高斯滤波和双向滤波的区别与联系

合集下载

OpenCV-图像平滑-卷积、平均、高斯模糊、中值模糊、双边滤波

OpenCV-图像平滑-卷积、平均、高斯模糊、中值模糊、双边滤波

OpenCV-图像平滑-卷积、平均、⾼斯模糊、中值模糊、双边滤波卷积 LPF(低通滤波)帮助我们去除噪⾳,模糊图像,降低图像的⾼频成分。

如 kernel = [[0, -1, 0], [-1, 5, -1], [0, -1, 0]] HPF (⾼通滤波)帮助我们找到图像的边缘,去除图像的低频成分。

如: kernel = [[0, -1, 0], [-1, 4, -1], [0, -1, 0]] 在低频区域(图像变化很⼩的区域),通过卷积,会将该点的灰度值变成接近0的值,⽽在⾼频区域(变化⼤的区域,边缘),通过卷积会保留下来(灰度值接近1)。

OpenCV 提供的函数 cv.filter2D() 可以让我们对⼀幅图像进⾏卷积操作(实际上并⾮卷积操作)。

代码:1import numpy as np2import cv23from matplotlib import pyplot as plt45 img = cv2.imread("../image/girl.jpg")6 img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)78# ⽣成 5 X 5的平均滤波器核9 kernel = np.ones((5, 5), np.float32) / 251011 dst = cv2.filter2D(img, -1, kernel)1213 plt.subplot(121), plt.imshow(img), plt.title("Original")14 plt.subplot(122), plt.imshow(dst), plt.title("Avera")15 plt.show()结果:平均法 这是由⼀个归⼀化卷积框完成的。

他只是⽤卷积框覆盖区域所有像素的平均值来代替中⼼元素。

可以使⽤函数 cv2.blur() 和cv2.boxFilter() 来完这个任务。

说明几种滤波方法的处理效果

说明几种滤波方法的处理效果

说明几种滤波方法的处理效果滤波是数字信号处理中的一种常见方法,用于去除信号中的噪声或其他干扰。

在实际应用中,不同的滤波方法具有不同的优缺点和适用场景。

本文将介绍几种常见的滤波方法及其处理效果。

1. 均值滤波均值滤波是一种简单有效的滤波方法,其基本思想是利用邻域像素点的平均值来代替当前像素点的值。

该方法适用于去除高斯噪声等随机噪声,但对于图像细节较多、边缘清晰的图像效果不佳。

2. 中值滤波中值滤波是一种非线性滤波方法,其基本思想是利用邻域像素点的中位数来代替当前像素点的值。

该方法适用于去除椒盐噪声等脉冲噪声,并且可以保留图像细节和边缘信息。

但对于连续性较强、变化较平缓的图像效果不佳。

3. 高斯滤波高斯滤波是一种线性平滑滤波方法,其基本思想是利用高斯函数对邻域像素点进行加权平均。

该方法适用于去除高斯噪声和椒盐噪声,并且可以保留图像细节和边缘信息。

但对于图像中存在较多纹理和细节的情况,会导致模糊效果。

4. 双边滤波双边滤波是一种非线性滤波方法,其基本思想是利用空间域和灰度值域两个方向上的高斯函数对邻域像素点进行加权平均。

该方法适用于去除高斯噪声、椒盐噪声和周期性噪声,并且可以保留图像细节和边缘信息。

但计算量较大,处理时间相对较长。

5. 小波变换小波变换是一种基于多尺度分析的信号处理方法,其基本思想是将信号分解成不同尺度的子带,并对每个子带进行滤波处理。

该方法适用于去除多种类型的噪声,并且可以保留图像细节和边缘信息。

但需要选择合适的小波基函数和分解层数,过高或过低的分解层数都会导致处理效果不佳。

综上所述,不同的滤波方法适用于不同的噪声类型和图像特征。

在实际应用中,需要根据具体情况选择合适的滤波方法,并进行参数调节和优化,以达到最佳的处理效果。

图像滤波之高斯滤波介绍

图像滤波之高斯滤波介绍

图像滤波之⾼斯滤波介绍1 ⾼斯滤波简介 了解⾼斯滤波之前,我们⾸先熟悉⼀下⾼斯噪声。

⾼斯噪声是指它的服从(即)的⼀类噪声。

如果⼀个噪声,它的幅度分布服从⾼斯分布,⽽它的⼜是均匀分布的,则称它为⾼斯⽩噪声。

⾼斯⽩噪声的⼆阶矩不相关,⼀阶矩为,是指先后信号在时间上的相关性,包括和。

⾼斯滤波器是⼀类根据⾼斯函数的形状来选择权值的线性平滑滤波器。

⾼斯平滑滤波器对于抑制服从正态分布的噪声⾮常有效。

⼀维零均值⾼斯函数为: g(x)=exp( -x^2/(2 sigma^2) 其中,⾼斯分布参数Sigma决定了⾼斯函数的宽度。

对于图像处理来说,常⽤⼆维零均值离散⾼斯函数作平滑滤波器,⾼斯函数的图形:2 ⾼斯滤波函数 对于图像来说,⾼斯滤波器是利⽤⾼斯核的⼀个2维的卷积算⼦,⽤于图像模糊化(去除细节和噪声)。

1) ⾼斯分布 ⼀维⾼斯分布: ⼆维⾼斯分布: 2) ⾼斯核 理论上,⾼斯分布在所有定义域上都有⾮负值,这就需要⼀个⽆限⼤的卷积核。

实际上,仅需要取均值周围3倍标准差内的值,以外部份直接去掉即可。

如下图为⼀个标准差为1.0的整数值⾼斯核。

3 ⾼斯滤波性质 ⾼斯函数具有五个重要的性质,这些性质使得它在早期图像处理中特别有⽤.这些性质表明,⾼斯平滑滤波器⽆论在空间域还是在频率域都是⼗分有效的低通滤波器,且在实际图像处理中得到了⼯程⼈员的有效使⽤.⾼斯函数具有五个⼗分重要的性质,它们是: (1)⼆维⾼斯函数具有旋转对称性,即滤波器在各个⽅向上的平滑程度是相同的.⼀般来说,⼀幅图像的边缘⽅向是事先不知道的,因此,在滤波前是⽆法确定⼀个⽅向上⽐另⼀⽅向上需要更多的平滑.旋转对称性意味着⾼斯平滑滤波器在后续边缘检测中不会偏向任⼀⽅向. (2)⾼斯函数是单值函数.这表明,⾼斯滤波器⽤像素邻域的加权均值来代替该点的像素值,⽽每⼀邻域像素点权值是随该点与中⼼点的距离单调增减的.这⼀性质是很重要的,因为边缘是⼀种图像局部特征,如果平滑运算对离算⼦中⼼很远的像素点仍然有很⼤作⽤,则平滑运算会使图像失真. (3)⾼斯函数的傅⽴叶变换频谱是单瓣的.正如下⾯所⽰,这⼀性质是⾼斯函数付⽴叶变换等于⾼斯函数本⾝这⼀事实的直接推论.图像常被不希望的⾼频信号所污染(噪声和细纹理).⽽所希望的图像特征(如边缘),既含有低频分量,⼜含有⾼频分量.⾼斯函数付⽴叶变换的单瓣意味着平滑图像不会被不需要的⾼频信号所污染,同时保留了⼤部分所需信号. (4)⾼斯滤波器宽度(决定着平滑程度)是由参数σ表征的,⽽且σ和平滑程度的关系是⾮常简单的.σ越⼤,⾼斯滤波器的频带就越宽,平滑程度就越好.通过调节平滑程度参数σ,可在图像特征过分模糊(过平滑)与平滑图像中由于噪声和细纹理所引起的过多的不希望突变量(⽋平滑)之间取得折衷. (5)由于⾼斯函数的可分离性,较⼤尺⼨的⾼斯滤波器可以得以有效地实现.⼆维⾼斯函数卷积可以分两步来进⾏,⾸先将图像与⼀维⾼斯函数进⾏卷积,然后将卷积结果与⽅向垂直的相同⼀维⾼斯函数卷积.因此,⼆维⾼斯滤波的计算量随滤波模板宽度成线性增长⽽不是成平⽅增长.4 ⾼斯滤波应⽤ ⾼斯滤波后图像被平滑的程度取决于标准差。

介绍常见的图像处理算法及其应用

介绍常见的图像处理算法及其应用

介绍常见的图像处理算法及其应用图像处理算法是计算机视觉领域的重要内容,它涵盖了许多不同的技术和方法。

本文将介绍一些常见的图像处理算法及其应用。

这些算法可以用于图像增强、图像分割、目标识别等领域,它们可以帮助我们更好地理解和处理图像数据。

一、图像滤波算法图像滤波是图像处理的基础算法之一,它通过对图像进行平滑处理来去除图像中的噪声或者增强图像的细节。

图像滤波算法有很多种,其中常见的有均值滤波、中值滤波和高斯滤波。

均值滤波是一种简单的滤波算法,它通过计算像素点周围领域像素的平均值来达到平滑图像的效果。

均值滤波对噪声有一定的去除效果,但是对于边缘和细节信息的保存能力较差。

中值滤波是一种非线性滤波算法,它通过对图像中的像素值进行排序,然后选择排序后的中间值作为当前像素的新值。

中值滤波对椒盐噪声有较好的去除效果,并且能够保持图像的边缘信息。

高斯滤波是一种基于高斯函数的线性滤波算法,它通过对图像中的像素进行加权平均来实现平滑效果。

高斯滤波对于去除高斯噪声以及其他类型的噪声都有较好的去除效果。

二、图像分割算法图像分割是将图像划分成具有语义信息的相互独立的区域的过程。

图像分割算法通常根据图像中的灰度值、颜色、纹理等特征将图像进行分割。

常见的图像分割算法有阈值分割、基于区域的分割和基于边缘的分割。

阈值分割是一种简单常用的分割算法,它将图像中的像素根据灰度值与阈值的关系进行分类。

通过调整阈值的大小,可以实现不同程度的图像分割。

基于区域的分割算法是根据像素之间的相似性将图像进行分割,使具有相似性质的像素聚合成为一个区域。

常见的基于区域的分割算法有K-means算法和基于区域的生长算法。

基于边缘的分割算法是根据图像中的边缘信息将图像进行分割。

边缘是图像中颜色、灰度值等发生突变的地方,基于边缘的分割算法通过检测图像中的边缘来实现分割。

三、图像特征提取算法图像特征提取是将图像中的信息转化为计算机可以理解和处理的形式的过程。

图像特征可以是图像的边缘、纹理、颜色等视觉特征,也可以是经过某种数学变换得到的特征。

opencv抗锯齿算法原理

opencv抗锯齿算法原理

opencv抗锯齿算法原理OpenCV是一个开源的计算机视觉库,提供了丰富的图像处理和计算机视觉功能。

其中,抗锯齿算法是一种用于减少图像边缘锯齿的技术。

本文将介绍OpenCV中常用的两种抗锯齿算法:高斯模糊和双边滤波。

1. 高斯模糊高斯模糊是一种常见的图像模糊算法,也是抗锯齿算法中常用的一种。

其原理是通过对图像中的每个像素点进行加权平均,使得周围像素的值对当前像素的影响减小。

这样可以有效地减少图像中的高频噪声,从而达到抗锯齿的效果。

具体来说,高斯模糊算法先将图像中的每个像素点与一个高斯核进行卷积运算,得到一个模糊后的像素值。

高斯核是一个二维的正态分布函数,用来表示每个像素点与周围像素点的权重。

通过调整高斯核的大小和标准差,可以控制模糊的程度。

2. 双边滤波双边滤波是一种基于像素距离和像素值相似性的滤波算法。

与高斯模糊不同的是,双边滤波不仅考虑了像素点的空间位置,还考虑了像素值的相似性。

这样可以保留图像中的边缘信息,同时减少锯齿现象。

具体来说,双边滤波算法通过对图像中的每个像素点与周围像素点进行加权平均,得到一个滤波后的像素值。

权重的计算包括两个方面:空间距离权重和像素值相似性权重。

空间距离权重用来考虑像素点的空间位置关系,像素值相似性权重用来考虑像素点的像素值差异。

通过调整这两个权重的大小,可以控制滤波的效果。

在OpenCV中,可以使用cv2.GaussianBlur函数实现高斯模糊,使用cv2.bilateralFilter函数实现双边滤波。

这两个函数都提供了各种参数选项,可以根据实际需求进行调整。

除了高斯模糊和双边滤波,OpenCV还提供了其他一些抗锯齿算法,如均值迁移算法、频域滤波算法等。

这些算法各有特点和适用场景,可以根据实际需求选择合适的算法。

总结:本文介绍了OpenCV中常用的两种抗锯齿算法:高斯模糊和双边滤波。

高斯模糊通过加权平均来减少图像中的高频噪声,双边滤波通过考虑像素点的空间位置和像素值相似性来保留边缘信息。

双边滤波

双边滤波

双边滤波双边滤波,Bilateral filter。

是一种可以保边去噪的滤波器。

之所以可以达到此去噪效果,是因为滤波器是由两个函数构成。

一个函数是由几何空间距离决定滤波器系数。

另一个由像素差值决定滤波器系数。

双边滤波器的好处是可以做边缘保存edge preserving,一般过去用的维纳滤波或者高斯滤波去降噪,都会较明显的模糊边缘,对于高频细节的保护效果并不明显。

双边滤波器顾名思义比高斯滤波多了一个高斯方差sigma-d,它是基于空间分布的高斯滤波函数,所以在边缘附近,离的较远的像素不会太多影响到边缘上的像素值,这样就保证了边缘附近像素值的保存。

但是由于保存了过多的高频信息,对于彩色图像里的高频噪声,双边滤波器不能够干净的滤掉,只能够对于低频信息进行较好的滤波,因此我们对于双边滤波器进行了改进,由于小波分解可以把信号分解为高频和低频部分,我们对于不同频率段进行不同的滤波。

首先将彩色图像RGB模式转为CIE-LAB模式,然后做一次离散二维小波变换dwt2,对于高频的HH,LH,HL部分我们用Bayes shrink的阈值做了软门限soft thresholding,对于低频部分我们把它再进行分解,然后对高频做小波阈值,对低频采用双边滤波。

这样取得的恢复图像,MSE减少了30%,色差误差ciede2000减少了50%,可证明更适于滤波和人类视觉系统。

原理及实现的问题双边滤波(Bilateral filter)是一种可以保边去噪的滤波器。

之所以可以达到此去噪效果,是因为滤波器是由两个函数构成。

一个函数是由几何空间距离决定滤波器系数。

另一个由像素差值决定滤波器系数。

可以与其相比较的两个filter:高斯低通滤波器(/wiki/Gaussian_filter)和α-截尾均值滤波器(去掉百分率为α的最小值和最大之后剩下像素的均值作为滤波器),后文中将结合公式做详细介绍。

双边滤波器中,输出像素的值依赖于邻域像素的值的加权组合,权重系数w(i,j,k,l)取决于定义域核和值域核的乘积同时考虑了空间域与值域的差别,而Gaussian Filter和α均值滤波分别只考虑了空间域和值域差别。

高斯双边滤波算法

高斯双边滤波算法

高斯双边滤波算法高斯双边滤波算法是一种常用的图像处理算法,通过结合空间域和灰度域信息,能够有效地去除图像噪声,保持图像的边缘信息,同时不引入模糊效果。

在传统的高斯滤波算法中,只考虑了像素之间的空间距离,通过加权平均的方式来去除噪声。

然而,这种方法会造成边缘信息的模糊,因为它无法区分边缘和纹理。

为了解决这个问题,高斯双边滤波算法引入了灰度域距离,通过考虑像素之间的灰度差异,有效地保留了边缘信息。

具体而言,高斯双边滤波算法将每个像素点周围的邻域像素按照空间距离和灰度差异进行加权计算,而不仅仅是根据空间距离。

这样,距离较近且灰度相似的像素点会得到较高的权重,而距离远或灰度差异大的像素点会得到较低的权重。

对于噪声点,由于其与周围像素的灰度差异较大,其权重会被降低,这样就能够抑制噪声。

在实际应用中,高斯双边滤波算法有着广泛的应用。

例如,在图像去噪中,它可以有效地去除高斯噪声、椒盐噪声等,同时保持图像的清晰度和细节。

此外,在计算机视觉和图像处理中,高斯双边滤波算法也用于图像增强、图像分割等领域。

它不仅可以提高图像质量和视觉效果,还可以提高算法的鲁棒性和稳定性。

在使用高斯双边滤波算法时,需要注意一些参数的选择。

首先是空间域标准差和灰度域标准差,它们决定了滤波器的大小和去噪的程度。

通常情况下,较大的标准差可以去除更多的噪声,但同时也会导致一定的模糊效果。

因此,在选择标准差时需要进行权衡。

另外,卷积模板的大小也需要根据图像的大小和去噪要求进行调整。

实践中,可以通过试验和比较不同参数的效果来选择最佳的参数组合。

总之,高斯双边滤波算法是一种强大而有效的图像处理算法。

它通过考虑像素之间的空间距离和灰度差异,能够去除噪声、保持图像边缘信息,有效地增强图像的质量和细节。

在实际应用中,合理选择参数,并结合其他图像处理技术,可以获得更好的图像处理效果。

高斯滤波器和2RC滤波器

高斯滤波器和2RC滤波器

第五章高斯滤波器5.1介绍高斯滤波器被广泛应用于表面轮廓分析。

美国标准(美国机械工程师协会2002)和国际标准(国际标准化组织1996)都对它进行了阐述。

高斯滤波器的权重函数(滤波器在时域和空间域的定义)如下:5.1式子中,x是权重函数距离原点的位置,是粗糙度中长波波长的截止频率。

通过对连续函数进行傅里叶变换可以得到函数的传递特性,变化如下:5.2从等式5.2,能够看出该正弦波振幅有衰减,其波长截止波长(λ=λc)是0.5,因此在截止处,滤波器传递了50%。

下面的例子展示了,在给定权重函数下,其高斯滤波器传递曲线的样子。

范例5.1 在给定空间域下,描绘高斯滤波器S。

其中让λc=0.8mm,采样间隔。

下面是MATLAB生成的代码,并且其所描述的图展示在(图5.1 a)。

图5.1 a绘制高斯滤波器;λc=0.8mm,b高斯滤波器传递特性lambdac=0.8 % in mmdx=0.001 % in mmx=(-lambdac:dx:lambdac)’;alpha=0.4697;S=(1/(alpha lambdac)). exp(-pi (x/(alpha lambdac)).^2);% generate the Gaussian filterS=S/sum(S); % normalize to unit sumplot(x,S);xlabel(’Distance (mm)’);ylabel(’Weighting function’);范例5.2 产生高斯滤波器S的振幅传输特性,并且评估正弦波的振幅传输特性,其截止波长(λc=0.8mm)。

高斯滤波器的传递特性能够同样获得,通过借助第四章4.4范例所示的矩形滤波器例程。

传递特性如图5.1b所示。

该正弦波由0.8mm波长组成,其振幅衰减为0.5(Sf的阵列元素有11个)。

因此高斯滤波器在截止频率处,传输量为50%。

注意在图5.1b所示的传递特性中,可以清楚的看到,在其截止频率处有一个坡度过程,并没有直上直下的锋利过渡。

【OpenCV】邻域滤波:方框、高斯、中值、双边滤波

【OpenCV】邻域滤波:方框、高斯、中值、双边滤波

【OpenCV】邻域滤波:方框、高斯、中值、双边滤波2012-07-26 10:52 30236人阅读评论(35) 收藏举报分类:【图像处理】(43)作者同类文章X版权声明:本文为博主原创文章,未经博主允许不得转载。

目录(?)[+]邻域滤波卷积方框滤波代码实验结果高斯滤波代码实验结果非线性滤波中值滤波代码中值滤波实验双边滤波双边滤波源码双边滤波调用双边滤波实验参考文献转载请注明出处httpblogcsdnnetxiaowei_cquarticledetails7785365邻域滤波(卷积)邻域算子值利用给定像素周围像素的值决定此像素的最终输出。

如图左边图像与中间图像卷积禅城右边图像。

目标图像中绿色的像素由原图像中蓝色标记的像素计算得到。

通用线性邻域滤波是一种常用的邻域算子,输入像素加权得到输出像素:其中权重核为“滤波系数”。

上面的式子可以简记为:【方框滤波】最简单的线性滤波是移动平均或方框滤波,用窗口中的像素值平均后输出,核函数其实等价于图像与全部元素值为1的核函数进行卷积再进行尺度缩放。

代码OpenCV中的blur函数是进行标准方框滤波:[cpp] view plaincopyprint?void cv::blur( InputArray src, OutputArray dst,Size ksize, Point anchor, int borderType ){boxFilter( src, dst, -1, ksize, anchor, true, borderType );}void cv::blur( InputArray src, OutputArray dst,Size ksize, Point anchor, int borderType ){boxFilter( src, dst, -1, ksize, anchor, true, borderType );}而boxFilter函数源码如下:[cpp] view plaincopyprint?cv::Ptr<cv::FilterEngine> cv::createBoxFilter( int srcType, int dstType, Size ksize, Point anchor, bool normalize, int borderType )int sdepth = CV_MAT_DEPTH(srcType);int cn = CV_MAT_CN(srcType), sumType = CV_64F;if( sdepth <= CV_32S && (!normalize ||ksize.width*ksize.height <= (sdepth == CV_8U ? (1<<23) :sdepth == CV_16U ? (1 << 15) : (1 << 16))) )sumType = CV_32S;sumType = CV_MAKETYPE( sumType, cn );Ptr<BaseRowFilter> rowFilter = getRowSumFilter(srcType, sumType, ksize.width, anc hor.x );Ptr<BaseColumnFilter> columnFilter = getColumnSumFilter(sumType,dstType, ksize.height, anchor.y, normalize ? 1./(ksize.width*ksize.height) : 1);return Ptr<FilterEngine>(new FilterEngine(Ptr<BaseFilter>(0), rowFilter, columnFilter, srcType, dstType, sumType, borderType ));}cv::Ptr<cv::FilterEngine> cv::createBoxFilter( int srcType, int dstType, Size ksize,Point anchor, bool normalize, int borderType ){int sdepth = CV_MAT_DEPTH(srcType);int cn = CV_MAT_CN(srcType), sumType = CV_64F;if( sdepth <= CV_32S && (!normalize ||ksize.width*ksize.height <= (sdepth == CV_8U ? (1<<23) :sdepth == CV_16U ? (1 << 15) : (1 << 16))) )sumType = CV_32S;sumType = CV_MAKETYPE( sumType, cn );Ptr<BaseRowFilter> rowFilter = getRowSumFilter(srcType, sumType, ksize.width, anchor.x );Ptr<BaseColumnFilter> columnFilter = getColumnSumFilter(sumType,dstType, ksize.height, anchor.y, normalize ? 1./(ksize.width*ksize.height) : 1);return Ptr<FilterEngine>(new FilterEngine(Ptr<BaseFilter>(0), rowFilter, columnFilter, srcType, dstType, sumType, borderType ));}这里blur 和boxFilter 的区别是,blur是标准化后的boxFilter,即boxFilter的核函数:其中,[cpp] view plaincopyprint?blur( src, dst, Size( 1, 1 ), Point(-1,-1));blur( src, dst, Size( 4, 4 ), Point(-1,-1));blur( src, dst, Size( 8, 8 ), Point(-1,-1));blur( src, dst, Size( 16, 16 ), Point(-1,-1));blur( src, dst, Size( 1, 1 ), Point(-1,-1));blur( src, dst, Size( 4, 4 ), Point(-1,-1));blur( src, dst, Size( 8, 8 ), Point(-1,-1));blur( src, dst, Size( 16, 16 ), Point(-1,-1));实验结果下图是对一幅图像分别用1*1,4*4,8*8,16*16标准方框滤波后的图像:【高斯滤波】高斯滤波器是一类根据高斯函数的形状来选择权值的线性平滑滤波器。

yolo 双边滤波算法

yolo 双边滤波算法

yolo 双边滤波算法摘要:一、双边滤波算法简介1.双边滤波概念2.双边滤波与高斯滤波的关系二、YOLO算法介绍1.YOLO算法背景2.YOLO算法原理三、YOLO算法与双边滤波的结合1.双边滤波在YOLO算法中的应用2.结合后的优势与效果四、双边滤波算法在实际应用中的案例1.图像处理领域2.目标检测与识别领域五、双边滤波算法的发展与展望1.算法改进方向2.未来应用场景正文:一、双边滤波算法简介1.双边滤波概念双边滤波是一种基于像素邻域的图像处理算法,它通过在空间和颜色域上同时进行加权,对图像进行平滑处理。

这种算法在保持图像边缘清晰的同时,可以有效地降低图像噪声。

2.双边滤波与高斯滤波的关系双边滤波和高斯滤波都属于空间域滤波算法,但双边滤波具有更高的灵活性。

双边滤波通过对像素邻域的加权,可以自适应地调整滤波强度,而高斯滤波则依赖于高斯核函数的参数来控制滤波效果。

二、YOLO算法介绍1.YOLO算法背景YOLO(You Only Look Once)算法是一种实时目标检测算法,由Joseph Redmon 和Ali Farhadi 于2015 年提出。

该算法突破了传统目标检测方法的局限,实现了对图像中目标的快速准确检测。

2.YOLO算法原理YOLO算法采用了一种基于深度卷积神经网络(CNN)的框架,通过对图像进行单次推理,同时预测多个边界框和类别概率。

这种方法具有较高的检测速度和准确性,适用于实时场景。

三、YOLO算法与双边滤波的结合1.双边滤波在YOLO算法中的应用在YOLO 算法中,双边滤波可以用于对检测结果进行后处理,以提高检测精度。

通过对检测边界框进行双边滤波,可以消除噪声,更好地识别目标。

2.结合后的优势与效果结合双边滤波的YOLO 算法,在保持实时检测速度的同时,提高了检测准确性。

双边滤波有效地平滑了检测边界框,使得目标边缘更加清晰,降低了误检和漏检的概率。

四、双边滤波算法在实际应用中的案例1.图像处理领域双边滤波在图像处理领域中,常用于去噪、锐化、边缘检测等任务。

二维离散卷积定理

二维离散卷积定理

二维离散卷积定理二维离散卷积定理二维离散卷积定理是数字图像处理中的重要概念,它描述了两个离散函数的卷积运算,可以应用于各种图像滤波技术中。

本节将介绍几种常见的图像滤波方法,包括高斯滤波、平滑滤波、中值滤波、双边滤波和导向滤波,并阐述它们与二维离散卷积定理之间的关系。

1.高斯滤波高斯滤波是一种常用的图像平滑方法,它通过将每个像素点的灰度值设置为相邻像素点的加权平均值,达到去除噪声和细节的目的。

二维高斯函数可以表示为:G(x,y)=12πσ2e−(x2+y2)2σ2G(x,y) = \frac{1}{2\pi\sigma^2} e^{-\frac{x^2+y^2}{2\sigma^2}}G(x,y)=2πσ21e−2σ2x2+y2二维高斯滤波可以看作是输入图像与高斯函数的卷积运算。

2.平滑滤波平滑滤波是一种简单的图像平滑方法,它通过将每个像素点的灰度值设置为相邻像素点的最小值,达到去除噪声的目的。

平滑滤波可以看作是输入图像与盒形函数的卷积运算。

3.中值滤波中值滤波是一种非线性滤波方法,它通过将每个像素点的灰度值设置为相邻像素点灰度值的中值,达到去除噪声和细节的目的。

中值滤波可以看作是输入图像与中值函数的卷积运算。

4.双边滤波双边滤波是一种保边缘的滤波方法,它通过考虑空间域和灰度值域的相似性,达到去除噪声和细节的目的。

双边滤波的核函数可以表示为:G(x,y,σx,σy)=e−(x2+y2)2σx2−∣i−j∣22σy2G(x,y,\sigma_x,\sigma_y) = e^{-\frac{x^2+y^2}{2\sigma_x^2}-\frac{(i-j)^2}{2\sigma_y^2}}G(x,y,σx,σy)=e−2σx2x2+y2∣i−j∣22σy2二维双边滤波可以看作是输入图像与双边函数的卷积运算。

5.导向滤波导向滤波是一种基于局部统计特性的滤波方法,它通过建立一个保边缘的导向图像,达到去除噪声和细节的目的。

快速高斯变换的双边滤波

快速高斯变换的双边滤波

快速高斯变换的双边滤波
快速高斯变换(FFT)是一种用于图像处理的重要技术,它能够实现高效的图像滤波和平滑处理。

在这种方法中,图像被转换为频域表示,然后通过使用高斯滤波器对其进行平滑处理。

然而,这种方法在处理噪声和边缘保留方面可能会出现一些问题,因此,双边滤波被引入来解决这些问题。

双边滤波是一种能够同时平滑图像并保留其边缘的滤波方法。

在这种方法中,像素值被加权平均,其中权重函数不仅取决于像素之间的距离,还取决于它们的灰度值差异。

这种方法可以有效地平滑图像,同时保留其细节和边缘信息。

快速高斯变换的双边滤波方法在处理噪声和边缘保留方面比传
统的高斯滤波更为有效。

它通过使用FFT来加速计算过程,从而提高了处理速度。

此外,它还提供了更大的灵活性,使得用户可以根据需要调整平滑和边缘保留的程度。

总之,快速高斯变换的双边滤波是一种有效的图像处理方法,能够同时平滑图像并保留其细节和边缘信息。

它可以在许多应用程序中发挥重要作用,例如数字图像处理、计算机视觉和图形学。

- 1 -。

双边滤波算法

双边滤波算法

双边滤波算法双边滤波算法是一种常见的图像处理算法,也是一种非常实用的滤波算法,它经常被应用于图像去噪、边缘保留和图像平滑处理中。

本文将从算法原理、应用场景和实现方法等方面对双边滤波算法做一介绍。

1.算法原理双边滤波算法是一种基于高斯滤波的算法,但它并不仅仅是一个简单的高斯滤波。

它使用了一个权值函数,这个权值函数是一个函数的输出与图像上像素之间的差距的指数函数。

这个指数函数的设计实现了保留边缘和消除噪点的双重目的。

这个函数中包含了两个参数:像素差值参数和距离参数。

像素差值参数决定了对图像边缘的保护程度,越大保护力度越强,但同时也会影响噪点的处理效果;距离参数则决定了像素之间的协同作用的程度,即距离越大则权值越小,越小权值越大,相邻像素的权值显然大于远离的像素。

2.应用场景双边滤波算法可以应用于很多图像处理领域,例如:图像去噪、图像锐化、图像平滑等。

在一个图像中,噪点和边缘的合理处理是一项非常困难的任务,很多经典的滤波算法都难以兼顾到两者。

谈到噪点,如果我们只是简单的通过低通滤波扫过图像,我们会发现图像的边缘被滤波时有被模糊的感觉;而针对边缘,我们如果只保留边缘的高频,那么噪点则会趁机将这部分高频信号破坏。

在这个过程中,双边滤波算法通过拟合一个指数函数,通过像素差值和距离来确定像素的权值,并用权值对像素进行滤波,既能有效去除噪点,又能保留图像边缘的细节。

3.实现方法双边滤波算法是一种基于空间域卷积的算法,所以,它的运算过程可以很容易的在计算机上实现。

以一幅灰度图像为例,我们可以先定义一个空间范围和一个像素差值范围,然后在图像上扫过每个像素,并记录权值。

在这个过程中,我们可以调整像素差值和距离参数的大小来达到不同的特效和目的。

虽然双边滤波算法可以很好的应用于一些图像处理领域,但是算法的复杂度会随着运算过程的增加而增加,需要在算法的实现过程中注意到这点。

在计算权值时,可以用一些图像加速算法,这样可以减少算法的复杂度,降低时间和空间的开销。

滤波去噪的方法

滤波去噪的方法

滤波去噪的方法引言:在现实生活和科学研究中,我们经常会遇到需要对信号进行滤波去噪的情况。

滤波去噪是指通过一系列的数学运算,将信号中的噪声成分剔除,从而得到干净的信号。

本文将介绍几种常用的滤波去噪的方法。

一、均值滤波均值滤波是一种简单而常用的滤波方法。

它的原理是通过计算信号中一段时间内的平均值来抑制噪声。

具体来说,均值滤波将信号中的每个采样点替换为该点周围一定范围内的采样点的平均值。

这样可以有效地平滑信号,减小噪声的影响。

二、中值滤波中值滤波是一种基于统计的滤波方法。

它的原理是通过计算信号中一段时间内的中值来抑制噪声。

具体来说,中值滤波将信号中的每个采样点替换为该点周围一定范围内的采样点的中值。

与均值滤波相比,中值滤波对于椒盐噪声等比较极端的噪声效果更好。

三、高斯滤波高斯滤波是一种基于概率统计的滤波方法。

它的原理是通过计算信号中一段时间内的加权平均值来抑制噪声。

具体来说,高斯滤波将信号中的每个采样点替换为该点周围一定范围内的采样点的加权平均值,其中权重由高斯函数确定。

高斯滤波对于高斯噪声的去除效果较好。

四、小波变换小波变换是一种基于频域分析的滤波方法。

它的原理是将信号分解为不同尺度的小波分量,然后根据噪声的特性选择适当的小波系数进行滤波。

小波变换具有时频局部化的特点,可以更好地保留信号的时域和频域信息,从而实现较好的去噪效果。

五、自适应滤波自适应滤波是一种基于自适应参数估计的滤波方法。

它的原理是根据信号的统计特性自适应地调整滤波器的参数,从而适应不同噪声环境下的滤波要求。

自适应滤波可以通过对输入信号的建模和估计来实现对噪声的准确抑制,具有较好的鲁棒性和适应性。

六、总结滤波去噪是一项重要的信号处理任务,对于提高信号质量和提取有效信息具有重要意义。

本文介绍了几种常用的滤波去噪方法,包括均值滤波、中值滤波、高斯滤波、小波变换和自适应滤波。

这些方法各有特点,适用于不同的噪声环境和信号特性。

在实际应用中,我们可以根据具体情况选择适当的滤波方法,从而实现有效的去噪效果。

高斯滤波器和2RC滤波器

高斯滤波器和2RC滤波器

高斯滤波器和2RC滤波器第五章高斯滤波器5.1介绍高斯滤波器被广泛应用于表面轮廓分析。

美国标准(美国机械工程师协会2002)和国际标准(国际标准化组织1996)都对它进行了阐述。

高斯滤波器的权重函数(滤波器在时域和空间域的定义)如下:S x =αλcexp⁡[−π(αλc2] 5.1 式子中α= =0.4697,x是权重函数距离原点的位置,λc是粗糙度中长波波长的截止频率。

通过对连续函数S x 进行傅里叶变换可以得到函数的传递特性,变化如下: Sf λ=∞ −∞1xS x eiλxdx=∞1 −∞αλce[−π(x2)]αλceiλxdx=e[−π(αλc2)]λ 5.2 从等式5.2,能够看出该正弦波振幅有衰减,其波长截止波长(λ=λc)是0.5,因此在截止处,滤波器传递了50%。

下面的例子展示了,在给定权重函数下,其高斯滤波器传递曲线的样子。

范例5.1 在给定空间域λc≤x≤λc下,描绘高斯滤波器S。

其中让λc=0.8mm,采样间隔∆x=1μm。

下面是MATLAB生成的代码,并且其所描述的图展示在(图5.1 a)。

图5.1 a绘制高斯滤波器;λc=0.8mm,b高斯滤波器传递特性lambdac=0.8; % in mmdx=0.001; % in mmx=(-lambdac:dx:lambdac)’;alpha=0.4697;S=(1/(alpha*lambdac)).*exp(-pi*(x/(alpha*lambdac)).^2);% generate the Gaussian filterS=S/sum(S); % normalize to unit sumplot(x,S);xlabel(’Distance (mm)’);ylabel(’Weighting function’);范例5.2 产生高斯滤波器S的振幅传输特性,并且评估正弦波的振幅传输特性,其截止波长(λc=0.8mm)。

高斯滤波器的传递特性能够同样获得,通过借助第四章4.4范例所示的矩形滤波器例程。

yolo 双边滤波算法

yolo 双边滤波算法

yolo 双边滤波算法【原创版】目录1.介绍 YOLO 算法2.双边滤波算法的原理3.YOLO 算法与双边滤波算法的结合4.YOLO 算法中双边滤波算法的应用优势5.结论正文一、介绍 YOLO 算法YOLO(You Only Look Once)是一种实时目标检测算法,其特点是检测速度快、实时性好。

YOLO 算法通过神经网络对图像进行单次推理,实现对多个目标的同时检测。

与其他目标检测算法相比,YOLO 算法在保证精度的同时,大大提高了检测速度。

因此,YOLO 算法在实时目标检测领域受到广泛关注。

二、双边滤波算法的原理双边滤波算法是一种非线性滤波算法,其目的是在保留图像边缘信息的同时,对图像进行平滑处理。

双边滤波算法考虑了像素间的空间关系和像素值本身的差异,通过调整滤波模板和权重,实现对图像的滤波。

与高斯滤波相比,双边滤波在边缘处理方面效果更好,能够有效地避免边缘模糊现象。

三、YOLO 算法与双边滤波算法的结合在 YOLO 算法中,双边滤波算法可以应用于特征图的预处理,以提高目标检测的精度。

通过在特征提取层之后加入双边滤波层,可以对特征图进行平滑处理,减少噪声,同时保留图像的边缘信息。

这样,在后续的目标检测层中,模型可以更好地识别和定位目标。

四、YOLO 算法中双边滤波算法的应用优势在 YOLO 算法中应用双边滤波算法,可以带来以下优势:1.提高检测精度:双边滤波算法可以有效地减少特征图的噪声,提高模型对目标的识别和定位能力。

2.保留边缘信息:双边滤波算法在平滑图像的同时,能够很好地保留边缘信息,避免边缘模糊现象。

3.实时性好:双边滤波算法的计算复杂度较低,不会对 YOLO 算法的检测速度产生明显影响,仍能保持实时检测的特点。

五、结论总之,将双边滤波算法应用于 YOLO 算法中,可以提高目标检测的精度和鲁棒性,同时保持实时性好的特点。

图像噪声、均值滤波、高斯滤波、中值滤波

图像噪声、均值滤波、高斯滤波、中值滤波

一、图像噪声由于图像采集、处理、传输等过程不可避免的会受到噪声的污染,妨碍人们对图像理解及分析处理。

常见的图像噪声有高斯噪声、椒盐噪声等。

1、椒盐噪声2、高斯噪声高斯噪声是指噪声的密度服从高斯分布的一类噪声,由于高斯噪声在空间和频域中数学上的易处理性,这种噪声(也称为正态噪声)模型经常被用于实践中。

高斯噪声随机变量z的概率密度函数由下式给出:加入高斯噪声后的效果:二、图像平滑图像平滑从信号处理的角度看就是去除其中的高频信息,保留低频信息。

因此我们可以对图像实施低通滤波。

低通滤波可以去除图像中的噪声,对图像进行平滑。

根据滤波器的不同可以分为:均值滤波、高斯滤波、中值滤波、双边滤波我们认为高频信息就是噪声,低频信息就是有用的内容。

1、均值滤波(1)api介绍(2)实例分析import cv2 as cvimport numpy as npimport matplotlib.pyplot as pltfrom matplotlib import font_manager#字体设置my_font = font_manager.fontproperties(fname="c:/windows/fonts/sthupo.ttf")#1、读取图像img = cv.imread("./images/girl.jpg")#2、均值滤波blur = cv.blur(img, (5,5))#3、图像显示plt.figure(figsize=(10,8), dpi=100)# subplot中的121代表[1,2,1],表示在本区域里显示1行2列个图像,最后的1表示本图像显示在第一个位置。

plt.subplot(121)plt.imshow(img[:,:,::-1])plt.title("原图", fontproperties=my_font)plt.xticks([]), plt.yticks([])plt.subplot(122)plt.imshow(blur[:,:,::-1])plt.title("均值滤波后的结果", fontproperties=my_font)plt.xticks([]), plt.yticks([])plt.show()2、高斯滤波图像是二维的,所以使用二维高斯分布。

快速高斯变换的双边滤波

快速高斯变换的双边滤波

快速高斯变换的双边滤波
双边滤波是图像处理中常用的滤波技术,能够在平滑图像的同时保留边缘信息。

它使
用了高斯核和双边权重两种滤波方式,因此精度较高,能够在一定程度上减少图像噪声和
平滑图像。

但是,双边滤波的计算量较大。

为了提高计算速度,研究人员设计了快速高斯
变换的双边滤波算法。

快速高斯变换是一种基于递归的计算方法,可以加快高斯滤波的计算速度。

它的主要
思想是利用高斯核的线性性质,将高斯核的卷积运算分解为一系列小的卷积运算,从而加
快计算速度。

具体来说,快速高斯变换使用了高斯递推公式,通过先前计算得到的结果来
递推计算当前位置的值,减少了乘法和指数函数的计算次数。

在使用快速高斯变换的双边滤波时,先通过高斯滤波对图像进行预处理,然后应用双
边滤波,结合两种技术的优势,达到更好的效果。

快速高斯变换可以大大减少高斯滤波的
计算量,同时双边滤波可以保留更多的边缘信息,从而提高了图像的质量。

快速高斯变换的实现通常采用分步递推的方式,即将高斯核的卷积运算分解成多段小
的卷积运算,并分别计算每一步的结果。

在双边滤波中,需要计算的是两个高斯核函数,
分别是空间高斯函数和灰度高斯函数。

空间高斯函数对应空间域中的像素位置,而灰度高
斯函数对应图像灰度差异。

因此,在计算双边权重时,需要同时考虑空间上的距离和灰度
值的差异。

快速高斯变换的双边滤波具有较高的计算速度和较好的滤波效果,可以用于图像去噪、图像增强、图像分割等领域。

同时,为了进一步提高算法效率,可以采用并行计算或GPU
加速等技术,使其适用于大规模图像处理任务。

双边滤波(BilateralFilter)详解

双边滤波(BilateralFilter)详解

双边滤波(BilateralFilter)详解原理分析:双边滤波与高斯滤波器相比,对于图像的边缘信息能过更好的保存。

其原理为一个与空间距离相关的高斯函数与一个灰度距离相关的高斯函数相乘。

空间距离:指的是当前点与中心点的欧式距离。

空间域高斯函数其数学形式为:其中(xi,yi)为当前点位置,(xc,yc)为中心点的位置,sigma 为空间域标准差。

灰度距离:指的是当前点灰度与中心点灰度的差的绝对值。

值域高斯函数其数学形式为:其中gray(xi,yi)为当前点灰度值,gray(xc,yc)为中心点灰度值,sigma为值域标准差。

对于高斯滤波,仅用空间距离的权值系数核与图像卷积后,确定中心点的灰度值。

即认为离中心点越近的点,其权重系数越大。

双边滤波中加入了对灰度信息的权重,即在邻域内,灰度值越接近中心点灰度值的点的权重更大,灰度值相差大的点权重越小。

此权重大小,则由值域高斯函数确定。

两者权重系数相乘,得到最终的卷积模板。

由于双边滤波需要每个中心点邻域的灰度信息来确定其系数,所以其速度与比一般的滤波慢很多,而且计算量增长速度为核大小的平方。

参数选择:空间域sigma选取:其中核大小通常为sigma的6*sigma + 1。

因为离中心点3*sigma大小之外的系数与中点的系数只比非常小,可以认为此之外的点与中心点没有任何联系,及权重系数为0.OpenCV 中默认的计算公式也是如此,OpenCV参考文档内容如下:“对应高斯参数的Gaussian sigma (标准差). 如果为零,则标准差由下面的核尺寸计算: sigma = (n/2 - 1)*0.3 + 0.8, 其中 n=param1 对应水平核,n=param2对应垂直核.”值域sigma选取:另灰度差△g= abs(gray(xi,yi)- gray(xc,yc)),忽略常数的影响,因此其函数可以简化为:由的图像可知:已知0≤△g≤255;1)假设sigma = 255,当△g = 255时,系数为exp(-1)= 0.3679,当△g = 0时,系数为exp(-0)= 1.灰度最大点的系数与相差最小的灰度值系数之比为 0.3679.2)假设sigma = 122.5,当△g = 255时,系数为exp(-4) = 0.0183,当△g = 0时,系数为exp(-0)= 1.灰度差最大点的系数与相差最小的灰度值系数之比为 0.0183.结论:因为导数为,其增长速度为指数增长。

数学之路-python计算实战(18)-机器视觉-滤波去噪(双边滤波与高斯滤波)

数学之路-python计算实战(18)-机器视觉-滤波去噪(双边滤波与高斯滤波)

数学之路-python计算实战(18)-机器视觉-滤波去噪(双边滤
波与⾼斯滤波)
⾼斯滤波就是对整幅图像进⾏加权平均的过程。

每个像素点的值,都由其本⾝和邻域内的其它像素值经过加权平均后得到。

⾼斯滤波的详细操作是:⽤⼀个模板(或称卷积、掩模)扫描图像中的每个像素。

⽤模板确定的邻域内像素的加权平均灰度值去替代模板中⼼像素点的值。

#滤波去噪
lbimg=cv2.GaussianBlur(newimg,(3,3),1.8)
cv2.imshow('src',newimg)
cv2.imshow('dst',lbimg)
cv2.waitKey()
cv2.destroyAllWindows()
双边滤波器的优点是能够做边缘保存(edge preserving),⼀般过去⽤的维纳滤波或者⾼斯滤波去降噪。

都会较明显地模糊边缘,对于⾼频细节的保护效果并不明显。

双边滤波器顾名思义⽐⾼斯滤波多了⼀个⾼斯⽅差sigma-d,它是基于空间分布的⾼斯滤波函数。

所以在边缘附近,离的较远的像素不会太多影响到边缘上的像素值,这样就保证了边缘附近像素值的保存。

#滤波去噪
lbimg=cv2.bilateralFilter(newimg,3,140,140)
cv2.imshow('src',newimg)
cv2.imshow('dst',lbimg)
cv2.waitKey()
cv2.destroyAllWindows()。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1. 简介图像平滑是一个重要的操作,而且有多种成熟的算法。

这里主要简单介绍一下Bilateral方法(双边滤波),这主要是由于前段时间做了SSAO,需要用bilateral blur 算法进行降噪。

Bilateral blur相对于传统的高斯blur来说很重要的一个特性即可可以保持边缘(Edge Perseving),这个特点对于一些图像模糊来说很有用。

一般的高斯模糊在进行采样时主要考虑了像素间的空间距离关系,但是却并没有考虑像素值之间的相似程度,因此这样我们得到的模糊结果通常是整张图片一团模糊。

Bilateral blur的改进就在于在采样时不仅考虑像素在空间距离上的关系,同时加入了像素间的相似程度考虑,因而可以保持原始图像的大体分块进而保持边缘。

在于游戏引擎的post blur算法中,bilateral blur常常被用到,比如对SSAO的降噪。

2. 原理滤波算法中,目标点上的像素值通常是由其所在位置上的周围的一个小局部邻居像素的值所决定。

在2D高斯滤波中的具体实现就是对周围的一定范围内的像素值分别赋以不同的高斯权重值,并在加权平均后得到当前点的最终结果。

而这里的高斯权重因子是利用两个像素之间的空间距离(在图像中为2D)关系来生成。

通过高斯分布的曲线可以发现,离目标像素越近的点对最终结果的贡献越大,反之则越小。

其公式化的描述一般如下所述:其中的c即为基于空间距离的高斯权重,而用来对结果进行单位化。

高斯滤波在低通滤波算法中有不错的表现,但是其却有另外一个问题,那就是只考虑了像素间的空间位置上的关系,因此滤波的结果会丢失边缘的信息。

这里的边缘主要是指图像中主要的不同颜色区域(比如蓝色的天空,黑色的头发等),而Bilateral就是在Gaussian blur中加入了另外的一个权重分部来解决这一问题。

Bilateral滤波中对于边缘的保持通过下述表达式来实现:其中的s为基于像素间相似程度的高斯权重,同样用来对结果进行单位化。

对两者进行结合即可以得到基于空间距离、相似程度综合考量的Bilateral滤波:上式中的单位化分部综合了两种高斯权重于一起而得到,其中的c与s计算可以详细描述如下:且有且有上述给出的表达式均是在空间上的无限积分,而在像素化的图像中当然无法这么做,而且也没必要如此做,因而在使用前需要对其进行离散化。

而且也不需要对于每个局部像素从整张图像上进行加权操作,距离超过一定程度的像素实际上对当前的目标像素影响很小,可以忽略的。

限定局部子区域后的离散化公就可以简化为如下形式:上述理论公式就构成了Bilateral滤波实现的基础。

为了直观地了解高斯滤波与双边滤波的区别,我们可以从下列图示中看出依据。

假设目标源图像为下述左右区域分明的带有噪声的图像(由程序自动生成),蓝色框的中心即为目标像素所在的位置,那么当前像素处所对应的高斯权重与双边权重因子3D可视化后的形状如后边两图所示:左图为原始的噪声图像;中间为高斯采样的权重;右图为Bilateral采样的权重。

从图中可以看出Bilateral加入了相似程度分部以后可以将源图像左侧那些跟当前像素差值过大的点给滤去,这样就很好地保持了边缘。

为了更加形象地观察两者间的区别,使用Matlab将该图在两种不同方式下的高度图3D绘制出来,如下:上述三图从左到右依次为:双边滤波,原始图像,高斯滤波。

从高度图中可以明显看出Bilateral和Gaussian两种方法的区别,前者较好地保持了边缘处的梯度,而在高斯滤波中,由于其在边缘处的变化是线性的,因而就使用连累的梯度呈现出渐变的状态,而这表现在图像中的话就是边界的丢失(图像的示例可见于后述)。

3. 代码实现有了上述理论以后实现Bilateral Filter就比较简单了,其实它也与普通的Gaussian Blur没有太大的区别。

这里主要包括3部分的操作: 基于空间距离的权重因子生成;基于相似度的权重因子的生成;最终filter颜色的计算。

3.1 Spatial Weight这就是通常的Gaussian Blur中使用的计算高斯权重的方法,其主要通过两个pixel之间的距离并使用如下公式计算而来:其中的就表示两个像素间的距离,比如当前像素与其右边紧邻的一个像素之间的距离我们就可以用来计算,也即两个二维向量{0 , 0}以及{0 , 1}之间的欧氏距离。

直接计算一个区域上的高斯权重并单位化后就可以进行高斯模糊了。

3.2 Similarity Weight与基于距离的高斯权重计算类似,只不过此处不再根据两个pixel之间的空间距离,而是根据其相似程度(或者两个pixel的值之间的距离)。

其中的表示两个像素值之间的距离,可以直接使用其灰度值之间的差值或者RGB向量之间的欧氏距离。

3.3 Color Filtering有了上述两部分所必需的权重因子之后,那么具体的双边滤波的实现即与普通的高斯滤波无异。

主要部分代码如下述:[cpp]view plaincopy1.UCHAR3 BBColor(int posX , int posY)2.{3.int centerItemIndex = posY * picWidth4 + posX * 3 , neighbourItemIndex;4.int weightIndex;5.double gsAccumWeight = 0;6.double accumColor = 0;7.8.// 计算各个采样点处的Gaussian权重,包括closeness,similarity9.for(int i = -number ; i <= number ; ++i)10. {11.for(int j = -number ; j <= number ; ++j)12. {13. weightIndex = (i + number) * (number * 2 + 1) + (j + number);14. neighbourItemIndex = min(noiseImageHeight -1 , max(0 , posY + j * radius)) * picWidth4 +15. min(noiseImageWidth -1 , max(0 , posX + i * radius)) * 3;16.17. pCSWeight[weightIndex] = LookupGSWeightTable(pSrcDataBuffer[neighbourItemIndex] , pSrcDataBuffer[centerItemIndex]);18. pCSWeight[weightIndex] = pGSWeight[weightIndex] * pGCWeight[weightIndex];19. gsAccumWeight += pCSWeight[weightIndex];20. }21. }22.23.// 单位化权重因子24. gsAccumWeight = 1 / gsAccumWeight;25.for(int i = -number ; i <= number ; ++i)26. {27.for(int j = -number ; j <= number ; ++j)28. {29. weightIndex = (i + number) * (number * 2 + 1) + (j + number);30. pCSWeight[weightIndex] *= gsAccumWeight;31. }32. }33.34.// 计算最终的颜色并返回35.for(int i = -number ; i <= number ; ++i)36. {37.for(int j = -number ; j <= number ; ++j)38. {39. weightIndex = (i + number) * (number * 2 + 1) + (j + number);40. neighbourItemIndex = min(noiseImageHeight -1 , max(0 , posY + j * radius)) * picWidth4 +41. min(noiseImageWidth -1 , max(0 , posX + i * radius)) * 3;42. accumColor += pSrcDataBuffer[neighbourItemIndex + 0] * pCSWeight[weightIndex];43. }44. }45.46.return UCHAR3(accumColor , accumColor , accumColor);47.}其中的相似度分部的权重s主要根据两个Pixel之间的颜色差值计算面来。

对于灰度图而言,这个差值的范围是可以预知的,即[-255, 255],因而为了提高计算的效率我们可以将该部分权重因子预计算生成并存表,在使用时快速查询即可。

使用上述实现的算法对几张带有噪声的图像进行滤波后的结果如下所示:上图从左到右分别为:双边滤波;原始图像;高斯滤波。

从图片中可以较为明显地看出两种算法的区别,最直观的感受差别就是使用高斯算法后整张图片都是一团模糊的状态;而双边滤波则可以较好地保持原始图像中的区域信息,看起来仍然嘴是嘴、眼是眼(特别是在第一张美女图像上的效果!看来PS 是灰常重要啊~~^o^)。

4. 在SSAO 中的使用在上述实现中的边缘判定函数主要是通过两个像素值之间的差异来决定,这也是我们观察普通图片的一种普遍感知方式。

当然,也可以根据使用的需求情况来使用其它的方式判断其它定义下的边缘,比如使用场景的depth 或是normal 。

比如在对SSAO 进行滤波时可以直接使用Depth 值来行边缘判断。

首先,设置一个深度的阈值,在作边缘检测时比较两点间的depth 差值,如果差值大于阈值,则认为其属于不同的区域,则此处就应为边界。

使用此方法得到的效果可见于下图所示:高斯滤波双边滤波在得到滤波之后的SSAO图像之后,与原始图像进行直接的整合就可以得到最终的渲染效果,如下图所示:SSAO关闭SSAO开启。

相关文档
最新文档