Python图像处理丨详解图像去雾处理方法( 五 )

 

Python图像处理丨详解图像去雾处理方法

文章插图
 
1.算法原理
言归正传,如果是图像处理或研究图像去雾领域的作者,建议大家认真阅读这篇英文原文,能在2009年提出该算法真的很惊艳 。
 
引用及参考中文论文: 何涛, 等. 基于暗通道先验的单幅图像去雾新算法[J]. 计算机科学, 2021.王蓉, 等. 基于改进加权融合暗通道算法的图像去雾研究[J]. 浙江科技学院学报, 2021.图像去雾算法的原理、实现、效果(速度可实时)- 挚爱图像处理图像去雾之何凯明暗通道先验去雾算法原理及c++代码实现 - Do it ! 英文原文: https://ieeexplore.ieee.org/document/5567108 Single Image Haze Removal Using Dark Channel Priorhttps://ieeexplore.ieee.org/document/5206515 Single image haze removal using dark channel prior
 
Python图像处理丨详解图像去雾处理方法

文章插图
 
暗通道先验(Dark Channel Prior, DCP)去雾算法 依赖大气散射模型进行去雾处理,通过对大量有雾图像和无雾图像进行观察总结,得到其中存在的一些映射关系,然后根据有雾图像的形成过程来进行逆运算,从而恢复清晰图像 。
Python图像处理丨详解图像去雾处理方法

文章插图
 
算法实现过程及原理如下,参考何恺明老师和何涛老师的论文 。
(1) 大气散射模型
在计算机视觉和计算机图形学中,方程所描述的大气散射模型被广泛使用 。参数解释如下:
 
  • x是图像的空间坐标
  • I(x)代表有雾图像(待去雾图像)
  • J(x)代表无雾图像(待恢复图像)
  • A代表全球大气光值
  • t(x)代表透射率
 
方程右边第一项为场景直接衰减项,第二项为环境光项 。
Python图像处理丨详解图像去雾处理方法

文章插图
 
(2) 暗通道定义
在绝大多数非天空的局部区域中,某些像素总会至少有一个颜色通道的值很低 。对于一幅图像J(x),其暗通道的数学定义表示如下:
Python图像处理丨详解图像去雾处理方法

文章插图
 
其中,Ω(x)表示以x为中心的局部区域,上标c表示RGB三个通道 。该公式的意义用代码表达也很简单,首先求出每个像素RGB分量中的最小值,存入一副和原始图像大小相同的灰度图中,然后再对这幅灰度图进行最小值滤波,滤波的半径由窗口大小决定 。
(3) 暗通道先验理论
暗通道先验理论指出:对于非天空区域的无雾图像J(x)的暗通道趋于0,即:
Python图像处理丨详解图像去雾处理方法

文章插图
 
实际生活中造成暗原色中低通道值主要有三个因素:
 
  • a) 汽车、建筑物和城市中玻璃窗户的阴影,或者是树叶、树与岩石等自然景观的投影;
  • b) 色彩鲜艳的物体或表面,在RGB的三个通道中有些通道的值很低(比如绿色的草地/树/植物,红色或黄色的花朵/叶子,或者蓝色的水面);
  • c) 颜色较暗的物体或者表面,例如灰暗色的树干和石头 。
 
Python图像处理丨详解图像去雾处理方法

文章插图
 
总之,自然景物中到处都是阴影或者彩色,这些景物的图像的暗原色总是很灰暗的,而有雾的图像较亮 。因此,可以明显的看到暗通道先验理论的普遍性 。
Python图像处理丨详解图像去雾处理方法


推荐阅读