基于导向滤波的暗通道先验去雾算法(Python,可直接运行)

1 编译环境

编程语言:Python
IDE:PyCharm 2017

2 原理介绍

2.1 暗通道先验

2.1.1 暗通道先验理论与去雾模型

暗通道先验的去雾算法是由何凯明在2009年的CVPR会议上的最佳论文,译文见译文_Single Image Haze Removal Using Dark Channel Prior,何恺明的暗通道先验(dark channel prior)去雾算法是CV界去雾领域很有名的算法,关于该算法的论文"Single Image Haze Removal Using Dark Channel Prior"一举获得2009年CVPR最佳论文。作者统计了大量的无雾图像,发现一条规律:每一幅图像的RGB三个颜色通道中,总有一个通道的灰度值很低,几乎趋向于0。基于这个几乎可以视作是定理的先验知识,作者提出暗通道先验的去雾算法。
作者首先介绍去雾模型如下:
在这里插入图片描述
式中I(x)为原图,待去雾图像;J(x)为要恢复的无雾图像;A是大气光成分,t(x)为图像的透光率

2.1.2 处理步骤

	对成像模型归一化,两边同时除以每个通道的大气光值,得到如下:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
准,因此图像恢复的最终公式为:
在这里插入图片描述

2.2 导向滤波求t(x)

在原文中,作者提出的为Soft Matting方法求解透射率图t(x),但该方法的致命失误在于计算效率低,速度慢。因此,在2011年,作者又发表论文提出利用导向滤波的方式来求透射率图t(x)。导向滤波步骤如下图:
在这里插入图片描述

3 代码

代码如下:

import cv2 as cv
import numpy as np

def zmMinFilterGray(src, r=5):
  '''最小值滤波,r是滤波器半径'''
  return cv.erode(src, np.ones((2 * r + 1, 2 * r + 1)))

def darkchannel(Image):             #计算每个通道中的最小值,输入Image图像,输出最小值img_min
rows,cols,channels=Image.shape
img=np.array(Image)
for i in range(0,rows-1):
  for j in range(0,cols-1):
    min_rgb = Image[i][j][0]
    if min_rgb  > Image[i][j][1]:
      min_rgb = Image[i][j][1]
    elif min_rgb  > Image[i][j][2]:
      min_rgb = Image[i][j][2
  • 12
    点赞
  • 179
    收藏
    觉得还不错? 一键收藏
  • 30
    评论
基于导向滤波暗通道去雾算法是一种常用的图像去雾方法,它能够有效地消除图像中的雾霾、提高图像的清晰度和对比度。 该算法的核心理念是,影响图像雾霾的主要因素是图像的深度值和雾的密度。因此,通过计算图像在一些已知区域的最小值,可以得到图像的暗通道信息,根据这个信息就可以估计出图像中的雾的密度。接着,将这些估计值作为导向滤波器的引导图像,对原图像进行滤波,即可去除图像中的雾。 在MATLAB中,实现基于导向滤波暗通道去雾算法,主要需要进行以下步骤: 1. 读入图像。可通过imread函数读入图像文件,并使用im2double将图像转换成双精度浮点型。 2. 计算暗通道。使用min滤波器计算每个像素在整张图像中的最小值,得到暗通道信息。 3. 估计大气光。利用暗通道信息可以估计出大气光的值,即图像中最亮的区域的像素值。 4. 估计雾的密度。根据大气光的值,通过公式来估计图像中每个像素处的雾的密度。 5. 计算透射率。利用估计出的雾的密度和大气光值,可以计算出每个像素处的透射率。 6. 使用导向滤波器进行滤波。将估计出的透射率作为引导图像,利用MATLAB内置函数进行导向滤波操作。 7. 输出处理后的图像。将滤波后的结果进行输出保存,或直接显示在屏幕上。 总的来说,基于导向滤波暗通道去雾算法是一种有效的图像处理方法,它能够较为完美地去除图像中的雾霾,并提高图像的清晰度和对比度,具有很高的工程应用价值。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值