一、双边滤波算法(Bilateral Filter)

1、原理

高斯滤波是以距离为权重,设计滤波模板作为滤波系数,只考虑了像素间的空间位置上的关系,因此滤波的结果会丢失边缘的信息。
高斯滤波的缺陷如下图所示:平坦区域正常滤波,图像细节没有变化,而在突变的边缘上,因为只使用了距离来确定滤波权重,导致边缘被模糊。

在高斯基础上,进一步优化,叠加了像素值的考虑,因此也就引出了双边滤波,一种非线性滤波,滤波效果对保留边缘更有效。

空间距离:当前点距离滤波模板中心点的欧式距离。
灰度距离:当前点距离滤波模板中心点的灰度的差值的绝对值。
双边滤波的核函数是空间域核与像素范围域核的综合结果:
1)在图像的平坦区域,像素值变化很小,那么像素差值接近于0,对应的像素范围域权重接近于1,此时空间域权重起主要作用,相当于进行高斯模糊;
2)在图像的边缘区域,像素值变化很大,那么像素差值大,对应的像素范围域权重变大,即使距离远空间域权重小,加上像素域权重总的系数也较大,从而保护了边缘的信息。
双边滤波的效果如下图,在突变的边缘上,使用了像素差权重,所以很好的保留了边缘。

2、opence-python 实现

import cv2
import numpy as npimage = cv2.imread('./image/cat.jpeg')
image_blur = cv2.blur(image, (3, 3))
image_bilater = np.hstack([  # 结果图像的水平拼接image_blur,cv2.bilateralFilter(image_blur, 5, 21, 21),cv2.bilateralFilter(image_blur, 7, 31, 31),cv2.bilateralFilter(image_blur, 9, 41, 41)
])
cv2.imshow('image_bilater', image_bilater)
cv2.waitKey(0)

二、导向滤波算法(Guided Filter)

1、原理

引导滤波的思想用一张引导图像产生权重,从而对输入图像进行处理,这个过程可以表示为下面公式:

公式中 q、I、p分表表示输出图像、引导图像和输入图像 ,i、j分别表示图像中像素点的索引。可以看到上方公式中权重 W 仅与引导图像 I 有关,而在双边滤波中权重 W 由输入图像自身决定。

2、python实现

"""uv通道滤波,取出颜色噪声
"""
import cv2
import numpy as npimage_path = './image/wait_uv_filter.png'
image = cv2.imread(image_path)
cv2.namedWindow('image', 0)
cv2.resizeWindow('image', 600, 500)
cv2.imshow('image', image)
cv2.waitKey(0)def my_guidedFilter_oneChannel(srcImg, guidedImg, rad=9, eps=0.01):srcImg = srcImg / 255.0guidedImg = guidedImg / 255.0P_mean = cv2.boxFilter(srcImg, -1, (rad, rad), normalize=True)I_mean = cv2.boxFilter(guidedImg, -1, (rad, rad), normalize=True)I_square_mean = cv2.boxFilter(np.multiply(guidedImg, guidedImg), -1, (rad, rad), normalize=True)I_mul_P_mean = cv2.boxFilter(np.multiply(srcImg, guidedImg), -1, (rad, rad), normalize=True)var_I = I_square_mean - np.multiply(I_mean, I_mean)cov_I_P = I_mul_P_mean - np.multiply(I_mean, P_mean)a = cov_I_P / (var_I + eps)b = P_mean - np.multiply(a, I_mean)a_mean = cv2.boxFilter(a, -1, (rad, rad), normalize=True)b_mean = cv2.boxFilter(b, -1, (rad, rad), normalize=True)dstImg = np.multiply(a_mean, guidedImg) + b_meanreturn dstImg * 255.0def my_guidedFilter_threeChannel(srcImg, guidedImg, rad=9, eps=0.01):img_shape = np.shape(srcImg)dstImg = np.zeros(img_shape, dtype=float)for ind in range(0, img_shape[2]):dstImg[:, :, ind] = my_guidedFilter_oneChannel(srcImg[:, :, ind],guidedImg[:, :, ind], rad, eps)dstImg = dstImg.astype(np.uint8)return dstImgdef main():img = cv2.imread(input_fn)print(np.shape(img))img_y = cv2.split(img)[0]img_u = cv2.split(img)[1]img_v = cv2.split(img)[2]image_guidedFilter = my_guidedFilter_threeChannel(img, img, 15, 0.0001)print(np.shape(image_guidedFilter))cv2.namedWindow('image_guidedFilter', 0)cv2.resizeWindow('image_guidedFilter', 600, 500)cv2.imshow('image_guidedFilter', image_guidedFilter)cv2.waitKey(0)dst_u = my_guidedFilter_oneChannel(img_u, img_u, 9, 0.0001).astype(np.uint8)dst_v = my_guidedFilter_oneChannel(img_v, img_v, 9, 0.0001).astype(np.uint8)dstimg_uv = cv2.merge([img_y, dst_u, dst_v])cv2.namedWindow('dstimg_uv', 0)cv2.resizeWindow('dstimg_uv', 600, 500)cv2.imshow('dstimg_uv', dstimg_uv)cv2.waitKey(0)if __name__ == '__main__':main()

