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

本文介绍了基于暗通道先验的去雾算法,详细讲解了暗通道先验理论和去雾模型,并探讨了导向滤波在求解透射率图t(x)中的应用。通过Python实现,展示了去雾处理的代码及多组结果,强调了参数调试对优化去雾效果的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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]
    for c in 
评论 30
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值