经典去雾算法--暗通道先验去雾(DCP)

1.背景介绍

基于暗通道先验的单幅图像去雾算法来自于何凯明博士2009年的CVPR论文:《Single Image Haze Removal Using Dark Channel Prior》,2009年的CVPR共收到约1450篇投稿,其中393篇文章被接收,接收率为26%。只有一篇文章被选为那年的最佳论文。这是CVPR创立25年以来首次由中国人获得这个奖项。他根据Dark Object Subtraction原理通过大量实验发现局部找最暗点进行均匀去雾有很好的效果。由此得到对于一个无雾图像,每个局部区域都很有可能有一些暗的地方,换言之,至少一个颜色通道会有很低的值、或黑色东西。

这篇论文研究的问题是图像的去雾技术,它可以还原图像的颜色和能见度,同时也能利用雾的浓度来估计物体的距离,这些在计算机视觉上都有重要应用(例如三维重建,物体识别)。但是之前人们还没找到简单有效的方法来达到这个目的。在这篇论文里,他们找到了一个非常简单的,甚至说令人惊讶统计规律,并提出了有效的去雾方法。

2.去雾算法详述

2.1 有雾图片表达公式

有雾图像散射模型:

2.2暗通道定义

作者根据对5000多幅无雾图像的暗通道图数据观察发现:约75%的像素值为0,且90%的像素点具有非常低的值,且集中在[0,16]。由此提出暗通道先验理论,即对于一副无雾图像,其暗通道可以表示为:

2.3 透射率公式

2.4 求解全球大气光值

上述推论中都是假设全球达气光A值时已知的,在实际中,我们可以借助于暗通道图来从有雾图像中获取该值。具体步骤如下:

1) 求出有雾图像的暗通道图,从暗通道图中按照亮度的大小取前0.1%最亮的的像素。

2) 在这些位置中,在原始有雾图像I中寻找对应的具有最高亮度的点的值,作为A值。

2.5获得更精确的透射率图

要获得更为精细的透射率图,何博士在文章中提出了了soft matting方法,能得到非常细腻的结果。但是这一方法弱点就是速度特慢,不使用于实际使用。在2011年,何博士又发表了一片论文,其中提到了导向滤波的方式来获得较好的透射率图。该方法的主要过程集中于简单的方框模糊,而方框模糊有多重和半径无关的快速算法。这个导向滤波算法除了在去雾方面外,还有着其他多方面的应用。

后续会更新softmatting和引导滤波

2.6 最终结果输出

全局大气光值和透射率都已经求出,就可以进行去雾了,当投射图t 的值很小时,会导致J的值偏大,从而使图像整体向白场过度,因此一般可设置一阈值t0,当t值小于t0时,令t=t0,即:

 

 

暗通道先验(Dark Channel Prior, DCP)是一种基于图像处理的去雾算法,主要用于去除由于大气散射和混杂光照引起的图像气。在MATLAB中实现暗通道先验主要依据以下原理: 1. **暗通道检测**:算法首先寻找图像中的“暗通道”,即像素值在三个颜色通道(通常为RGB)中最小的区域。假设在无的情况下,天空部分的亮度应该相对较低,而气会使这个比例下降。 2. **阈值分割**:通过设定一个阈值,将暗通道中的像素识别为可能有的部分。这些像素的亮度值通常是低的,因为气会吸收大部分光线。 3. **估计层**:通过减去这个暗通道部分的估计值,可以得到一个大致的层图。这个过程可以用简单的数学运算如平均、中值滤波或更复杂的统计方法来实现。 4. **去**:最后,将原始图像与层图相乘,得到去后的清晰图像。这样,未被影响的部分保持不变,而层部分则被有效地剔除。 在MATLAB中,你可以使用`imadjust`函数对暗通道进行调整,`medfilt2`进行滤波,以及基本的图像操作如元素-wise乘法来实现这个过程。下面是一个简化的MATLAB代码示例: ```matlab % 加载图像并转换为灰度 img = imread('input_image.jpg'); gray_img = rgb2gray(img); % 检测暗通道 dc = min(gray_img, [], 'all'); % 'all'表示三通道最小值 % 阈值分割 threshold = 0.05; % 可调参数 dc_mask = dc < threshold * mean(dc(:)); % 去 estimated_fog = imadjust(dc, [0, 0.1], [0, 1]); dehazed_img = img .* logical(1 - dc_mask) + estimated_fog .* dc_mask; % 显示结果 figure, imshowpair(img, dehazed_img, 'montage'); ```
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值