【Emgu CV教程】6.8、图像平滑之BilateralFilter()双边滤波


一、介绍

1.原理

BilateralFilter()双边滤波也是非线性滤波,之前介绍的滤波只考虑空间信息(滤波核或邻域),容易造成边缘模糊和细节丢失,相比来说双边滤波在计算某一个像素点的新值时,不仅考虑距离信息(距离越远,权重越小),还考虑色彩信息(色彩差别越大,权重越小)。

1、距离目标像素点越远,权重越小;距离目标像素点越近,权重越大。
2、与目标像素点值越远,权重值越小;与目标像素点值相近,权重值越大

由于双边滤波同时考虑距离和色彩,因此它在去除噪声同时,又能够较好地保护边缘信息。函数的具体数学原理和计算过程,读者们自己百度一下,下面只给出具体用法。

2.函数介绍

官方定义如下:

public static void BilateralFilter(
	IInputArray src,  // 输入图像
	IOutputArray dst, // 输出图像
	int d, // 滤波核的大小,也就是选取的邻域像素的高度和宽度。
	double sigmaColor, // 滤波核在颜色空间的方差,值越大就说明周围有越多的像素点可以参与到运算中。该值为0时,滤波失去意义;该值为255时,滤波核内的所有点都能够参与运算。
	double sigmaSpace, // 滤波核在距离空间的方差,值越大,意味着更远的像素影响越大。
	BorderType borderType = BorderType.Reflect101 // 边界样式,一般选默认。
)

二、举例

1.原始素材

原始素材定义为srcMat,如下:
在这里插入图片描述
还是这个有椒盐噪声的向日葵图片。

2.代码

Emgu CV双边滤波代码如下:

Mat tempMat = srcMat.Clone();
Mat dstMat = new Mat();
int d = 13;
double sigmaColor = 250.0;
double sigmaSpace = 20.5;
CvInvoke.BilateralFilter(tempMat, dstMat, d, sigmaColor, sigmaSpace);
CvInvoke.Imshow("BilateralFilter image, " + dstMat.Size.ToString(), dstMat);

3.运行结果

在这里插入图片描述
代码采用了还是采用13 * 13的滤波核,椒盐噪声已经没有了,花朵和绿叶上的纹理和边缘还是很清晰的。其实BilateralFilter()双边滤波最适合的用处是人脸美颜,下面看看美颜的效果:
在这里插入图片描述


原创不易,请勿抄袭。共同进步,相互学习。

  • 27
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值