关于《半反去雾算法》一文的四宗罪。

  最近在看一篇关于去雾的算法的文章:A Fast Semi-Inverse Approach to Detect and Remove the Haze from a Single Image,即我们中文常说的半反去雾算法,国内很多人引用这篇论文的主要的原因是论文提到了两点:第一,从论文中贴出的图片中看效果似乎去雾效果很不错;第二,论文号称可以实时。通过我自己的阅读和分析,我认为这篇论文水分很大,其效果和速度都值得怀疑,下面是我的一些分析,为方便,我们先简单的说下其半反的概念。

  对于一副RGB图像,其半反图像可以通过以下公式获得:

  for each Pixel in Image

    do:      

      NewRed = Max ( Red , 255 - Red ) ;

      NewGreen = Max (Green , 255 - Green );

      NewBlue = Max (Blue , 255 - Blue);

  这样进行操作后,图像的像素值肯定都大于127了,因此有必要重新拉升一下,论文中叫做renormalization操作,这个操作具体人如何论文没提,我们可以认为是自动对比度之类的算法。

  对于不会编程的朋友,要想获得这个半反图像,也可以借助PS实现,第一步:调用PS 滤镜-- 风格化-- 曝光过度菜单;第二部: 点调整--反色;第三步:调整--自动对比度。

  那么接着指出论文的几大问题:

   第一宗罪: 论文的原理首先不太占的住脚。

  论文首先也是提出了一种先验,即时通过对 daily light conditions 条件下对多副图像进行统计,获知在有雾图像中,有雾区域的半反图像和原始图像基本没什么变化。这个的主要原因作者说是有雾的区域或者天空其RGB分量各元素的值都比较亮,而无雾的地方符合暗通道原理,即总有一个分量的值比较小。

      首先,假如说上述条件成立,那么这篇论文的算法也就只适合于在光照条件比较亮的气候下拍摄的图片的去雾了,这就大大限制其应用范围,而论文没有在任何地方对这一点进行强调,有掩盖的嫌疑。

      其次,这个先验是否合理呢,因为是先验,我们当然不要求其100%都正确,有个80%就差不多了,可我对去雾相关论文里的一些常用图片进行测试,很多都无法获得理想的结果。

                原图

                         半反图

                原图

                         半反图

                原图

                         半反图

     第一、第二图结果还算行,我们看第三副图,应该说也是在 daily light conditions 条件下拍摄的吧,看其半反图,按照作者的说法应该基本就是没有雾的区域了,那么后面的所谓的去雾算法就无法进行下去了,而这种结果对于我这里很多有雾图都是存在的。

 第二宗罪:大气光A的计算

   在求大气光的过程中,作者有这句话:In order to mask the most haze-opaque areas, we perform the same procedure,but with the intensity of the semi-inverse increased by a factor ξ (with a default value of ξ =0.3)。为什么这里要把intensity 的值增加一点,然后何为intensity(要知道这个有N多种定义方法),我实在搞不明白增加这个有何目的。然后真正在求半反图中未被mask的部分搜索最大的intensity值时,也存在诸多疑问,因为最大的intensity值有可能不出现在一处,此时你取和原始图对应的那个地方的intensity 作为最终的A呢,每个地方的可能不同啊,论文未明确指出。

     第三宗罪:计算无雾图像时的过程很不清晰

  在计算无雾图像时,其主要公式为6和7,对于公式6,我们看到论文中对Ci的取值分别为0.2,0.4,0.6,0.8,1,我认为,这个取值明显不合理,当Ci取值较大时,Ci*A的值也就越大,此时公式获得层图像整体就越来越偏暗,如果求得的大气光A接近白色,那么对层图像进行所谓的半反求取有雾区域就变得毫无意义了。而且对论文的图5中的几个结果,根据我自己的编程结果表明,只可能是在Ci=0,0.1,0.2,0.3附近获得的,这说明作者是对这些系数做有意的隐瞒。

    对于公式7,论文根本没讲清楚公式中系数的计算方式,并且这种累加对于重叠的有雾区域很容易理解,而那些在每层都判断为无雾的区域进行叠加的后的效果应该是没有任何变化啊,为什么在论文的图5中,这部分的颜色明显有变化呢。

  第四宗罪:计算用时绝对作假

  原文对计算用时这样描述的:Our method implemented on CPU (Intel 2 Duo 2.00GHz) processes an 600×800 image in approximately 0.013 seconds being suitable for real-time outdoor applications。 这话绝对造假,我们不说别的,就其中的两个过程就使得整个算法不会有这么快,第一:计算半反图和原图的h的差异的时候,论文中说是在CIE LCH空间的H值进行计算的,诸位可以去看看LCH空间中H分量的计算过程,有很多计算,其中不凡有除或者浮点运算,而这种比较在论文中所描述的算法过程中至少需要6次(一次用于计算大气光A,5次用于计算各层的数据)。第二:算法有5次600*800大小彩色图像的合成过程,而且过程涉及浮点运算(用定点运算优化也会有除法部分的),不谈实际中还含有其他的计算,就这两个过程在这个样档次的CPU上对600*800的图像绝对不是13ms能完成的,这个CPU是双核的,开双线程能达到这个速度,我不相信。

      因此,从各方面考虑,我认为这篇论文存在着严重的漏洞和不足,不应该在图像去雾领域推广。

     作者知识有限,肯定有分析不正确的地方,望各位博友谅解。

