栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

双边滤波(Bilateral Filter)原理解析及代码实现

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

双边滤波(Bilateral Filter)原理解析及代码实现

一、双边滤波和高斯滤波

**双边滤波(Bilateral Filter)原理解析及代码实现**_molihong28的博客-CSDN博客

 

 

高斯滤波: 空间距离相关的高斯函数

 公式中(xi,yi)为当前点位置,(xc,yc)为中心点的位置,sigma为空间域标准差。

双边滤波: 灰度距离相关的高斯函数相乘,(美颜相机用的就是这个算法)

 二、高斯滤波的的局限

        高斯滤波是一种空间的距离加权,对中心像素的近的位置权比较大,但是远的距离是小的,但是有一种情况,当远的这个距离的像素代的元素是只要的呢,那么这个就是不能体现图像的特征了,所以在高斯滤波的基础上进行下一步操作,加上灰度值的变化。

 上述图像是高斯滤波的。

C++: void bilateralFilter(
InputArray src, // 输入图像,可以是Mat类型,图像必须是8位或浮点型单通道、三通道的图像。
OutputArray dst, // 输出图像,和原图像有相同的尺寸和类型。
int d,//表示在过滤过程中每个像素邻域的直径范围。如果这个值是非正数,则函数会从第五个参数
double sigmaColor, //颜色空间过滤器的sigma值,这个参数的值越大,表明该像素邻域内有月宽广的颜色会被混合到一起,产生较大的半相等颜色区域。
double sigmaSpace, //坐标空间中滤波器的sigma值,如果该值较大,则意味着颜色相近的较远的像素将相互影响,从而使更大的区域中足够相似的颜色获取相同的颜色。当d>0时,d指定了邻域大小且与sigmaSpace五官,否则d正比于sigmaSpace.
 int borderType=BORDER_DEFAULT // 用于推断图像外部像素的某种边界模式,有默认值BORDER_DEFAULT
)

双边滤波器可以很好的保存图像边缘细节而滤除掉低频分量的噪音,但是双边滤波器的效率不是太高,花费的时间相较于其他滤波器而言也比较长。
对于简单的滤波而言,可以将两个sigma值设置成相同的值,如果值<10,则对滤波器影响很小,如果值>150则会对滤波器产生较大的影响,会使图片看起来像卡通。

#include
#include
#include
//#include

using namespace std;
using namespace cv;

//定义全局变量
const int g_ndMaxValue = 100;
const int g_nsigmaColorMaxValue = 200;
const int g_nsigmaSpaceMaxValue = 200;
int g_ndValue;
int g_nsigmaColorValue;
int g_nsigmaSpacevalue;

Mat g_srcImage;
Mat g_dstImage;

//定义回调函数
void on_bilateralFilterTrackbar(int, void*);

int main(int argc, char**argv)
{
	g_srcImage = imread("D:/picture/opencv/images/Lenna.png");

	//判断图像是否加载成功
	if (g_srcImage.empty())
	{
		cout << "could not load image..." << endl;
		return -1;
	}
	namedWindow("src", WINDOW_AUTOSIZE);
	imshow("src", g_srcImage);

	//定义输出图像窗口属性和轨迹条属性
	namedWindow("bilateralFilter", WINDOW_AUTOSIZE);
	g_ndValue = 10;
	g_nsigmaColorValue = 10;
	g_nsigmaSpacevalue = 10;

	char dName[20];
	sprintf(dName, "邻域直径 %d", g_ndMaxValue);

	char sigmaColorName[20];
	sprintf(sigmaColorName, "sigmaColor %d", g_nsigmaColorMaxValue);

	char sigmaSpaceName[20];
	sprintf(sigmaSpaceName, "sigmaSpace %d", g_nsigmaSpaceMaxValue);

	//创建轨迹条
	createTrackbar(dName, "bilateralFilter", &g_ndValue, g_ndMaxValue, on_bilateralFilterTrackbar);
	on_bilateralFilterTrackbar(g_ndValue, 0);

	createTrackbar(sigmaColorName, "bilateralFilter", &g_nsigmaColorValue,
		g_nsigmaColorMaxValue, on_bilateralFilterTrackbar);
	on_bilateralFilterTrackbar(g_nsigmaColorValue, 0);

	createTrackbar(sigmaSpaceName, "bilateralFilter", &g_nsigmaSpacevalue,
		g_nsigmaSpaceMaxValue, on_bilateralFilterTrackbar);
	on_bilateralFilterTrackbar(g_nsigmaSpacevalue, 0);

	waitKey(0);
	//system("pause");
	//getchar();
	//Sleep(10000);
	return 0;
}

void on_bilateralFilterTrackbar(int, void*)
{
	bilateralFilter(g_srcImage, g_dstImage, g_ndValue, g_nsigmaColorValue, g_nsigmaSpacevalue);
	imshow("bilateralFilter", g_dstImage);
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/740505.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号