【图像处理】双边滤波算法(bilateral filter)和导向滤波算法(guided filter)相关推荐

  1. 三种经典图像滤波方法介绍——双边滤波(Bilateral filter)、导向滤波(Guided Fliter)、滚动导向滤波(RollingGuidedFilter)

    文章目录 一.前言 二.双边滤波(Bilateral filter) 2.1 双边滤波的理论介绍及公式推导 2.2 双边滤波的matlab程序实现 三.导向滤波(Guided Fliter) 3.1 ...

  2. a*算法matlab代码_导向滤波算法及其matlab代码实现

    导向滤波同样是一种平滑滤波算法,其与最小二乘滤波和双边滤波相比,同样是一种具有边缘保持的功能的图形滤波算法,可以用于处理图形噪点较多的图像,而且此种滤波算法与最小二乘滤波和双边滤波相比,有其独特的特点 ...

  3. 【OpenCV 例程200篇】61. 导向滤波(Guided filter)

    [OpenCV 例程200篇]61. 导向滤波(Guided filter) 欢迎关注 『OpenCV 例程200篇』 系列,持续更新中 欢迎关注 『Python小白的OpenCV学习课』 系列,持续 ...

  4. 详解——导向滤波(Guided Filter)和快速导向滤波

    文章目录 导读 原理推导 导向滤波的应用 导向滤波的实现 快速导向滤波的实现 算法效果 代码 参考 导读 在图像滤波算法中,导向滤波.双边滤波.最小二乘滤波并称三大保边滤波器,他们是各向异性滤波器.相 ...

  5. burg算法的matlab代码实现_导向滤波算法及其matlab代码实现

    导向滤波同样是一种平滑滤波算法,其与最小二乘滤波和双边滤波相比,同样是一种具有边缘保持的功能的图形滤波算法,可以用于处理图形噪点较多的图像,而且此种滤波算法与最小二乘滤波和双边滤波相比,有其独特的特点 ...

  6. 导向滤波算法 java_一种基于双通道先验和侧窗导向滤波的单幅图像去雾方法与流程...

    本发明属于计算机图像处理的领域,用于图像或者视频去雾等相关领域:具体涉及一种基于双通道先验和侧窗导向滤波的单幅图像去雾方法. 背景技术: 图像采集过程中,由于雾天的影响,使得景物的能见度大幅降低,再加 ...

  7. opencv 实现导向滤波

    from:http://blog.csdn.net/wds555/article/details/23176313 何凯明去雾算法中的导向滤波实现,原文地址导向滤波. 导向图像I,滤波输入图像p以及输 ...

  8. 双边滤波(Bilateral filter)

    双边滤波器(Bilateral filter)是一种可以保边去噪的滤波器.可以滤除图像数据中的噪声,且还会保留住图像的边缘.纹理等(因噪声是高频信号,边缘.纹理也是高频信息,高斯滤波会在滤除噪声的同时 ...

  9. 双边滤波(Bilateral Filter)详解

    双边滤波(Bilateral Filter)详解 转自:睁开眼就变帅 原理分析: 双边滤波与高斯滤波器相比,对于图像的边缘信息能过更好的保存.其原理为一个与空间距离相关的高斯函数与一个灰度距离相关的高 ...

  10. 导向滤波算法——OpenGL实现

    导向滤波 一.介绍 导向滤波又称引导滤波,通过一张引导图片反映边缘.物体等信息,对输入图像进行滤波处理,使输出图像的内容由输入图像决定,但纹理与引导图片相似. 导向滤波的原理是局部线性模型,在保持双边 ...

最新文章

  1. svn汉化包安装无效的解决办法
  2. 【C 语言】文件操作 ( 文件加密解密 | 使用第三方 DES 加密解密库 | 头文件导入 | 兼容 C++ 语言 | 加密解密函数说明 )
  3. springboot项目中一个实体类引用其它实体类的字段并显示到页面上
  4. 关于文件操作的\r\n问题。
  5. windows 服务实例
  6. sql string转number_少用 string.Format
  7. 【IntellJ IDEA】idea的Terminal窗口中文乱码 解决方法
  8. python计算组合数_python排列组合算法
  9. ASP.NET理论知识及面试题
  10. Mysql Fabric实现学习笔记
  11. Greensock平台
  12. 计算机sense服务无法启动,workstation服务无法启动解决办法
  13. 【Word】论文公式居中,编号右对齐
  14. 炸了~Redis bigkey导致生产事故-bigkey问题全面分析
  15. WebStorm+Chrome插件JetBrains IDE Support进行实时调试
  16. import torch -- AttributeError: module ‘typing‘ has no attribute ‘_SpecialForm‘
  17. UV材质图片合并后UV坐标的变换
  18. hive计算指定日期所在周的第一天和最后一天
  19. 什么都可以丢,唯独不能丢了你
  20. VIJOS-P1153 猫狗大战 dp 贪心

热门文章

  1. NESTEROV ACCELERATED GRADIENT AND SCALE INVARIANCE FOR ADVERSARIAL ATTACKS论文解读
  2. C语言typedef
  3. 构建贝叶斯深度学习分类器
  4. Leader-Follower线程模型
  5. 撩课-Web大前端每天5道面试题-Day4
  6. nginx编译和调试
  7. shell函数显式的返回值
  8. GRUB 和 GRUB2 的区别
  9. 希望这篇文章对理解C#的对象模型有所帮助
  10. 应用多元统计分析第四章基于最小二乘估计线性回归分析python代码