前言:最近在做一个图像的作业, 要求python实现双边滤波和引导双边滤波。
可以使用opencv,numpy。不能用opecv增强库(ximageproc之类的就用不了啦),
这里记录一下学习心得。主要是直觉上地介绍各个滤波器,后面有空再更代码细节。

ps. 查资料过程中,最无法理解的一个概念是都说双边滤波的弊端:梯度反转 (gradient reveral ) 。但是找了很多文章和问答都没看到解释清楚的答案,最后还是无奈找到何凯文大神的会议PPT,似乎看懂了一点。后面会介绍。

图像滤波系列

  • 高斯滤波 Guassion Filter
    • 图像滤波器/卷积核
      • 互相关和卷积名词误用
    • 高斯函数
      • 缺点
  • 双边滤波 Bilateral Filter
    • 空间高斯分布和颜色高斯分布
  • 联合双边滤波 Joint Bilateral Filter
  • 引导滤波 Guidance Filter
    • 解决梯度反转问题

高斯滤波 Guassion Filter

高斯滤波,涉及两个概念:图像滤波 + 高斯函数。

图像滤波器/卷积核

参考链接:https://spatial-lang.org/conv
correlation vs convolution

滤波操作:
蓝色格子 - 原图,虚线格子 - padding, 绿色格子 - 结果图

互相关和卷积名词误用

互相关(cross-correlation) 和 卷积(convolution),这俩概念其实最早是用在信号处理的,处理一维信号。图像是二维的,也是一维信号的延伸。
图像滤波: “卷积核” 对图像执行“卷积”操作。从而得到想要的效果:平滑,锐化,去噪等等。
为什么给“卷积”打上引号呢,现在的图像滤波算法对卷积核的定义其实是“correlation(相关)” 而不是“convolution(卷积)” 。

  • Correlation :
    过滤器(kernel)在图像上移动并计算每个位置的乘积总和的过程。
  • Convolution:
    先将过滤器翻转180度,然后执行Correlation。

这两个操作区别只在于核是否先翻转自己。那么它们之间到底有什么不同(物理意义)。

先一句话总结:在单位像素下,互相关(correlation) 之后只能得到一个 kernel 翻转副本,而卷积(convolution) 能保留 kernel 的原始副本。

看下面两张图:
(a)和 w 互相关得到的是滤波器 w 的 180度翻转(e)

先翻转 w,之后correlation,最终得到了和 w 一样的值(h)。:

图源 correlation vs convolution

至于为什么大家混淆了这两者之间的概念,却也习以为常,我个人认为是因为“问题不大”,卷积核翻转对称的情况很多,比如下面

从左至右:中值滤波,边缘滤波,边缘滤波,图像锐化

图源: slides from CSCI5210 CS CUHK Chi-Wing FU,Philip

卷积在神经网络里面用的也非常多,但其实都是correlation。传统的图像处理需要人工选择滤波器,CNN则是全靠机器自己【找出】适合的卷积核,训练过程中只需要指定核的大小,所以先翻转再相关,等于是脱了裤子放屁。

高斯函数

高斯滤波: 卷积核换成高斯分布离散采样后的值

三维空间,看起来像一座山,高斯核的权重包含的是「空间信息」。意味着离中心点越远的像素点权重越低。

图源: slides from CSCI5210 CS CUHK Chi-Wing FU,Philip

缺点

高斯滤波能起到很好的平滑效果,但是有一个严重的缺点,它在滤波时会把图像的所有点,包括噪点(需要去除)、边缘(需要保留),一视同仁。它关心的只有「空间信息」。

图源: slides from CSCI5210 CS CUHK Chi-Wing FU,Philip

双边滤波 Bilateral Filter

为了解决高斯滤波导致滤波后图像边缘模糊的问题。
双边滤波诞生了。

双边滤波除了关心空间信息,还关心【像素差】,想象一下,如果图像存在边缘(edge),那么是否说明在边缘的两个方向,存在像素的【梯度变化】?
如下图:

卷积核不再是统一的【空间】高斯分布,而是在与中心点像素值接近的地方接近于【空间】高斯分布,在与中心点像素差较大的地方接近于【颜色】高斯分布。

空间高斯分布和颜色高斯分布

对比高斯滤波

双边滤波增加了一项【颜色高斯】和一项【权重】

联合双边滤波 Joint Bilateral Filter

联合双边滤波最早是为了解决「具有闪光和无闪光图像对的数码摄影」问题
论文:【Digital Photography with Flash and No-Flash Image Pairs】
提出问题:开了闪光灯的照片会失去细节(曝光过渡);不开闪光灯会有很多噪点:

图源论文
作者结合两张图片的优点,提出了联合双边滤波:

引导滤波 Guidance Filter

有空再更…

论文: https://arxiv.org/pdf/1801.06928.pdf
PPT:http://kaiminghe.com/eccv10/eccv10ppt.pdf

先放张何恺明大神的图

引导滤波的贡献:

  • 消除了梯度翻转
  • 让双边滤波处理速度变成了O(1)却不需要近似处理(图片不会失真)

解决梯度反转问题

图解
我一直不理解,到底为什么都说双边滤波有梯度翻转(gradient reversal)的问题?因为在我看来,滤波器再怎么滤,也不会让边缘的像素出现峰值。我的脑子想象不到…

