OpenCV-24双边滤波

一、概念

双边滤波对于图像的边缘信息能够更好的保存。其原理为一个与空间距离 相关的高斯函数与一个灰度距离相关的高斯函数相乘。

空间距离:指的是当前点与中心点的欧式距离。空间域的高斯函数及其数学形式为:

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

灰度距离:指的是当前点灰度与中心点灰度的差的绝对值。值域高斯函数及其数学形式为:

其中gray(xi,yi)为当前点的灰度值,gray(xc,yc)为中心点的灰度值,sigma为值域标准差。

双边滤波本质上是高斯滤波,双边滤波和高斯滤波不同的就是:双边滤波既利用率位置信息又利用了像素信息来定义滤波窗口的权重。而高斯滤波只用了位置信息。

对于高斯滤波,仅用空间距离的权值系数与图像卷积后,确定中心点的灰度值。即认为离中心点越近的点,其权重系数越大。

双边滤波加入了对灰度信息的权重,即在邻域内,灰度值越接近中心点灰度值的点权重更大,灰度值相差大的点权重越小,此权重大小,则由值域高斯函数确定。

两者权重系数相乘,得到最终的卷积模板。由于双边滤波需要每个中心点邻域的灰度信息来确定其系数,所以其速度相比较一般的滤波慢的多,而且计算量增长速度为核大小的平方。

双边滤波可以保留边缘,同时可以对边缘内的区域进行平滑处理。(有美颜的效果)

如果在边界出现灰度值变化较大

二、代码演示

使用API---bilateralFilter(src, d, sigmaColor, sigmaSpace[,dst[,borderType]])

--- d相当于卷积核的大小,为整数

--- sigmaColor是计算像素信息使用的sigma

--- sigmaSpace是计算空间信息使用的sigma

示例代码如下:

复制代码
import cv2
import numpy as np

girl = cv2.imread("beautiful women.png")
new_girl = cv2.bilateralFilter(girl, 7, sigmaColor=50, sigmaSpace=50)

cv2.imshow("img", np.hstack((girl, new_girl)))
cv2.waitKey(0)
cv2.destroyAllWindows()

输出结果如下:

可以看出,右边的图片人物表面平滑,有美颜效果。

相关推荐
骑士雄师几秒前
学生管理系统python版本比对
开发语言·python
William.csj1 分钟前
Linux——服务器后台运行程序指南(包含 Python 与 .sh 脚本实战)
linux·服务器·python
AI_Auto4 分钟前
【智能制造】- MES+智能体Agent8大落地场景
人工智能·制造
莱歌数字4 分钟前
你的边缘AI盒子为什么烫手?——散热设计的最后一道物理防线
人工智能·科技·电脑·制造·散热
AI周红伟6 分钟前
All in Token,百度李彦宏指出:Token经济,阿里,百度,腾讯,字节,移动,电信,联通,华为,开启新的Token战争
大数据·人工智能·windows·百度·copilot·openclaw
Cloud_Shy61810 分钟前
Python 数据分析基础入门:《Excel Python:飞速搞定数据分析与处理》学习笔记系列(第十章 Python 驱动的 Excel 工具 上篇)
vscode·python·数据分析·excel·pandas
EW Frontier11 分钟前
【信号分选】深度学习颠覆射频信号分离:UNet/WaveNet 性能碾压传统方法【附python代码】
python·深度学习·unet·wavenet·射频信号源分离·icassp信号处理挑战赛
不懂的浪漫11 分钟前
AGI 需要身体:从 Manus 到企业 Agent Runtime
人工智能·agent·agi·runtime
XD74297163611 分钟前
科技早报晚报|2026年5月17日:建筑估算自动化、支持排障录屏与端侧多语言 TTS,今天更值得跟进的 3 个技术机会
人工智能·科技·科技新闻·开发者工具·垂直ai·科技早报
2301_8092445312 分钟前
如何解决宝塔面板磁盘空间占满问题_使用磁盘清理工具清理
jvm·数据库·python