注意:这篇文章上次更新于1992天前,文章内容可能已经过时。
This article was last updated1992 days ago, the content may be outdated.
求大气散射模型中大气光的一种方法,这里记为V
成像模型:

方法简介
求 V 的过程是一种垂直分层的搜索技术,主要有以下几个步骤:
-
分层操作。
分层并不是真的图像分层,而是用不同尺度的分割方式对图像进行分块计算特征。第 i 层把图像分为 块。

-
计算特征。
对每一层的每一块分别计算下面三个特征。
-
特征 1:
其中 表示仅使用 绿色和蓝色通道计算的暗通道图。 表示第 j 层 第 i 个区域的像素点个数。
-
特征 2 :
其中 代表 第 j 层 第 i 个区域的像素均值,I 为原图。
-
特征 3 :
其中 表示 第 j 层 第 i 个区域 的灰度图的梯度图。
-
-
计算均值。
对最后一层的每一个区域,分别计算覆盖该区域的所有层的均值。对每个特征都进行此计算,计算方式如图所示:

-
计算融合特征图。
对每一个特征按上述方式计算均值后即可得到 3 个特征图,对三个特征图进行归一化操作,再相加取均值得到最终特征图。
-
区域选择。
最终的区域选择为 特征图 F 上最小值所对应的区域,接下来在该区域原图的绿蓝暗通道图上选择最亮的像素,返回原图中该像素的 R G B 数值。
Matlab 实现
绿蓝暗通道
1 | function out = gb_dark_channel(input,x) |
特征 1
1 | function out = f1(input) |
特征 2
1 | function out = f2(input) |
特征 3
1 | function out = f3(input) |
分层的同时计算每层特征
1 | function out = fen_ceng(input,J) |
归一化
1 | function [outputs] = Normalization(arg) |
标记函数
1 | function out = tag(input,x,y,distx,disty) |
主函数
1 | function out = Veiling_light_estimation(input,str) |
结果图
先来一些比较好的





再来一些不好的