后来才明白其实不是滤波后的图像出现梯度翻转。
而是在利用双边滤波进行图片【细节增强】(Detail Enhancement) 的时候发生的!

【原图】 -> 【双边滤波】 -> 【原图 - 双边滤波 = 细节】 -> 【原图 + 细节 * n】 = 【带有梯度反转的增强图】

这张图是当时论文会议的PPT, 非常形象,第一行红色曲线为滤波后;白色为原图。(想象成图片的横切面,高度为图像的亮度/像素值)

图像滤波【一】:从高斯滤波到引导滤波相关推荐

  1. 传统图像去噪方法(二)之引导滤波

    各向同性滤波 我们知道对于滤波器而言,在均值滤波中W时是1/n,n是w中所有像素个数.在高斯平滑中,W服从二维的高斯分布. 但是无论是均值滤波还是高斯滤波,他们都有一个共同的弱点,它们都属于各向同性滤 ...

  2. OPENCV 实现引导滤波

    https://blog.csdn.net/sinat_36264666/article/details/77990790 上面链接中的大佬实现了引导滤波,但是该代码如果用灰度图会报错,下面代码是大佬 ...

  3. opencv方框内图像保存_opencv 图像滤波(均值,方框,高斯,中值)

    为什么要使用滤波 消除图像中的噪声成分叫作图像的平滑化或滤波操作.信号或图像的能量大部分集中在幅度谱的低频和中频段是很常见的,而在较高频段,感兴趣的信息经常被噪声淹没.因此一个能降低高频成分幅度的滤波 ...

  4. 卷积滤波 英文_图像的卷积(滤波)运算(二)——高斯滤波

    1.高斯滤波原理 根据数学知识,一维高斯函数可以描述为: 在图像处理中,选定X方向上长度为3的窗口,令δ=1,中心坐标为1,由上述公式,其卷积核(Xa,X,Xb)可以如下计算: Xa = exp(-1 ...

  5. 图像的频率域高斯低通滤波

    (1)自定义一个图像的频率域高斯低通滤波处理函数,要求该函数的输入参数包括处理前的图像ima和距频率矩形中心的距离D0(截止频率),输出参数为滤波处理后的图像im2. 自定义的高斯低通滤波器: %ph ...

  6. 利用联合双边滤波或引导滤波进行升采样(Upsampling)技术提高一些耗时算法的速度。...

    这十年来,在图像处理领域提出了很多新的图像分析和处理方法,包括是自动的以及一些需要有人工参与的,典型的比如stereo depth computations.image colorization.to ...

  7. 引导滤波GuidedFilter

    何恺明读博士提出基于暗通道采用引导滤波去雾算法获CVPR2009最佳论文,现在应用面很广.很广:能够克服双边滤波的梯度翻转现象,在滤波后图像的细节上更优,主要美颜算法差不多都用这个. 先贴伪代码: 实 ...

  8. 基于FPGA的引导滤波并行加速实现

    前面一篇文章中,已经详细的分析了引导滤波的理论,公式的推导,以及和双边滤波的对比分析,即在边缘的处理上双边滤波会引起人为的黑/白边.我们已经知道何博士引导滤波的优秀之处,那么本篇文章,我带你推演,如何 ...

  9. 引导滤波算法理论及公式的推导

    高斯滤波考虑了像素间的距离关系,会模糊边缘: 双边滤波同时考虑了像素间的距离关系以及相似度关系,对于边缘有一定的保护(边缘同侧相速度高).引导滤波同样是保边滤波,由于直接判断梯度,细节的保护上比双边滤 ...

最新文章

  1. mysql合并到区间_合并区间
  2. InputStream 、 InputStreamReader 、 BufferedReader区别
  3. 读书笔记《单核工作法》_3原理2,3
  4. Knozen:新型职场社交评论匿名应用,已获多家风投投资
  5. mysql 21天_把整个Mysql拆分成21天,轻松掌握,搞定(中)
  6. 比较好的文章地址收集
  7. 13.2 处理静态资源【从零开始学Spring Boot】
  8. java maven 配置环境变量_maven 环境变量的配置详解
  9. wamp mysql使用方法_wamp使用方法【总】
  10. vvc代码阅读 encodeCtus()
  11. Mysql第二章习题
  12. ENSP中ACL,NAT配置
  13. 女友老爸开了中介公司让我抽空搞开发个租房App,像贝壳一样就行.....
  14. Springcloud入门第二篇
  15. 电脑文件如何传到云服务器上,电脑文件如何传到云服务器上
  16. ts没有与此调用匹配的重载
  17. Shader各种效果
  18. 四个小技巧轻松解决VR晕动症
  19. PSP愤怒的小鸟 游戏ISO文件和完美通关全三星存档和金手指
  20. WebLogic 12c 配置 https

热门文章

  1. python实验猜数游戏
  2. 分享一个Java超市积分管理系统项目的制作方法。
  3. 1.python实现二进制补码求原码
  4. c语言工程实践小超市商品管理系统
  5. Visual Studio 2017 + VisualGDB 调试Linux C++程序
  6. 机器学习算法——贝叶斯分类器3(朴素贝叶斯分类器)
  7. 教程2,工厂方法实现发奖,抽象工厂实现redis集群,JDK动态代理应用
  8. DAO 、CUID、CRUD 是什么?
  9. 子墨对酒《三国杀》里论模式(伍)模板方法
  10. WPF开发之Prism详解【内附源码】