双边滤波去雾算法

目录

[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. 运行结果

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

相关推荐
忆湫淮几秒前
ENVI 5.6 利用现场标准校准板计算地表反射率具体步骤
大数据·人工智能·算法
lpfasd1231 分钟前
现有版权在未来的价值:AI 泛滥时代的人类内容黄金
大数据·人工智能
cyyt2 分钟前
深度学习周报(11.24~11.30)
人工智能·深度学习
丝斯20112 分钟前
AI学习笔记整理(24)—— AI核心技术(深度学习8)
人工智能·笔记·学习
腾讯云开发者7 分钟前
架构火花|一线视角下的AI:从应用边界到落地难题
人工智能
Blossom.1188 分钟前
基于Mamba-2的实时销量预测系统:如何用选择性状态空间干掉Transformer的O(n²)噩梦
人工智能·python·深度学习·react.js·机器学习·设计模式·transformer
Mintopia9 分钟前
AIGC 技术标准制定:Web 行业协同的必要性与难点
人工智能·aigc·trae
Wise玩转AI10 分钟前
Day 26|智能体的“伦理与安全边界”
人工智能·python·安全·ai·chatgpt·ai智能体
极速learner12 分钟前
n8n本地安装的两种方法:小白入门大白话版本
人工智能·prompt
_codemonster12 分钟前
深度学习实战(基于pytroch)系列(三十八)门控循环单元(GRU)从零开始实现
人工智能·深度学习·gru