首页 > AI教程 >图像去雾去雨去噪处理

图像去雾去雨去噪处理

来源:互联网 2026-07-14 06:31:03

图像去雨采用L0梯度最小化方法保留显著边缘、平滑雨痕,再经直方图调整提升对比度;图像去雾基于暗通道先验估计大气光和透射率,通过引导滤波优化透射图。处理后的图像输入目标检测与测距模型,精度明显提升,适用于极端环境下的自动驾驶。

在图像去雨、去雾任务中,许多研究者常遇到算法过平滑或残留痕迹严重的问题。本文基于前期实践,整理了相关思路与代码,希望为正在探索该方向的读者提供参考。

去雨前言

从单张静态图像中去除雨滴,看似简单实则复杂。雨点覆盖区域通常较小,导致算法难以判定哪些像素应被处理、哪些应保留。市面上虽有基于FFT的去雨方法,但效果参差不齐。本文尝试了不同路径:借助L0梯度最小化方法,专门去除雨像素,同时保留图像原有的重要边缘。

长期稳定更新的攒劲资源: >>>点此立即查看<<<

该思路具备三大优势:

  1. L0最小化技术从全局层面控制图像中非零梯度的数量,不关注局部细节,只瞄准显著边缘。
  2. 显著边缘被完整保留,低幅度、琐碎的细节(如雨痕)则被平滑掉,这正是去雨的关键。
  3. 最后通过直方图调整技术恢复去雨后图像的强度,获得更好对比度。实验表明,该流程在去除雨水方面效果显著。

算法流程

图像去雾去雨去噪处理

去雨代码部分

clear;
close all;
I=imread('youwutu.jpg'); %读入图像
R=I(:,:,1);% 取输入图像的R分量
[N1,M1]=size(R);
R0=double(R);% 对R分量进行数据转换,并对其取对数
Rlog=log(R0+1);
Rfft2=fft2(R0);% 对R分量进行二维傅里叶变换
sigma=250;% 形成高斯滤波函数
F = zeros(N1,M1);
for i=1:N1
    for j=1:M1
        F(i,j)=exp(-((i-N1/2)^2+(j-M1/2)^2)/(2*sigma*sigma));
    end
end
F=F./(sum(F(:)));
Ffft=fft2(double(F)); %对高斯滤波函数进行二维傅里叶变换
DR0=Rfft2.*Ffft;%对R分量与高斯滤波函数进行卷积运算
DR=ifft2(DR0);
DRdouble=double(DR); %在对数域中,用原图像减去低通滤波后的图像,得到高频增强图像
DRlog=log(DRdouble+1);
Rr=Rlog-DRlog;
G=I(:,:,2); % 取输入图像的G分量
[N1,M1]=size(G);
G0=double(G);%对G分量进行数据转换,并对其取对数
Glog = log(G0+1);
Gfft2=fft2(G0);%对G分量进行二维傅里叶变换
sigma=250;
for i=1:N1
    for j=1:M1
        F(i,j)=exp(-((i-N1/2)^2+(j-M1/2)^2)/(2*sigma*sigma));
    end
end
F = F./(sum(F(:)));
Ffft=fft2(double(F));%对高斯滤波函数进行二维傅里叶变换
DG0=Gfft2.*Ffft;%对高斯滤波函数进行二维傅里叶变换
DG=ifft2(DG0);
DGdouble=double(DG); %在对数域中,用原图像减去低通滤波后的图像,得到高频增强图像
DGlog=log(DGdouble+1);
Gg=Glog-DGlog;
EXPGg=exp(Gg); %取反对数,得到增强后的图像分量
MIN = min(min(EXPGg)); %对增强后的图像进行对比度拉伸增强
MAX = max(max(EXPGg));

去雨结果 matlab 展示

图像去雾去雨去噪处理

图像去雾去雨去噪处理图像去雾去雨去噪处理

图像去雾去雨去噪处理

图像去雾

去雾概述

去雾的理论基础是暗通道先验。在绝大多数非天空的局部区域中,总存在某些像素至少在一个颜色通道上的值很低,即该区域的光强极小。基于此,可定义“暗通道”:对于任意输入图像J,其暗通道用公式表示为:

