双边滤波去雾算法

目录

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

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

相关推荐
Raink老师5 小时前
【AI面试临阵磨枪-79】实时数据 RAG:订单、商家、物流、天气、动态库存
人工智能·面试·职场和发展
脑极体5 小时前
点亮星河AI+鸿蒙,一座艺术场馆的日神觉醒
人工智能·华为·harmonyos
Cosolar5 小时前
Chroma向量库面试学习指南
数据库·人工智能·面试·职场和发展·数据库架构
BUG指挥官5 小时前
Claude Code的自动化编程
人工智能
意图共鸣5 小时前
意图共鸣科技《认知智能白皮书》——感知与执行分离:认知架构(CA)如何重塑大模型底层结构
人工智能·架构
等一个人的@5 小时前
让数据自己开口:数睿通智库新增智能问数模块
人工智能·自然语言处理
ZGi.ai5 小时前
人工审查节点:让自动化工作流多一步人工把关
运维·人工智能·自动化·人机协同·智能体工作流·人工审查
王莎莎-MinerU6 小时前
MinerU 深度技术解析:从架构原理到生产部署的全面指南
css·人工智能·自然语言处理·架构·ocr·个人开发
盘古信息IMS6 小时前
盘古信息IMS V6 8.0重磅发布:以薪火AI数智平台点燃离散制造数智化引擎
大数据·人工智能·制造
weilaieqi16 小时前
从音响制造到AI家庭娱乐生态:不见不散AI智能K歌音响亮相第二十届深圳国际金融博览会
人工智能·制造·娱乐