首页 > 其他分享 >双边滤波 & 高斯滤波

双边滤波 & 高斯滤波

时间:2023-09-17 23:13:37浏览次数:30  
标签:函数 平滑 滤波 像素 图像 双边 高斯

双边滤波(Bilateral filter)是一种非线性的滤波方法,是结合图像的空间邻近度和像素值相似度的一种折衷处理,同时考虑空域信息和灰度相似性,达到保边去噪的目的。普通的高斯滤波会将图像的边缘模糊掉,而双边滤波器具有保边特性。

一般的高斯模糊在进行采样时主要考虑了像素间的空间距离关系,但是却并没有考虑像素值之间的相似程度,因此这样我们得到的模糊结果通常是整张图片一团模糊。Bilateral blur的改进就在于在采样时不仅考虑像素在空间距离上的关系,同时加入了像素间的相似程度考虑,因而可以保持原始图像的大体分块进而保持边缘。

下面先讲高斯滤波,明白的同学请直接跳过。

高斯滤波
在2D高斯滤波中的具体实现就是对周围的一定范围内的像素值分别赋以不同的高斯权重值,并在加权平均后得到当前点的最终结果。而这里的高斯权重因子是利用两个像素之间的空间距离(在图像中为2D)关系来生成。通过高斯分布的曲线可以发现,离目标像素越近的点对最终结果的贡献越大,反之则越小。

高斯核函数一种最常用的径向基函数,形式为

其中xc为核函数中心,σ为函数的宽度参数 , 控制了函数的径向作用范围。所谓径向基函数 (Radial Basis Function 简称 RBF), 就是某种沿径向对称的标量函数 通常定义为空间中任一点x到某一中心xc之间欧氏距离的单调函数 , 可记作 k(||x-xc||), 其作用往往是局部的 , 即当x远离xc时函数取值很小。
高斯函数具有五个重要的性质,这些性质使得它在早期图像处理中特别有用.这些性质表明,高斯平滑滤波器无论在空间域还是在频率域都是十分有效的低通滤波器,且在实际图像处理中得到了工程人员的有效使用.高斯函数具有五个十分重要的性质,它们是:
(1)二维高斯函数具有旋转对称性,即滤波器在各个方向上的平滑程度是相同的.一般来说,一幅图像的边缘方向是事先不知道的,因此,在滤波前是无法确定一个方向上比另一方向上需要更多的平滑.旋转对称性意味着高斯平滑滤波器在后续边缘检测中不会偏向任一方向.
(2)高斯函数是单值函数.这表明,高斯滤波器用像素邻域的加权均值来

代替该点的像素值,而每一邻域像素点权值是随该点与中心点的距离单调增减的.这一性质是很重要的,因为边缘是一种图像局部特征,如果平滑运算对离算子中心很远的像素点仍然有很大作用,则平滑运算会使图像失真.

(3)高斯函数的付立叶变换频谱是单瓣的.正如下面所示,这一性质是高斯函数付立叶变换等于高斯函数本身这一事实的直接推论.图像常被不希望的高频信号所污染(噪声和细纹理).而所希望的图像特征(如边缘),既含有低频分量,又含有高频分量.高斯函数付立叶变换的单瓣意味着平滑图像不会被不需要的高频信号所污染,同时保留了大部分所需信号.

(4)高斯滤波器宽度(决定着平滑程度)是由参数σ表征的,而且σ和平滑程度的关系是非常简单的.σ越大,高斯滤波器的频带就越宽,平滑程度就越好.通过调节平滑程度参数σ,可在图像特征过分模糊(过平滑)与平滑图像中由于噪声和细纹理所引起的过多的不希望突变量(欠平滑)之间取得折衷.

(5)由于高斯函数的可分离性,大高斯滤波器可以得以有效地实现.二维高斯函数卷积可以分两步来进行,首先将图像与一维高斯函数进行卷积,然后将卷积结果与方向垂直的相同一维高斯函数卷积.因此,二维高斯滤波的计算量随滤波模板宽度成线性增长而不是成平方增长.

高斯滤波的问题
高斯滤波没有考虑图像的边缘,会将边缘模糊掉。因为高斯核只考虑了空间分布,没有考虑到像素值的差异。图像的边缘往往是图像灰度剧烈变化的地方。所以可以综合考虑图像灰度因素。

