从2017年10月起,我向导师申请转换研究到图像处理方向,于是导师给了我研究课题——图像去雾,到这学期开始2018年3月,研一第一个学期的学习并没有什么进展,期间产生的种种突发奇想的研究想法还没来得及一一验证,上周末,本学期的第一次例会,导师再听完我的假期工作汇报(同样没有任何进展)之后,提出让我放弃去雾课题,重新选择一个任意感兴趣的方向进行研究。
说实话,内心真的很不好受,感觉一学期荒废无所成果,甚至自信心也受到了影响。虽然老师表示如果我愿意坚持,可以继续研究去雾课题,但是综合我的兴趣(本身是希望从事计算机视觉方向的研究的)和去雾课题的粗陋见解(下文会提到),我决定放弃去雾的研究,转向其他方向。
先总结一下半学期研究失败的原因:1)研一第一学期学习状态并不好,没有投入太多的时间到学术研究中,真正精读的论文几乎没有,除去各学科的课堂论文要求,去雾方向的论文并没有太多阅读;2)实验工具不熟悉,没办法做实验。
综上,若想要在去雾方向有论文成果,建议研读20篇以上的论文,经典方法需要复现。其次,掌握c++或matlab工具,会使用opencv做实验。这样也许会有所成果。很可惜,我并没有做到,虽然没有得到成果,但在放弃前我还是想对之前的工作做个总结,我会以一个初生牛犊不怕虎的视角做总结,荒谬之处轻喷。
2009年的CVPR最佳论文《single image haze removal using dark channel prior》(何凯明)是近年去雾的最大进展,也是导师让我读的第一篇文章,反复研究过多次,每次都有不同的认识。
雾图退化模型: I(x)=J(x)t(x)+A(1−t(x)) I ( x ) = J ( x ) t ( x ) + A ( 1 − t ( x ) ) ,需要从输入的有雾图像I求出无雾原图J以及全局大气光A以及透射率t。从方程的角度显然是不可解的(1个方程,3个未知量)。
何凯明的解法:通过统计得到另一个约束方程(暗通道方程),然后设A已知(后续介绍了A值得取法),这样问题转变为两个方程,两个未知量,所以问题可解。
DCP:暗通道是何凯明通过大量实验及遥感图像分析灵感得到的统计先验结论,表述为户外无雾图像的绝大多数图块(local patch)都包含一些暗像素(即亮度很低,近乎于0),即无雾的户外图像极大的概率在图像的每一个图块上存在这样一个像素,它的某一个通道值近似于0.该结论对于天空区域和本身就是(趋于)纯白的区域无效。这一现象数学表示为:
这就得出了一个关于J的约束方程,带入到雾图退化模型中,再假设A已知,就可以求解了。
最初的认识:
何凯明的去雾算法基于两个前提。
- 暗通道定理:
miny∈Ω(x)(minc∈{r,g,b}Jc(y))→0 min y ∈ Ω ( x ) ( min c ∈ { r , g , b } J c ( y ) ) → 0- 雾图像的模型:
I(x)=J(x)t(x)+A(1−t(x)) I ( x ) = J ( x ) t ( x ) + A ( 1 − t ( x ) )针对模型和定理,有以下思考:
- 方程去掉已知的输入图像I,还剩下三个变量J、t、A,显然是无穷解的。何凯明的办法是设一个为已知常量(A为已知常量,可物理解释,场景拍照瞬间稳定的环境影响),又通过暗通道定理增加一个约束方程,这样方程就可解了,能得到I到J之间的映射。
- 增加的这个约束H(J)=0可靠吗,有更好的方法吗?有其他约束吗?这里可以参考暗通道约束方法的提出,它是大量实验的统计结果,那么针对统计方法,数据挖掘提供了更为科学的统计方法,可以通过数据挖掘提炼一个分类模型,如果该模型与暗通道模型对比有更好的性能,那么就会得出一个更好的约束方程。
- 针对2提出的想法,去雾就变成了两个步骤,。a)计算机视觉对烟雾的识别或数据挖掘对有烟无烟的分类问题,这个解题过程可以得到一个函数。(事实上暗通道就是一种有烟无烟的分类函数,它的得出是观测统计结果,而分类模型通常不止一种,所以肯定还有其他的模型,只需找出一种最优的,有多优?优于暗通道分类效果即可)。b)拿着雾图模型和a中得出的约束函数解出一个I到J的映射,然后通过图像恢复的方法去雾。
- 雾图模型能否提高精度,该模型在I到J的映射上引入了两个变量A和t,实际的情况两个变量就能完美对雾图建模吗?能否增加变量提出更准确的模型?(类似增加约束之后的静定超静定问题)若能,考虑增加约束方程用于求解,用分类方法找到两个不相关的模型作为两个约束方程,用来求解方程。这方面需要研究雾图模型提出的相关论文,学习数学建模理论。
以上摘自我最初粗读论文后的一些想法,主要是方法的角度的一些粗浅的想法,没有涉及He的论文的细节。现在回头看这些想法存在很多想当然的地方。
上述宏观的研究心得之后,说一说暗通道的一些细节。
暗通道是一个客观存在的现象,不要拘泥于He在暗通道去雾一文中后续的做法(A、t),现在假设你已知雾图退化模型,然后告诉你暗通道这么一个现象,你会怎么用这个新的现象?
暗通道的缺陷1:首先理解暗通道的“暗”的原因,这个暗的原因也解释了为什么天空区域会失效,论文中大理石部分会失效。在这里有衍生出一个研究点,失效部分怎么办?——很多关于大面积天空的去雾方法,比如天空分割。感觉这里还存在可挖掘的点,毕竟大面积天空的图像上天空部分实际上是没法解出来的。
暗通道的缺陷2:去雾后图像偏暗,这里可以采用图像增强的方法对去雾后的图像做后续处理,以增强效果,这只能做辅助工作,不能作为主要的研究创新点。
暗通道的缺陷3:初始的暗通道方法求出的传输图t是粗糙的,造成恢复后的图像边缘会存在光晕。首先明白光晕出现的原因,是t在物体边界时方块模糊的。这里存在一个矛盾:求暗通道的过程本身就是在窗口内最小值滤波,结果肯定会出现边界模糊的暗通道图,而传输图是根据暗通道图求出来,这导致传输图t也是边界模糊的,但是在恢复的时候又要求传输图物体边界必须清晰,因为物体边界的传输率t一定是不同深度,所以绝对是不相同的。我认为这对矛盾是暗通道去雾最大的研究点。即如何能同时求出暗通道同时保证边缘信息不丢失(双边滤波?)。然而这个问题被何凯明完美解决了,首先最初提出了softmatting方法(这是一种抠图方法,能得到雾图精细的边缘,这个方法我还没有深入研究),但它的效率很低,之后何凯明又提出了复杂度更低的导向滤波,那么这个矛盾就被完美解决了。我觉得,暗通道去雾到这里最主要的工作就已经到头了,剩下的A的取值方法,后续的过暗的恢复图的图像增强,都是小打小闹了。(这也是我放弃这个课题的一个主要原因,小打小闹的改进不想再去花时间研究了,又没有水平提出新的更好的解决主要矛盾的方法——新的更有效更简单的边缘保持同时求暗通道的算子,更别说新的prior模型。)
有趣的实验:我发现暗通道图和灰度图很像。如果暗通道的窗口取0,也就是直接用灰度图作为暗通道图会怎样呢?这样边缘不精细问题就天然解决了——结果是去雾后的图像果然没有光晕了,但是却变模糊了。这也是可以解释的,同一个物体,不同的像素上极大可能灰度不同,用它做暗通道图,求出的T图在同一个物体的局部透射率t不同,会造成恢复的时候局部模糊。
一个可能的逆向思维:考虑一种有效的雾图合成算法,根据该算法,逆向进行自然图的去雾。这样就能得到一个很好的雾图模型。(这个想法极有可能行不通,未仔细考虑)。
高级图像去雾算法的快速实现。 - - CSDN博客
为什么空气中的分子不会阻碍人的视线? - 知乎
暗通道去雾算法 python实现 - jacke121的专栏 - CSDN博客
基于单幅图像的快速去雾算法实现 - Ven_J的博客 - CSDN博客
图像去雾技术综述 - Ven_J的博客 - CSDN博客
Dehazing using color-lines: Results and Comparisons
整理的比较好的图像去雾算法 - CSDN博客
已有去雾算法详细对比
近年来,学习图像去雾不得不看的论文和源代码 - CSDN博客
基于Retinex的图像去雾算法(MATLAB实现) - 白马负金羁 - CSDN博客
用于图像去雾的优化对比度增强算法 - 白马负金羁 - CSDN博客
雾霾太重?深度神经网络教你如何图像去雾 - CSDN博客
一种可实时处理 O(1)复杂度图像去雾算法的实现。 - Imageshop - 博客园
基于中值滤波或双边滤波方式的图像去雾效果的研讨。 - Imageshop - 博客园
一年去雾算法研究的总结。 - Imageshop - 博客园
水下图像增强相关算法的一个简单小结。 - Imageshop - 博客园
避免图像去雾算法中让天空部分出现过增强的一种简易方法。 - Imageshop - 博客园
paper 100:何恺明经典去雾算法 - 南君 - 博客园
优化的对比度增强算法用于有雾图像的清晰化处理(算法效果是我目前看到最为稳定的,且对天空具有天然的免疫力,极力推荐有需要的朋友研究)。 - Imageshop - 博客园
暗通道优先的图像去雾算法(下) - 白马负金羁 - CSDN博客
Non-Local Image Dehazing 复现 - nano_zombie.uestc - 博客园
《Single Image Haze Removal Using Dark Channel Prior》一文中图像去雾算法的原理、实现、效果(速度可实时) - Imageshop - 博客园
暗通道优先的图像去雾算法(上) - 白马负金羁 - CSDN博客