双边滤波去雾算法

目录

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

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

相关推荐
sp_fyf_20241 小时前
[大语言模型-论文精读] 更大且更可指导的语言模型变得不那么可靠
人工智能·深度学习·神经网络·搜索引擎·语言模型·自然语言处理
肖遥Janic2 小时前
Stable Diffusion绘画 | 插件-Deforum:商业LOGO广告视频
人工智能·ai·ai作画·stable diffusion
我就是全世界3 小时前
一起了解AI的发展历程和AGI的未来展望
人工智能·agi
CV肉饼王3 小时前
基于CNN的水果分类与模型调优实验
深度学习·计算机视觉
colorknight3 小时前
1.2.3 HuggingFists安装说明-MacOS安装
人工智能·低代码·macos·huggingface·数据科学·ai agent
kuan_li_lyg3 小时前
MATLAB - 机械臂手眼标定(眼在手内) - 估计安装在机器人上的移动相机的姿态
开发语言·人工智能·matlab·机器人·ros·机械臂·手眼标定
山川而川-R3 小时前
Windows安装ollama和AnythingLLM
人工智能·python·语言模型·自然语言处理
Kuekua-seu4 小时前
diffusion vs GAN
人工智能·神经网络·生成对抗网络
电子科技圈4 小时前
IAR全面支持国科环宇AS32X系列RISC-V车规MCU
人工智能·嵌入式硬件·mcu·编辑器
大地之灯4 小时前
深度学习每周学习总结J1(ResNet-50算法实战与解析 - 鸟类识别)
人工智能·python·深度学习·学习·算法