读Tan基于最大化对比度的去雾方法

学习目标:
Visibility in Bad Weather from a Single Image

个人感悟:
本文是在光学模型基础上将大气光设置为全局常量(取输入图像中最亮的像素值),并将图像做归一化处理作为输入图像,通过估算A(x),恢复去雾图像。在估计A(x)时的基础理论为两个统计观察发现,基于这两点在马尔可夫随机下构建关于边缘强度的代价函数,估计最优A(x)。

内容解读:

  1. 摘要:
    本文解决了去雾需要同场景多张图片的痛点,介绍了一种只需要一张图片的自动去雾算法。存在两个基本的先验:首先,高能见度(或清晰场景)图片相比于受恶劣天气干扰的图片具有更高的对比度;其次,天空光的变化主要依赖于场景到观察者的距离,并趋向于平滑图像。基于这些先验,本文提出了一个基于马尔科夫场的损失函数。该损失函数可以由多种技术进行优化,比如例如图形切割或信念传播。
    2.内容:
    1.概要
    给定一个输入图像,从我们可以得到光的色度估计大气光。使用灯光色度,我们去除输入图像的浅色。随后,我们计算每个像素的数据成本和平滑度成本。数据成本计算自从图像中裁剪的小块的对比度。这平滑度成本是根据差异或距离计算的两个相邻像素的标签,其中标签是与 airlight 值相同。这些数据和平滑度成本建立完整的 MRF,可以使用现有的推理方法进行优化,产生估计的空气灯的价值。基于估计的空气光,最后我们计算代表的直接衰减具有增强可见性的场景。请注意,在本文中,我们不打算完全恢复场景的原始颜色或反照率。我们的目标是仅增强输入图像的对比度,从而提高图像可见度。
  2. 大气模型
    I 是图像强度,x 是二维空间位置。 L∞ 是大气光,通常假定为全局常数,因此它与位置 x 无关, ρ 是物体的反射率。 β为大气衰减系数,d是图像中的对象与观察服务器之间的距离。假设方程中的 β 对于不同的波长是恒定的

如果我们假设物体无限远(d = ∞),根据等式(1),图像色度将仅取决于
在大气光 (L∞) 上,因为 e−βd = 0。我们称这种“浅色度”

  1. 大气光
     在许多恶劣天气中,尤其是在通常阴云密布的日光下,我们可以忽略太阳光的存在,并假定大气光L ∞ 是全局恒定的。根据 ( 1 ) ,可以从输入图像中具有最高强度的像素获得 L ∞ 的全局值。 因为这些像素代表无限远的物体( d = ∞),假设可以在图像中看到天空并且图像没有饱和像素。 因此,通过将 L ∞的值代入公式 ( 3 ),具有 L ∞ 的值使我们能够获得光色度( α)的值。
    (找到图像中像素值最大的点,该像素三个通道的值即为三个通道的大气光值。)
  2. 大气光白化
    通过利用大气光光色度( α ),将 ( 5 )中的每个颜色通道的强度处于相应的 α c ,将输入图像的大气光的颜色转换为白色。即:

5.单图像求解
方程(10)已知的变量数少于未知的变量数。然而,这里有一些线索或者先验可以被考虑进来:

①输出图像相比于输入图像必须有更大的对比度;
②A值的变化只依赖于场景深度,即相同成像距离具有相同的A值,无需考虑反射率。因此A的邻域趋向于有相同的值。再者,在很多情况下A在很小的区域是平滑变化的。只有在场景中depth断层的地方例外,但这些像素总体较少。
6.最大对比度

当对比度取得最大值时,不一定是物体真实的辐照度情况,但它极大地增强了图像的对比度。
7.大气光的平滑约束

计算方法
1、 首先估计输入图像的大气光,也就是L∞。
2、然后从中获取light chromaticity,也就是光的色度。
3、 使用公式,对输入图像进行归一化处理
4、 计算每个像素的数据代价项。
5、 然后从中获取平滑代价项.
6、 现在可以构建马科夫模型包括datacost和smoothness cost,最优化该代价方程之后就可以得到airlight A。
7、 由A就可以获取增强之后的图像。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一种基于偏振的去算法的 Matlab 实现代码: ```matlab function [J, T] = polarization_dehaze(I, omega, radius) % I: 输入图像,RGB格式,范围[0, 1] % omega: 光度学大气散射参数,范围[0, 1] % radius: 滤波器半径,控制滤波器大小 if ~exist('omega', 'var') omega = 0.95; end if ~exist('radius', 'var') radius = 15; end % 把图像转化为灰度图像 Igray = rgb2gray(I); % 计算图像的梯度 [Ix, Iy] = gradient(double(Igray)); % 计算每个像素点的偏振角度 theta = atan2(Iy, Ix); % 计算每个像素点的偏振强度 S = sqrt(Ix.^2 + Iy.^2); % 计算偏振强度的平均值和标准差 S_mean = mean(S(:)); S_std = std(S(:)); % 计算滤波器大小 alpha = (1 - omega) / omega; sigma = alpha * S_mean + S_std; % 构造高斯滤波器 h = fspecial('gaussian', [radius*2+1, radius*2+1], sigma); % 对偏振角度进行滤波 theta_f = imfilter(theta, h, 'replicate'); % 计算偏振角度的方差 theta_var = var(theta_f(:)); % 计算透射率 T = exp(-omega * S ./ max(S_mean, S_std) .* tan(theta_f - theta).^2 / theta_var); % 限制透射率的范围 T = max(min(T, 1), 0); % 进行去处理 J = (I - omega) ./ max(T, omega) + omega; % 限制输出图像的范围 J = max(min(J, 1), 0); end ``` 使用方法: ```matlab I = imread('hazy_image.png'); I = im2double(I); [J, T] = polarization_dehaze(I); imshow(J); ``` 其中,`I` 是输入图像,需要先使用 `imread` 函数取,然后使用 `im2double` 函数将其转化为范围在 [0, 1] 的 double 类型图像。`J` 是去后的图像,`T` 是计算出的透射率。最后使用 `imshow` 函数显示去后的图像。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值