双边滤波器原理
双边滤波方法(Bilateral filtering)是基于Gauss 滤波方法提出的,主要是针对Gauss 滤波中将Gauss 权系数直接与图像信息作卷积运算进行图像滤波的原理,将滤波权系数优化成Gauss 函数和图像亮度信息的乘积,优化后的权系数再与图像信息作卷积运算,这样就能在滤波的同时考虑到图像信息中的图像边缘信息,使图像在正常Gauss 滤波后很模糊的边缘信息得以保持清晰,并且图像边缘更加平滑。此方法对于彩色和灰度图像的滤波均适用,具有很强的实用性。
设原图为f(x,y),(x,y)为像素的坐标,双边滤波后(x,y)点的像素值变为

公式中Sx,y 表示中心点(x,y)的(2N+1)*(2N+1)大小的领域。实际上,公式右边就是中心像素点邻域内像素亮度值的加权平均。
权值W由两部分组成

W(i,j)=Ws(i,j)*Wr(i,j)
双边滤波器的加权系数是这两部分因子的非线性组合,空间邻近度因子Ws和亮度相似度因子Wr的乘积。前者随着像素点与中心点之间欧几里德距离的增加而减小,后者随着两像素亮度值之差的增大而减小。在图像变化平缓的区域,邻域内像素亮度值相差不大,双边滤波转化为高斯低通滤波器;在图像变化剧烈的区域,滤波器利用边缘点附近亮度值相近的像素点的亮度值平均代替原亮度值。因此,双边滤波器既平滑滤波了图像,又保持了图像的边缘。双边滤波器受3个参数的控制:滤波器半宽N、参数δs和δr。N越大,平滑作用越强;δs和δr分别控制着空间邻近度因子Ws和亮度像似度因子Wr的衰减程度。

define MAX_IMAGE_SIZE 1024

double d[MAX_IMAGE_SIZE][MAX_IMAGE_SIZE];//d[i][j]表示入图像,fi][j]表示出图像。
double f[MAX_IMAGE_SIZE][MAX_IMAGE_SIZE];
void CImageColorProcess::Bilateral(LPBYTE lpSrc, LPBYTE lpDst, int nSrcCount, int nW, int nH)
{
int i, j, k, l;
int p = 5;//p决定模板大小。当p=1时,模板为33;当p=2时,模板为55;当p=n时,模板为(2n+1)(2n+1)。
short m, n;
double a1 = 0.02, b1 = 0.002;
double aa1, bb1;//aa1,bb1为滤波模板中的各权重。
//gguiyi高斯滤波的归一化系数,bguiyi双边滤波的归一化系数,gsum高斯滤波像素的加权和,bsum双边滤波像素的加权和。
double gguiyi = 0.0, bguiyi = 0.0, gsum = 0.0, bsum = 0.0;
int x_size2 = nW;//x_size1;
int y_size2 = nH;//y_size1;
LPBYTE lpSrc1 = new byte[nW
nH];
RGB2Gray(lpSrc, lpSrc1, 24, nW, nH);
//将读取的噪声图像赋给入力图像
for (i = 0; i < nH; i++)
{
for (j = 0; j < nW; j++)
{
d[i][j] = lpSrc1[inW + j];
}
}
//高斯滤波,双边滤波处理噪声图像
for (i = 0; i < nH; i++)
{
for (j = 0; j < nW; j++)
{
for (k = -p; k <= p; k++)
{
for (l = -p; l <= p; l++)
{
m = i + k; n = j + l;
//abs()返回指定数字的绝对值
if (m<0) { m = abs(i + k) - 1; }
if (m>nH - 1) { m = 2 * nH - i - k - 1; }
if (n<0) { n = abs(j + l) - 1; } if (n>nW - 1) { n = 2 * nW - j - l - 1; }
aa1 = exp(-a1
(ll + kk));
bb1 = exp(-b1(d[i][j] - d[m][n])(d[i][j] - d[m][n]));
bsum += aa1bb1d[m][n];
bguiyi += aa1bb1;
}
}
f[i][j] = bsum / bguiyi;
gguiyi = 0.0, bguiyi = 0.0, gsum = 0.0, bsum = 0.0;
}
}
//将滤波后的像素赋给新的图像
for (i = 0; i < nH; i++)
{
for (j = 0; j < nW; j++)
{
lpDst[i
nW + j] = (unsigned char)(f[i][j] + 0.5);
}
}

}

效果