其中,c表示彩色图像的每个通道,Ω(x)表示以像素x为中心的一个窗口。

计算暗通道图时,先求出每个像素在三个通道的最小值,存成二维矩阵(灰度图),再作最小值滤波。滤波半径由窗口大小决定,窗口大小为……公式表示为:……其中r表示滤波半径。

暗通道先验的成立原因,论文给出了几项合理解释:

  • 汽车、建筑物、城市玻璃窗户的阴影,或树叶、树与岩石等自然景观的投影;
  • 色彩鲜艳的物体或表面——如绿色草地、树、植物,红色或黄色的花朵、叶子,或蓝色水面,它们在RGB三个通道中总有一两个通道的值很低。

去雾代码:

计算雾化图像的暗通道

def DarkChannel(img, size=15):
    """
    暗通道的计算主要分成两个步骤:
    1.获取BGR三个通道的最小值
    2.以一个窗口做MinFilter
    ps.这里窗口大小一般为15(radius为7)
    获取BGR三个通道的最小值就是遍历整个图像,取最小值即可
    """
    r, g, b = cv2.split(img)
    min_img = cv2.min(r, cv2.min(g, b))
    kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (size, size))
    dc_img = cv2.erode(min_img, kernel)
    return dc_img

估算全局大气光值

def GetAtmo(img, percent=0.001):
    """
    1.计算有雾图像的暗通道
    2.用一个Node的结构记录暗通道图像每个像素的位置和大小,放入list中
    3.对list进行降序排序
    4.按暗通道亮度前0.1%(用percent参数指定百分比)的位置,在原始有雾图像中查找最大光强值
    """
    mean_perpix = np.mean(img, axis=2).reshape(-1)
    mean_topper = mean_perpix[:int(img.shape[0] * img.shape[1] * percent)]
    return np.mean(mean_topper)

估算透射率图

def GetTrans(img, atom, w):
    """
    w为去雾程度,一般取0.95
    w的值越小,去雾效果越不明显
    """
    x = img / atom
    t = 1 - w * DarkChannel(x, 15)
    return t
    
def GuidedFilter(p, i, r, e):
    """
    :param p: input image
    :param i: guidance image
    :param r: radius
    :param e: regularization
    :return: filtering output q
    """
    # 1
    mean_I = cv2.boxFilter(i, cv2.CV_64F, (r, r))
    mean_p = cv2.boxFilter(p, cv2.CV_64F, (r, r))
    corr_I = cv2.boxFilter(i * i, cv2.CV_64F, (r, r))
    corr_Ip = cv2.boxFilter(i * p, cv2.CV_64F, (r, r))
    # 2
    var_I = corr_I - mean_I * mean_I
    cov_Ip = corr_Ip - mean_I * mean_p
    # 3
    a = cov_Ip / (var_I + e)
    b = mean_p - a * mean_I
    # 4
    mean_a = cv2.boxFilter(a, cv2.CV_64F, (r, r))
    mean_b = cv2.boxFilter(b, cv2.CV_64F, (r, r))
    # 5
    q = mean_a * i + mean_b
    return q

同样的代码也有python版本。

去雾结果 matlab GUI交互展示:

图像去雾去雨去噪处理

图像去雾去雨去噪处理

结论

本文所提算法是整体流程中的一环,核心目标是为目标检测及其他应用奠定基础。通过将该算法与经典算法进行验证对比,结果表明,在极端环境下,该目标检测与测距方法具有较好的有效性和可行性。经处理的图像送入目标检测和测距模型后,精度明显提升,从而为自动驾驶的主动安全行为决策提供必要的技术支持,也使自动驾驶汽车在极端环境下的运行成为可行。

图像去雾去雨去噪处理

侠游戏发布此文仅为了传递信息,不代表侠游戏网站认同其观点或证实其描述

热游推荐

更多
湘ICP备14008430号-1 湘公网安备 43070302000280号
All Rights Reserved
本站为非盈利网站,不接受任何广告。本站所有软件,都由网友
上传,如有侵犯你的版权,请发邮件给xiayx666@163.com
抵制不良色情、反动、暴力游戏。注意自我保护,谨防受骗上当。
适度游戏益脑,沉迷游戏伤身。合理安排时间,享受健康生活。