Digital Image processing(一): Haze Removal by guide filtering


最近学习并做了关于Haze removal 的project,相对来说有了一些理解,希望自己能记录下来并分享。

一、前言

《Single Image Haze Removal Using Dark Channel Prior》是数字图像领域里比较出名的论文,本次project也是基于这篇论文来做的,当然也拓展了guide filter 。有关的论文和代码我放在了我的github

二、基本概念

(一)暗通道先验Jdark(dark channel prior)

在绝大多数非天空的局部区域里,某一些像素总会有至少一个颜色通道具有很低的值。换言之,该区域光强度的最小值是个很小的数。我们给暗通道一个数学定义,对于任意的输入图像J,其暗通道可以用下式表达:
在这里插入图片描述
式中Jc表示彩色图像的每个通道 ,Ω(x)表示以像素X为中心的一个窗口。 首先求出每个像素RGB分量中的最小值,存入一副和原始图像大小相同的灰度图中,然后再对这幅灰度图进行最小值滤波,滤波的半径由窗口大小决定。
论文中通过统计,得出:
在这里插入图片描述
实际生活中造成暗原色中低通道值主要有三个因素:a)汽车、建筑物和城市中玻璃窗户的阴影,或者是树叶、树与岩石等自然景观的投影;b)色彩鲜艳的物体或表面,在RGB的三个通道中有些通道的值很低(比如绿色的草地/树/植物,红色或黄色的花朵/叶子,或者蓝色的水面);c)颜色较暗的物体或者表面,例如灰暗色的树干和石头。总之,自然景物中到处都是阴影或者彩色,这些景物的图像的暗原色总是很灰暗的。(这些都是废话)

(二)雾图像I(haze image)

在计算机视觉和计算机图形中,下述方程所描述的雾图形成模型被广泛使用:
  
  在这里插入图片描述
其中,I(X)就是我们现在已经有的图像(待去雾的图像),J(x)是我们要恢复的无雾的图像,A是全球大气光成分, t(x)为透射率。现在的已知条件就是I(X),要求目标值J(x),显然,这是个有无数解的方程,因此,就需要一些先验了。

(三)大气光A(medium transmission)

在实际中,我们可以借助于暗通道图来从有雾图像中获取该值。具体步骤如下:

  1. 从暗通道图中按照亮度的大小取前0.1%的像素。
  2. 在这些位置中,在原始有雾图像I中寻找对应的具有最高亮度的点的值,作为A值。

(四)透射率t(medium transmission)

将式稍作处理,变形为下式:
在这里插入图片描述
对式两边求两次最小值运算,得到下式:
在这里插入图片描述
然后,我们根据上述方程式在三个颜色通道之间进行最小值运算,得到:
在这里插入图片描述
由暗通道先验可以得到:
在这里插入图片描述
那么再除以大气光A,可以得到:
在这里插入图片描述
最后我们带入得到:
在这里插入图片描述
I是我们的输入,A是大气光,通常会有ω (0<ω≤1),一般取0.95:
在这里插入图片描述

三、图像恢复(Recovering the Scene Radiance)

得到上述一些参数后,我们可以通过以下得到新的图像:
在这里插入图片描述
t0是防止t过小而设置的阈值。

四、t的改进方法

(一)Soft Matting(比较麻烦就省略不用了→_→)

(二)Faster matting (同省略)

(二)Guided filter

引导图滤波作为一种线性滤波器,可以简单定义为如下形式:
在这里插入图片描述
其中I是引导图像(guided Image),P是输入的待滤波图像,Q是滤波后的输出图像,W是根据引导图I确定的权重值。权重值W可以用下式表示(原文献有详细推导):
在这里插入图片描述

μk是窗口内像素点的均值,Ii和Ij指相邻两个像素点的值,σk代表窗口内像素点的方差,ε是一个惩罚值。自适应权重可以根据上式分析得到:Ii和Ij在边界两侧时,(Iik)和(Ijk)异号,否则,则同号。而异号时的权重值将远远小于同号时的权重值,这样处于平坦区域的像素则会被加以较大的权重,平滑效果效果更明显,而处于边界两侧的像素则会被加以较小的权重,平滑效果较弱,能够起到保持边界的效果。

在这里插入图片描述

由上图可以看出q=aI+b是线性方程,因此可以说我们使用的导向图的要求就是导向图和图像是线性关系。导向图可以告诉输入,哪里是边缘,哪里是平面,这样输入就可以利用这些信息进行滤波。现在我们可以设想,有三块区域,其中两块是平面(平滑区域),在平滑区域图像的像素变化率较小,因此梯度较小。在边缘区域图像像素变化率较大因此梯度较大。这里说明一点–a,b是当前窗的线性函数系数,a,b不是固定的,不同位置的窗,a,b不同。当同时对输出和导向图进行求梯度时,可以看出两者的梯度是一个系数a的关系,因此完全可以用导向图的梯度来知道输出图像q的梯度。

上面的q=p-n,其中n就是噪声。噪声n是我们所不希望看到的,因此我们的优化就是让噪声n取到最小

在这里插入图片描述
此处何凯明教授是用岭回归来代替普通线性回归。
在这里插入图片描述
可通过下式来得到最后的滤波图像q
在这里插入图片描述

五、Reference

【1】《Single Image Haze Removal Using Dark Channel Prior》一文中图像去雾算法的原理、实现、效果(速度可实时)
【2】引导图滤波(Guided Image Filtering)原理以及OpenCV实现
【3】Guided Image Filtering导向滤波通俗易懂
【4】BoxFilter的Matlab实现方法
【5】积分图(三) - Boxfilter 的实现过程分析
【6】Kaiming He 何恺明 官网

六、代码及参考文献地址

https://github.com/EasternH/image_processing

在单个图像去雾算法中,使用暗通道先验方法(matlab single image haze removal using dark channel prior)是一种常用的方法。 该方法利用了图像中的暗像素值数据来对图像中的雾进行估计和消除。在图像中,由于雾的存在,远处的物体会有较高的亮度减弱,而靠近观察点的物体则有较高的亮度增强。由于光照强度不均匀,较暗的像素通常代表空气中的雾浓度较低,而较亮的像素通常代表雾浓度较高。 暗通道先验方法的基本思想是,通过查找图像中的暗像素值,可以估计出该区域中的最小远景透射率。透射率是雾的浓度与雾气对光的散射强度之间的比例关系。通过估计最小透射率,可以推断出雾浓度的分布,从而进行雾的去除。这个估计过程可以通过计算图像每个像素点的一个小窗口内的最小像素值来实现。 具体的暗通道先验算法包括以下步骤: 1. 对输入的雾图像进行预处理,包括图像的亮度归一化和颜色空间转换。 2. 计算每个像素点对应的暗通道,即选择一个固定大小的窗口,在窗口内找到最小像素值。 3. 估计最小透射率,最常用的方法是使用暗像素值和其相应的原始像素值计算得到。 4. 通过估计的透射率和原始图像进行重建,可以得到去雾后的图像。 暗通道先验方法是一种简单但有效的去雾算法,可以在图像中消除大部分的雾效果,提高图像的清晰度和可见度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值