双边滤波去雾算法

目录

[1. 简介](#1. 简介)

[2. 步骤](#2. 步骤)

[3. 优点](#3. 优点)

[4. 代码](#4. 代码)

[5. 运行结果](#5. 运行结果)


1. 简介

本文介绍了双边滤波图像去雾算法,旨在消除雾霾对图像质量的影响,能够保留边缘信息并去除噪声,有效提高图像的清晰度和对比度。双边滤波(Bilateral Filtering)是一种用于图像处理的非线性滤波方法,它能够在平滑图像的同时保留边缘细节,并结合了空间域和强度域的信息,以避免在平滑噪声的同时模糊图像的边缘。

首先对图像进行频域变换,将原始图像分解为高频成分和低频成分。然后分别对高频成分和低频成分应用双边滤波算法,以去除噪声和增强边缘信息。最后将处理后的高频成分和低频成分进行逆频域变换,得到去雾后的图像。这种滤波技术特别适用于去噪和图像增强。

在频域和空域中同时进行滤波的方法,能够在去除噪声的同时保留边缘信息。其基本原理是利用像素强度相似性的度量来调整权重,将权重与邻域像素的强度值相乘,然后对所有邻域像素的强度值进行加权平均。

由于双边滤波算法考虑了像素的空间信息和灰度信息,该算法具有较好的泛化能力和较高的运行效率,能够保留边缘信息并去除噪声,显著提高图像的清晰度和对比度,因此能够更好地保护图像的细节和边缘,可以为图像处理和计算机视觉领域提供有力支持。

双边滤波器的输出是输入图像中每个像素的加权平均值,这个权重取决于空间距离和像素值差异两个因素。具体公式如下:

2. 步骤

1.选择邻域S:对于每个像素点x,确定一个邻域S,通常是一个正方形或圆形窗口。

2.计算权重:

空间权重():计算邻域内每个像素与中心像素的空间距离,并通过高斯函数转换为权重。

强度权重(I_{input}()-I_{input}(x)):计算邻域内每个像素与中心像素的强度差异,并通过高斯函数转换为权重。

3.加权平均:计算每个像素的加权平均值,得到滤波后的像素值。

4.归一化:使用归一化因子对权重进行归一化,确保输出像素值在合理范围内。

3. 优点

1.能有效去除图像噪声,同时保留图像边缘细节。

2.不会产生明显的边缘模糊现象。

4. 代码

python 复制代码
import cv2
import numpy as np

def dehaze(image, w=1, t0=0.4, p=0.8):
    # 估计全局大气光照
    dark_channel = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    dark_channel = cv2.min(dark_channel, cv2.blur(dark_channel, (15, 15)))
    hist = cv2.calcHist([dark_channel], [0], None, [256], [0, 256])
    hist_cum = hist.cumsum()
    percentile = (1 - w) * hist_cum[-1]
    atmospheric_light = 255 - np.argmax(hist_cum > percentile)

    # 估计透射率
    normalized_image = np.uint8(image / atmospheric_light)  # 将数据类型转换为8位无符号整数
    dark_channel = cv2.min(cv2.cvtColor(normalized_image, cv2.COLOR_BGR2GRAY), cv2.blur(dark_channel, (15, 15)))
    transmission = 1 - t0 * dark_channel

    # 双边滤波
    guide = cv2.GaussianBlur(image, (0, 0), p)
    dehazed_image = np.zeros_like(image)
    for i in range(3):
        dehazed_image[:, :, i] = (image[:, :, i] - atmospheric_light) / cv2.max(transmission, 0.1) + atmospheric_light
    dehazed_image = guide * transmission[:, :, np.newaxis] + dehazed_image * (1 - transmission[:, :, np.newaxis])
    return dehazed_image.astype(np.uint8)

# 读取输入图像
image = cv2.imread('xue_foggy.png')
# 进行去雾处理
dehazed_image = dehaze(image)
# 显示结果
cv2.imshow('Input', image)
cv2.imshow('Dehazed', dehazed_image)
cv2.waitKey()

5. 运行结果

图像结果表明,双边滤波去雾算法在去雾过程中能够保留边缘细节,能够显著提高图像的清晰度和对比度,有效消除雾霾对图像质量的影响。但在复杂场景、低光照条件或存在运动模糊时可能产生其它问题。

相关推荐
深蓝海拓1 分钟前
用于优化和改进YOLO11的一些方法
人工智能·python·yolo·机器学习
外参财观8 分钟前
会员制大考:盒马交卷离场,山姆答题艰难
大数据·人工智能
多恩Stone9 分钟前
【3DV 进阶-10】Trellis 中的表示 SLat 理解(1)
人工智能·python·算法·3d·aigc
共绩算力9 分钟前
深度代理如何利用文件系统进行上下文工程
人工智能·共绩算力
饭饭大王66611 分钟前
深度学习的伦理困局与偏见消解:从技术反思到实践路径
人工智能·深度学习
roman_日积跬步-终至千里17 分钟前
【计算机视觉(3)】图像滤波基础篇:从概念到应用
图像处理·人工智能·计算机视觉
高洁0118 分钟前
循环神经网络讲解
人工智能·python·神经网络·机器学习·transformer
Echo_NGC223719 分钟前
【AirSim 教程指南】Part 3:相机与传感器(RGB / 深度 / 分割 / LiDAR)
人工智能·计算机视觉·游戏引擎·ar·无人机·图形渲染·着色器
Sagittarius_A*23 分钟前
深度学习预备知识:数据操作、线性代数与微积分基础
人工智能·深度学习·线性代数·ai
子午25 分钟前
【中草药识别系统】Python+TensorFlow+Django+人工智能+深度学习+卷积神经网络算法
人工智能·python·深度学习