opencv-双边滤波

这篇具有很好参考价值的文章主要介绍了opencv-双边滤波。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、双边滤波原理

双边滤波(Bilateral Filter)是非线性滤波中的一种。这是一种结合图像的空间邻近度与像素值相似度的处理办法。在滤波时,该滤波方法同时考虑空间临近信息与颜色相似信息,在滤除噪声、平滑图像的同时,又做到边缘保存。
双边滤波采用了两个高斯滤波的结合。一个负责计算空间邻近度的权值,也就是常用的高斯滤波器原理。而另一个负责计算像素值相似度的权值。在两个高斯滤波的同时作用下,就是双边滤波。
opencv-双边滤波
如上图所示,双边滤波的图像边缘信息被较好的保留,而高斯滤波的边缘信息则十分模糊。

二、双边滤波公式

g ( i , j ) = ∑ ( k , l ) ∈ S ( i , j ) f ( k , l ) w ( i , j , k , l ) ∑ ( k , l ) ∈ S ( i , j ) w ( i , j , k , l ) g(i,j)= {\frac {\sum_{(k,l)\in S(i,j)}f(k,l)w(i,j,k,l)} {\sum_{\substack{(k,l)\in S(i,j)}}w(i,j,k,l)} } g(i,j)=(k,l)S(i,j)w(i,j,k,l)(k,l)S(i,j)f(k,l)w(i,j,k,l)

S(i, j):指以 (i, j) 为中心的 (2N+1)x(2N+1) 的大小的范围;
f(k, l):(多个) 输入点;
w(i, j, k, l):代表经过两个高斯函数计算出的值(这里还不是权值)
g(i, j):输出点;

上述公式我们进行转化,假设公式中 w(i,j,k,l) 为 m,则有
g ( i , j ) = f 1 ∗ m 1 + f 2 ∗ m 2 + ⋯ + f n ∗ m n m 1 + m 2 + ⋯ + m n g(i,j)= {\frac {f_1*m_1+f_2*m_2+ \cdots +f_n*m_n} {m_1+m_2+ \cdots +m_n} } g(i,j)=m1+m2++mnf1m1+f2m2++fnmn
m 1 + m 2 + m 3 … + m n = M m_1+m_2+m_3 … +m_n = M m1+m2+m3+mn=M,则有
g ( i , j ) = f 1 ∗ m 1 M + f 2 ∗ m 2 M + ⋯ + f n ∗ m n M g(i,j) = f_1 * {\frac {m_1} M} + f_2 * {\frac {m_2} M} + \cdots + f_n * {\frac {m_n} M} g(i,j)=f1Mm1+f2Mm2++fnMmn

此时可以看到,这明显是图像矩阵与核的卷积运算了。其中 m1/M 代表的第一个点(或最后一个点,看后面如何实现)的权值,而图像矩阵与核通过卷积算子作加权和,最终得到输出值。
接下来我们来讨论最关键的w(i, j, k, l), ws为空间临近高斯函数,wr为像素值相似度高斯函数
w = w s ∗ w r w = w_s *w_r w=wswr w s = e − ( i − k ) 2 + ( j − l ) 2 2 σ s 2 w_s = e^{-{\frac {(i-k)^2+(j-l)^2}{2\sigma_s^2}}} ws=e2σs2(ik)2+(jl)2 w r = e − ∣ ∣ f ( i , j ) − f ( k , l ) ∣ ∣ 2 2 σ r 2 w_r = e^{-{\frac {||f(i,j)-f(k,l)||^2} {2\sigma_r^2}}} wr=e2σr2∣∣f(i,j)f(k,l)2 可以看到,对于 w s w_s ws 来说,这就是普通的高斯滤波函数,其代入的坐标, σ s \sigma_s σs 是程序输入值,该函数是在空间临近度上计算的。而 w r w_r wr 是计算像素值相似度(颜色空间),注意,这就是高斯函数代入坐标值, 2 σ r 2 2\sigma_r^2 2σr2 的上方是范数,在这里的值为 ∣ ∣ f ( i , j ) − f ( k , l ) ∣ ∣ 2 ||f(i,j)-f(k,l)||^2 ∣∣f(i,j)f(k,l)2 。也就是两个点像素值差值的绝对值的平方。其中,彩色图片计算差值时应将(i,j)点的RGB三通道值之和减去(k,l)点的RGB三通道值之和。这里是颜色空间计算,不能当成单通道,但是在最后矩阵卷积时,是单通道与权值相乘而不是三个通道之和。
总之,对于与模版中心点像素值相差较大的像素点来说,模板系数受高斯核的影响越小。反之,影响就越大。因此,对于不同种类的噪声点,可以联合调节 Ws和Wr的大小,使得双边滤波模版既能滤除掉图中的噪声点,又能较好地保存边缘信息。

三、bilateralFilter 函数

OpenCV还给出了简单的函数形式:

CV_EXPORTS_W void bilateralFilter( InputArray src, OutputArray dst, int d,
                                   double sigmaColor, double sigmaSpace,
                                   int borderType = BORDER_DEFAULT );