*********************************作者: laviewpbt   时间: 2013.12.15   联系QQ:  33184777  转载请保留本行信息*************************

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏AI研习社

简简单单,用 LSTM 创造一个写诗机器人

AI 研习社:人们已经给神经网络找到了越来越多的事情做,比如画画和写诗,微软的小冰都已经出版了一本诗集了。而其实训练一个能写诗的神经网络并不难,Automatt...

27413
来自专栏数据科学与人工智能

【机器学习】分类算法评价

一、引言 分类算法有很多,不同分类算法又用很多不同的变种。不同的分类算法有不同的特定,在不同的数据集上表现的效果也不同,我们需要根据特定的任务进行算法的选择,如...

2245
来自专栏CDA数据分析师

机器学习基础与实践(一)——数据清洗

想写这个系列很久了,最近刚好项目结束了闲下来有点时间,于是决定把之前学过的东西做个总结。之前看过一些机器学习方面的书,每本书都各有侧重点,机器学习实战和集体智慧...

1987
来自专栏深度学习自然语言处理

深度学习如何入门?

关于深度学习,网上的资料很多,不过貌似大部分都不太适合初学者。 这里有几个原因: 深度学习确实需要一定的数学基础。如果不用深入浅出地方法讲,有些读者就会有畏难...

3178
来自专栏AI科技评论

简简单单,用 LSTM 创造一个写诗机器人

AI 科技评论按:人们已经给神经网络找到了越来越多的事情做,比如画画和写诗,微软的小冰都已经出版了一本诗集了。而其实训练一个能写诗的神经网络并不难,Automa...

2817
来自专栏新智元

谷歌大脑研究员玩转汉字RNN:神经网络生成新华字典

【新智元导读】你永远不知道汉字的潜力。谷歌大脑东京分部的研究员hardmaru,用神经网络根据笔画生成汉字,新造了一系列“假汉字”。你别说,有些看上去还真像那么...

700
来自专栏一名叫大蕉的程序员

机器学习虾扯淡之线性回归No.39

今天晚上,整理了一下线性回归的完整的数学推导过程以及应用。 0x00甩定义 首先什么是线性回归? 就是面包屑嘛,我们跟着一个一个面包屑走,然后duang~~在...

1687
来自专栏AI研习社

深度学习如何入门?

关于深度学习,网上的资料很多,不过貌似大部分都不太适合初学者。 这里有几个原因: 1. 深度学习确实需要一定的数学基础。如果不用深入浅出地方法讲,有些读者就会有...

3026
来自专栏DT数据侠

前方高能!哈利·波特的咒语已破译(机器学习控必点)

《哈利波特与魔法石》推出的时候,谁也不曾料到,那个最初连一句“Leviosa”羽毛漂浮咒语都念不好的绿眼睛男孩,竟会陪伴我们这群麻瓜整整20年。

580
来自专栏小红豆的数据分析

小蛇学python(13)当我们拿到数据,该做些什么

当我们拿到数据集的时候,我们应该做些什么呢?在数据的汪洋大海中,你是否体会到了同在北上广奋斗的人们一样的在午夜的孤寂感?在充实着林林总总的数据表格中,你试图从中...

715

扫码关注云+社区