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

转载于:https://my.oschina.net/abcijkxyz/blog/792272

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

  1. [论文阅读] (11)ACE算法和暗通道先验图像去雾算法(Rizzi | 何恺明老师)

    <娜璋带你读论文>系列主要是督促自己阅读优秀论文及听取学术讲座,并分享给大家,希望您喜欢.由于作者的英文水平和学术能力不高,需要不断提升,所以还请大家批评指正,非常欢迎大家给我留言评论,学 ...

  2. 综述:视频和图像去雾算法以及相关的图像恢复和增强研究

    综述:视频和图像去雾算法以及相关的图像恢复和增强研究 翻译自IEEE的一篇文章<Review of Video and Image Defogging Algorithms and Relate ...

  3. Python 还能实现图片去雾?FFA 去雾算法、暗通道去雾算法用起来!(附代码)...

    授权自AI科技大本营(ID:rgznai100) 本文约3600字,建议阅读7分钟. 本文为你介绍FFA去雾算法和暗通道去雾算法搭建. 在过去的几十年中,单图像去雾作为基本的低级视觉任务已引起了计算机 ...

  4. 高级图像去雾算法的快速实现。

    http://blog.csdn.net/occupy8/article/details/40322683 最新的效果见 :http://video.sina.com.cn/v/b/124538950 ...

  5. 图像和视频的快速去雾算法研究

    王昕, 孙莹莹, 李影昉. 图像和视频的快速去雾算法研究[J]. 影像科学与光化学, 2016, 34(1): 82-87.   WANG Xin, SUN Yingying, LI Yingfang ...

  6. YUV图像实时去雾算法的优化与改进

    YUV图像实时去雾算法的优化与改进 2016-03-02 21:04 摘要:针对已有的基于DSP的实时去雾算法出现的问题进行优化和改进.在降采样倍数过大时,去雾效果会出现一些副作用,包括纹理细节丢失. ...

  7. 避免图像去雾算法中让天空部分出现过增强的一种简易方法

    FROM:http://www.chawenti.com/articles/25193.html 在经典的几种去雾算法中,包括何凯明的暗通道去雾.Tarel的基于中值滤波的去雾以及一些基于其他边缘保留 ...

  8. 高级图像去雾算法的快速实现

    FROM:http://blog.csdn.net/occupy8/article/details/40322683 最新的效果见 :http://video.sina.com.cn/v/b/1245 ...

  9. c++ opencv编程实现暗通道图像去雾算法_OpenCV图像处理专栏十五 |一种基于亮度均衡的图像阈值分割技术...

    前言 对于光照不均匀的图像,用通常的图像分割方法不能取得满意的效果.为了解决这个问题,论文<一种基于亮度均衡的图像阈值分割技术>提出了一种实用而简便的图像分割方法.该方法针对图像中不同亮度 ...

最新文章

  1. 加密算法有哪些?对称加密和非对称加密的区别?
  2. hadoop + spark+ hive 集群搭建(apache版本)
  3. windoes windoes server 上安装mysql(MSI安装包安装、压缩包安装)
  4. Java Calendar 获取时间为明天的上午10点
  5. TensorFlow与主流深度学习框架对比
  6. PopWindow弹出在任意位置。
  7. [置顶] CopyU!v2插件合集 [2013年7月18日更新]
  8. 如何使用布隆过滤器在Java中建立大容量的内存缓存
  9. PHP mongodb运用,MongoDB在PHP下的应用学习笔记
  10. 月薪23333元!淘宝招募“首席鉴雕官”,只需天天哈哈哈哈哈
  11. [tf] Unknown: Failed to get convolution algorithm. This is probably because cuDNN failed to initial
  12. js正则匹配小数点后2位_正则实践与详解
  13. 如何书写软件应用发明专利说明书(实例)
  14. python语言程序设计实验题p181答案_2010年新版教材自考网络操作系统02335_复习笔记...
  15. 自动驾驶汽车是如何利用高精度地图和高精度定位来进行“导航”的
  16. @click.stop作用(阻止点击事件继续传播,即阻止事件冒泡)
  17. RFID不同频率下的应用场景及优缺点
  18. 黑马程序员-JS基础-移动端网页特效
  19. 【经验】VMware|windows更新20H2版本后VMware虚拟机无法开启(禁用Device guard)
  20. 华为手机备份工具备份方法与新版本不再支持备份到手机内部存储解决办法

热门文章

  1. 什么是安卓马甲APP?寻求高手安卓马甲包封装APP上架
  2. QRCode生成二维码和解析二维码
  3. Leetcode-545. Boundary of Binary Tree
  4. 文华财经期货量化短线策略支撑压力指标公式,短线行情无未来函数多空均线红涨绿跌信号
  5. Kmeans K均值聚类,OpenCV实现
  6. dorado弹框方式
  7. JS childNodes
  8. Axure RP9 入门1——【安装+汉化+界面初识】
  9. win11快速启动有必要关闭吗?如何关闭?
  10. java实现下载excel文件