src : 原图, 8为整形或浮点型,单通道或者3通道;
dst : 与原图同样尺寸,但不能是原图;
d : 滤波核的直径;
sigmaColor : σ r \sigma_r σr
sigmaSpace : σ s \sigma_s σs
borderType : 用于设置图像边界元素的方式

双边滤波的效果(来自网络图片)
opencv-双边滤波

本文第一、二部分转载自 OpenCV双边滤波详解及实代码实现文章来源地址https://www.toymoban.com/news/detail-460278.html

到了这里,关于opencv-双边滤波的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • opencv-双边滤波

    双边滤波(Bilateral Filter)是非线性滤波中的一种。这是一种结合图像的空间邻近度与像素值相似度的处理办法。在滤波时,该滤波方法同时考虑空间临近信息与颜色相似信息,在滤除噪声、平滑图像的同时,又做到边缘保存。 双边滤波采用了两个高斯滤波的结合。一个负责

    2024年02月06日
    浏览(30)
  • OpenCV-24双边滤波

    双边滤波对于图像的边缘信息能够更好的保存。其原理为一个与 空间距离 相关的高斯函数与一个 灰度距离 相关的高斯函数相乘。 空间距离 :指的是当前点与中心点的欧式距离。空间域的高斯函数及其数学形式为: 其中(xi,yi)为当前点的位置,(xc,yc)为中心点位置,

    2024年01月17日
    浏览(33)
  • OpenCV——双边滤波

    OpenCV——双边滤波由CSDN点云侠原创。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫与GPT。    双边滤波是一种综合考虑滤波器内图像空域信息和滤波器内图像像素灰度值相似性的滤波算法,可以实现在保留区域信息的基础上实现对噪声的去除、对局

    2024年01月18日
    浏览(67)
  • 双边滤波原理和实现

             双边滤波(Bilateral filter)是一种非线性的滤波方法,是结合图像的空间邻近度和像素值相似度的一种折衷处理,同时考虑空域信息和灰度相似性,达到保边去噪的目的。 双边滤波器之所以能够做到在平滑去噪的同时还能够很好的保存边缘(Edge Preserve),是由于其

    2024年02月08日
    浏览(23)
  • Opencv之图像滤波:6.双边滤波(cv2.bilateralFilter)

            前面我们介绍的滤波方法都会对图像造成模糊,使得边缘信息变弱或者消失,因此需要一种能够对图像边缘信息进行保留的滤波算法,双边滤波是综合考虑空间信息和色彩信息的滤波方式,在滤波过程中能够有效地保护 图像内的边缘信息。         之前介绍的

    2024年02月05日
    浏览(48)
  • python --opencv图像处理滤波详解(均值滤波、2D 图像卷积、方框滤波、 高斯滤波、中值滤波、双边滤波)

    第一件事情还是先做名词解释,图像平滑到底是个啥? 从字面意思理解貌似图像平滑好像是在说图像滑动。 emmmmmmmmmmmmmmm。。。。 其实半毛钱关系也没有,图像平滑技术通常也被成为图像滤波技术(这个名字看到可能大家会有点感觉)。 每一幅图像都包含某种程度的噪声,

    2024年02月04日
    浏览(57)
  • opencv-34 图像平滑处理-双边滤波cv2.bilateralFilter()

    双边滤波(BilateralFiltering)是一种图像处理滤波技术,用于平滑图像并同时保留边缘信息。与其他传统的线性滤波方法不同,双边滤波在考虑像素之间的空间距离之外,还考虑了像素之间的灰度值相似性。这使得双边滤波能够有效地去除噪声,同时保持图像的细节和边缘。

    2024年02月14日
    浏览(39)
  • 【图像处理OpenCV(C++版)】——5.5 图像平滑之双边滤波

    前言 : 😊😊😊 欢迎来到本博客 😊😊😊 🌟🌟🌟 本专栏主要结合OpenCV和C++来实现一些基本的图像处理算法并详细解释各参数含义,适用于平时学习、工作快速查询等,随时更新。 😊😊😊 具体食用方式:可以点击本专栏【OpenCV快速查找(更新中)】–搜索你要查询的算子

    2024年02月13日
    浏览(45)
  • Opencv-C++笔记 (13) : opencv-图像卷积一(均值、中值、高斯、双边滤波)与 边缘处理

    头文件 quick_opencv.h:声明类与公共函数 主函数调用 src:输入图像 。 dst:输出图像 。 ksize:内核大小 ,一般用 Size(w,h),w 为宽度,h 为深度。 anchor:被平滑的点,表示取 内核中心 ,默认值 Point(-1,-1)。 boderType:推断图像外部像素的某种边界模式。默认值 BORDER_DEFAULT 目的:

    2024年02月16日
    浏览(125)
  • 【OpenCV-Python】:基于均值、中值、方框、双边和高斯滤波的图像去噪

    ✨博客主页:王乐予🎈 ✨年轻人要:Living for the moment(活在当下)!💪 🏆推荐专栏:【图像处理】【千锤百炼Python】【深度学习】【排序算法】 本节将对经过噪声污染的图像进行去噪,去噪方法包含 均值滤波、中值滤波、方框滤波、双边滤波和高斯滤波 。 实验所用的图

    2024年02月05日
    浏览(58)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包