博客
关于我
双边滤波(bilateralfiter)原理及C++实现
阅读量:798 次
发布时间:2023-04-15

本文共 1544 字,大约阅读时间需要 5 分钟。

双边滤波是一种非线性图像滤波技术,通过结合图像的空间邻近度和灰度相似性,能够有效去噪同时保边,具有广泛的应用场景。以下将从原理、实现和效果对比等方面详细阐述这一技术。

双边滤波原理

双边滤波的核心在于其滤波核的设计。滤波核由两个函数共同决定:空间距离函数和灰度距离函数。

  • 空间距离函数:衡量邻域内点与中心点的欧氏距离,数学表达式为:[G_{space}(x, y) = \exp\left(-\frac{(x - x_c)^2 + (y - y_c)^2}{2\sigma_{space}^2}\right)]其中,((x_c, y_c))为中心点坐标,(\sigma_{space})为空间标准差。

  • 灰度距离函数:衡量邻域内点灰度值与中心点灰度值的绝对差,数学表达式为:[G_{color}(g) = \exp\left(-\frac{g^2}{2\sigma_{color}^2}\right)]其中,(g)为灰度差值,(\sigma_{color})为灰度标准差。

  • 最终滤波核为空间距离函数与灰度距离函数的乘积:[K(x, y, g) = G_{space}(x, y) \times G_{color}(g)]

    通过卷积操作,利用上述核对图像进行处理。空间距离函数确保邻域内点权重递减,灰度距离函数进一步根据灰度相似性调整权重,最终实现去噪保边的效果。

    σ参数的意义及选取

  • 空间域σ(space)

    • 越大,图像平滑度越高,趋近于无穷大时效果接近均值滤波。
    • 越小,滤波效果越轻微,趋近于零时输出接近原图。
  • 值域σ(color)

    • 越大,边缘模糊度越高,灰度差异越大时权重趋近于相等。
    • 越小,边缘清晰度越高,灰度差异越小时权重趋近于零。
  • OpenCV实现

    在OpenCV中,双边滤波函数为:[\text{cv::bilateralFilter}(InputArray src,OutputArray dst,int d,double sigmaColor,double sigmaSpace,int borderType=BORDER_DEFAULT)]其工作原理包括以下步骤:

  • 获取空间域高斯核模板:通过计算邻域内每个点的空间权重。
  • 获取值域高斯核模板:通过计算灰度差异的值域权重。
  • 融合权重:将空间权重与值域权重相乘,得到最终滤波核。
  • 卷积处理:将滤波核与源图像进行卷积,生成去噪保边的输出图像。
  • 实现优化

    为了提高效率,可采用查表方式生成值域高斯核模板。具体实现如下:

    void getColorMask(std::vector
    &colorMask, double colorSigma) { for (int i = 0; i < 256; ++i) { double colordiff = exp(-(i * i) / (2 * colorSigma * colorSigma)); colorMask.push_back(colordiff); }}

    双边滤波效果对比

    通过实际实验对比高斯滤波和双边滤波的效果,参数设置为:

    • Filter size: 23x23
    • Space_sigma: 10
    • Color_sigma: 35

    对比结果表明:

    • 灰度图:双边滤波与高斯滤波效果相似,因灰度差异最大为255,值域核计算结果一致。
    • 彩色图:双边滤波效果更优,能够更好地去噪同时保边,脸部黑点等问题得到有效消除。

    应用场景

    双边滤波广泛应用于:

    • 图像增强
    • 图像去雾
    • 图像去噪
    • 图像恢复
    • 美颜处理等

    参考文献

  • OpenCV官方文档:双边滤波
  • 《图像处理实战》:图像滤波技术详解
  • 《深度学习图像处理》:双边滤波应用案例
  • 转载地址:http://iwgfk.baihongyu.com/

    你可能感兴趣的文章
    MySQL、HBase 和 Elasticsearch:特点与区别详解
    查看>>
    MySQL、Redis高频面试题汇总
    查看>>
    MYSQL、SQL Server、Oracle数据库排序空值null问题及其解决办法
    查看>>
    mysql一个字段为空时使用另一个字段排序
    查看>>
    MySQL一个表A中多个字段关联了表B的ID,如何关联查询?
    查看>>
    MYSQL一直显示正在启动
    查看>>
    MySQL一站到底!华为首发MySQL进阶宝典,基础+优化+源码+架构+实战五飞
    查看>>
    MySQL万字总结!超详细!
    查看>>
    Mysql下载以及安装(新手入门,超详细)
    查看>>
    MySQL不会性能调优?看看这份清华架构师编写的MySQL性能优化手册吧
    查看>>
    MySQL不同字符集及排序规则详解:业务场景下的最佳选
    查看>>
    Mysql不同官方版本对比
    查看>>
    MySQL与Informix数据库中的同义表创建:深入解析与比较
    查看>>
    mysql与mem_细说 MySQL 之 MEM_ROOT
    查看>>
    MySQL与Oracle的数据迁移注意事项,另附转换工具链接
    查看>>
    mysql丢失更新问题
    查看>>
    MySQL两千万数据优化&迁移
    查看>>
    MySql中 delimiter 详解
    查看>>
    MYSQL中 find_in_set() 函数用法详解
    查看>>
    MySQL中auto_increment有什么作用?(IT枫斗者)
    查看>>