文档章节

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

abcijkxyz
 abcijkxyz
发布于 2016/11/22 16:40
字数 1628
阅读 8
收藏 0

  最近在看一篇关于去雾的算法的文章: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  转载请保留本行信息*************************

 

本文转载自:http://www.cnblogs.com/Imageshop/p/3475223.html

共有 人打赏支持
abcijkxyz
粉丝 60
博文 6196
码字总数 1876
作品 0
深圳
项目经理
软件开发七宗罪

一起来看看世界各地的程序员们所共有的致命通病,从软件开发的地狱中拯救自己。这七宗罪你有几条? 想成为一名优秀的软件开发人员需要很长时间的培训和实践。但是如果不遵循合适的原则,即便...

二胡
2011/03/02
1K
5
自由软件与开源软件的介绍

2016-03-17 老王 极客方式 一。好汉一问:什么是开源软件?什么是自由软件?他们就是免费软件? 很多人经常把开源软件和自由软件混为一谈,也常常会有人把开源软件和免费软件这两个概念混淆在...

大飞侠大虾
2017/11/03
0
0
开源软件,自由软件,免费软件三者的区别

一。好汉一问:什么是开源软件?什么是自由软件?他们就是免费软件? 很多人经常把开源软件和自由软件混为一谈,也常常会有人把开源软件和免费软件这两个概念混淆在一起,其实当我第一此站在...

微wx笑
2014/07/12
0
0
致饱醉豚:子虚乌有的程序员六宗罪,这锅,我们不背!

现在的人呐,一旦有了点小名气,就喜欢乱说话,特别是乱说一些以偏概全、哗众取宠、博取眼球的瞎话。要知道,在互联网如此发达的今天,那传播速度,那影响范围,不可小觑。 而有些人偏要这么...

亦枫
2017/12/13
0
0
袁萌:国产Linux违反《计算机软件保护条例》

有人对Linux打假很不理解,认为国产Linux没有什么假要打。这种认识是完全错误的。 大家知道,《中华人民共和国计算机软件保护条例》(本文简称《保护条例》)第二十四条规定:“除《中华人民...

鉴客
2010/09/01
2.3K
17

没有更多内容

加载失败,请刷新页面

加载更多

下一页

RabbitMQ在CentOS环境安装

1.废话不多说准备一台虚拟机,系统为centos,我这里使用的系统版本如下图所示:

凌晨一点
44分钟前
0
0
线程池相关

在java.util.concurrent包下,提供了一系列与线程池相关的类。 使用线程池的好处 降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗; 提高响应速度。当任务到达时,任务...

edwardGe
46分钟前
0
0
学习大数据这三个关键技术是一定要掌握!

大数据时代全面来临,大数据、人工智能等技术引领科技创新潮流,获得国家政策大力支持,前景广阔。学习大数据技术的人自然是络绎不绝, 学习大数据虽然是一个趋势,但也要注意大数据培训课程...

董黎明
今天
0
0
jetbrains 上传代码到github

设置中找github 获取token 验证是否成功 测试git 生成key,一路回车即可 ssh-keygen -t rsa -C “youremail@example.com” 打开pub复制key,需要再次输入一次密码 验证是否成功,输入yes即可...

阿豪boy
今天
0
0
分布式服务框架(拾遗)

前言 现在的大部分工程都已经是基于分布式架构来处理。所以这里对分布式框架做一个简单的总结 常用的RPC框架 RPC框架原理 RPC(Remote Procedure Call,远程过程调用)一般用来实现部署在不同...

kukudeku
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部