文章链接
原文:Single Image Dehazing Using Saturation Line Prior | IEEE Journals & Magazine | IEEE Xplore
代码:https://github.com/LPengYang/Saturation-Line-Prior
饱和度线先验定义
沿着将图像构建为投影表面拼贴的轨迹,图像的局部单色表面假定表示为:
R代表三维表面反射率,在每个局部patch,即Ω中是固定的,l是描述亮度的因子。上述式子通过假设R为分段常数,解缠局部patch。一个图像K的饱和度S为:
将大气光模型
归一化后
让和
代表归一化的有雾和无雾图。上式改写为:
有下面性质:(1)在局部单色曲面假设下,
的饱和分量是局部常数。经推导,
的饱和分量可表示为一次函数
(饱和度线先验SLP的定义)。其中
这里的V就是图像HSV空间的亮度分量。代表常量
的饱和分量。由此,局部的透射率可解释为
,且可由饱和度先验来表示。
利用SLP去雾
分为三部分:饱和度线构造-透射率细化-场景恢复
饱和度线构造
(a)是有雾图,(b)-(c) 是有雾图的放大局部斑块。(d)构建(b)对应的饱和线。(e)构建(c)对应的饱和线。(f)透射图。SLP失败的区域用灰色表示。(g)去雾效果。
饱和度线(d) (e)像素并不完全位于一条直线上,并且存在偏离直线的像素。是因为1)局部斑块中某些像素之间的微小色差,导致依赖的局部单色表面假设对某些像素不成立;2)局部斑块的深度变化,当局部斑块包含深度跳变时发生。小的可忽略,但大的影响结果,于是在选patch时不可以选颜色变化太大的,例如。
这里用十个像素演示过滤掉偏离的像素,以确保构建可靠的饱和线。注意,的取值范围为[0,1],透射率t在(0,1)范围内。由斜率公式,饱和线的斜率k在(-1,0)范围内。因此,如果任意两像素都位于饱和线上,则线的斜率必须在(-1,0)范围内,如图(b)中的k(1,3)和k(6,8)所示。
因此,给定patch,取任一像素作为参考像素,其他像素可以根据与参考像素形成的直线的斜率将其分为两类:i)斜率在(-1,0)范围内的像素,ii)斜率在(- 1,0)范围外的像素。去掉多余的偏离像素,保留有效像素构造饱和线。根据以上观察,对于给定大小为r的图像patch χ中的像素(xi, yi),可以得到满足斜率要求的其他像素个数的对应比例为:其中N为图像patch中像素的总数,F(·)是 bool函数返回0-1,代表k是否在范围内。像素选择的标准定义为:
其中N为图像patch中像素的总数,F(·)是 bool函数返回0-1,代表k是否在范围内。像素选择的标准定义为:
其中H为所选像素的集合,p为预设参数。为了鼓励构建的饱和线利用图像patch中优势区域的信息,我们设置p = 0.5,以确保所选像素和至少一半其他像素形成的斜率在所需的(- 1,0)范围内。最后,利用普通最小二乘法(OLS)得到饱和线:
其中为H的像素数,
为平均值。该方法根据像素在由
和
组成的坐标中的位置关系进行像素选择。构造饱和线之后,可直接计算得到该patch的透射率t。注意:选择像素数量以及饱和线长度(线上两头像素的距离),必须大于一个最小的预设值。
优化透射率
SLP有应用失败的场景,一是饱和度接近零的天空区域,二是颜色变化小的非天空区域,如河面。改进方法是引入产生初始透射率的边界约束,为这些失效区域提供必要的透射率。
对于给定的有雾图,一般情况,给定下边界B0和上边界B1,将bc0和bc1分别表示为下边界B0和上边界B1的颜色通道。边界约束为了获取去雾像素精确到达给定下边界bc0或上边界bc1时所对应的透射值,对于得到的t,其在三个颜色通道中的最大值表示使去雾像素正好在一个颜色通道中到达下边界B0或上边界B1的传输值。这种情况下对应的t可以得到:
这里采用(Efficient image dehazing with boundary constraint and contextual regularization)中的推荐边界值,为了与上一节的局部恒定t值假设保持一致,我们采用了分段式
也就是说,该公式是SLP失败情况下的t值估计。
场景恢复
用(Investigating haze-relevant features in a learning framework for image dehazing)的方法估计大气光A,并和估计的透射率t代入公式计算。
图像斑块的不同划分方法。(a)有雾图。(b)不同的patch分割方式。(c)透射率t。(d)去雾图。