以上三图从上到下分别为原图,高斯模糊和双边滤波后的效果图,双边滤波的保边效果还是很明显的。

标签:函数,平滑,滤波,像素,图像,双边,高斯
From: https://www.cnblogs.com/chuqianyu/p/17710076.html

相关文章

  • 双边快排的基准点和先判断left还是right问题
     前同事问了我一个双边快排的算法,他问我怎么都无法正常排序,代码如下,publicstaticvoidmain(String[]args){int[]arr=newint[]{7,3,6,4,8,9,0,22,28,2,3,79,24};arr=newint[]{4,4,6,5,3,2,8,1};System.out.println("left:"+0+"right:"......
  • 【语音处理】语音信号特技处理(延时、混响、滤波)附Matlab源码
    ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。......
  • BOSHIDA EMC滤波器对DC电源模块影响有多大?
    BOSHIDAEMC滤波器对DC电源模块影响有多大?随着电子设备的广泛应用,EMC(电磁兼容性)问题越来越受到关注。而EMC滤波器作为一种常见的电路器件,其作用在于抑制电源的干扰和防止外界干扰的影响。在DC电源模块的设计中,EMC滤波器的作用十分重要。 EMC滤波器对DC电源模块的影响主要体现......
  • IU86751低空载电流,40倍增益免滤波,2X28W双声道或50W音频放大器
    IU86751E是一款2x28W立体声;在单声道使用的情况下;最高可输出50W高效D类音频功率放大电路。先进的EMI抑制技术使得在输出端口采用廉价的铁氧体磁珠滤波器就可以满足EMC要求。IU86751E音频功率放大器是为需要输出高质量音频功率的系统设计的,它采用表面贴装技术,只需少量的外围器件,便使......
  • Python时间序列分析苹果股票数据:分解、平稳性检验、滤波器、滑动窗口平滑、移动平均
    全文链接:https://tecdat.cn/?p=33550原文出处:拓端数据部落公众号什么是时间序列?时间序列是一系列按时间顺序排列的观测数据。数据序列可以是等间隔的,具有特定频率,也可以是不规则间隔的,比如电话通话记录。在进行投资和交易研究时,对于时间序列数据及其操作要有专业的理解。本文......
  • 双边滤波 Bilateral Filtering
    本文是对图像去噪领域经典的双边滤波法的一个简要介绍与总结,论文链接如下:https://users.soe.ucsc.edu/~manduchi/Papers/ICCV98.pdf1.前言引入对一副原始灰度图像,我们将它建模为一张二维矩阵u,每个元素称为一个像素pixel,元素大小为灰度值。由于设备原因我们无法获取精准的图像,......
  • 高斯白噪声下雷达测量精度---------角度精度公式详细推导
    这周深圳台风,对于一个河南人来说,第一次碰见台风,心中有一些激动,那个脑中的画面,狂风卷积着乌云,大雨磅礴,电闪雷鸣。结果到最后感觉也没啥啊,还没有老家当时刮风大。难道我遇见了一个假台风?题外话到这,咱们回到正题,今天这篇是高斯白噪声下雷达测量精度的最后一篇--------角度精度公......
  • 11种常用滤波算法程序
    来源:嵌入式情报局一、限幅滤波法(程序判断滤波法)1/*2A、名称:限幅滤波法(又称程序判断滤波法)3B、方法:4根据经验判断,确定两次采样允许的最大偏差值(设为A),5每次检测到新值时判断:6如果本次值与上次值之差<=A,则本次值有效,7如果本次值与上次值之差>......
  • IIR滤波器算法
    IIR(InfiniteImpulseResponse)滤波器是一类递归型数字滤波器,其输出信号不仅与当前的输入信号有关,还与之前的输入和输出信号有关。因此,IIR滤波器的阶数相对较低,可以实现更为复杂的频率响应。IIR滤波器的数学模型描述如下:其中,x(n)和y(n)分别表示输入信号和输出信号,bk和ak分别为前向系......
  • 浅谈高斯消元法
    2023.6.16:发布2023.8.29:修缮,加上自己觉得通俗易懂的理解,更新矩阵求逆。高斯消元高斯消元可以用于线性方程组求解或者行列式计算,求矩阵的逆等等,也算是比较基础的一个思想。消元法定义消元法是将方程组中的一方程的未知数用含有另一未知数的代数式表示,并将其带入到另一方程中,......