首页 > 编程语言 >图像去雾+图像去雨(matlab+python)

图像去雾+图像去雨(matlab+python)

时间:2024-11-07 21:17:02浏览次数:3  
标签:img python cv2 M1 matlab 图像 N1 mean

看到许多小伙伴想进行图像去雨,图像去雾的任务,由于以前进行了此类项目,所以在此书写博客进行交流。

# 去雨前言

从静止图像中去除雨水是一项复杂且具有挑战性的任务。雨滴仅影响图像的很小区域,因此导致确定应考虑哪个区域和不应考虑哪个区域的混乱。在本文中,已经实现了一种新技术,该技术有效地使用L0梯度最小化方法来去除雨像素。

最小化技术可以全局控制图像中产生多少非零梯度。该方法与局部特征无关,而是全局定位重要边缘。保留了这些显着的边缘,并且减少了低振幅和微不足道的细节。以这种方式去除雨像素。最后,使用直方图调整技术增强了雨水去除的图像的强度,以获得更好的对比度图像。实验结果表明,该算法在去除图像去雨方面有良好的效果。

# 算法流程

img

添加图片注释,不超过 140 字(可选)

# 去雨代码部分

`matlab
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));
EXPGg = (EXPGg-MIN)/(MAX-MIN); EXPGg=adapthisteq(EXPGg);
B=I(:,:,3);  %取输入图像的B分量
[N1,M1]=size(B);
B0=double(B);  %对B分量进行数据转换,并对其取对数
Blog=log(B0+1);
Bfft2=fft2(B0);  %对B分量进行二维傅里叶变换
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

# 去雨结果 matlab 展示

img

各去雨算法对比

img

去雨前

img

去雨后

# 图像去雾

# 去雾概述

**暗通道先验:首先说在绝大多数非天空的局部区域里,某一些像素总会有至少一个颜色通道具有很低的值,也就是说该区域光强是一个很小的值。所以给暗通道下了个数学定义,对于任何输入的图像J,其暗通道可以用下面的公式来表示:图片其中表示彩色图像每个通道,表示以像素X为中心的一个窗口。要求暗通道的图像是比较容易的,先求出每个像素在3个通道的最小值,存到一个二维Mat中(灰度图),然后做一个最小值滤波,滤波的半径由窗口大小决定,这里窗口大小为,公式表示为,其中表示滤波半径。

图片暗通道先验理论得出的结论,这个我不知道如何证明,不过论文给出了几个原因:

a)汽车、建筑物和城市中玻璃窗户的阴影,或者是树叶、树与岩石等自然景观的投影;

b)色彩鲜艳的物体或表面,在RGB的三个通道中有些通道的值很低(比如绿色的草地/树/植物,红色或黄色的花朵/叶子,或者蓝色的水面);**;

# 去雾代码:

# 计算雾化图像的暗通道

```python
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
```

 
 
# 估算全局大气光值

```python
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)
```

 
 
# 估算透射率图

```python
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
```

# 去雾结果 matlab GUI交互展示:

img

添加图片注释,不超过 140 字(可选)

img

添加图片注释,不超过 140 字(可选)

# 结论

本文只是众多流程的一部分,为目标检测 和其他应用奠定举出。

**通过将所提算法与经典算法进行验证对比,结果表明本文极端环境下的目标检测与测距方法具有良好的有效性和可行性。

将处理后的图像输送到目标检测和测距模型,提高了目标检测和测距精度,为自动驾驶主动安全行为决策提供必要的技术支持,使得自动驾驶汽车应用在极端环境变得可行。**

若果觉得有用的话,请帮忙点赞,也可以私信交流。

可选)

# 结论

本文只是众多流程的一部分,为目标检测 和其他应用奠定举出。

**通过将所提算法与经典算法进行验证对比,结果表明本文极端环境下的目标检测与测距方法具有良好的有效性和可行性。

将处理后的图像输送到目标检测和测距模型,提高了目标检测和测距精度,为自动驾驶主动安全行为决策提供必要的技术支持,使得自动驾驶汽车应用在极端环境变得可行。**

若果觉得有用的话,请帮忙点赞,也可以私信交流。

代码获取:可私信!

标签:img,python,cv2,M1,matlab,图像,N1,mean
From: https://blog.csdn.net/QQ_1309399183/article/details/143494939

相关文章

  • 免费送源码:python+Django+MySQL Django实验室管理系统 计算机毕业设计原创定制
    摘 要本论文主要论述了如何使用python语言、Django框架开发一个实验室管理系统,本系统将严格按照软件开发流程,进行各个阶段的工作,面向对象编程思想进行项目开发。在引言中,作者将论述该系统的当前背景以及系统开发的目的,后续章节将严格按照软件开发流程,对系统进行各个阶段分......
  • 使用python中的pygame简单实现飞机大战游戏
    前言在这个教程中,我们将使用Python的Pygame库来开发一个简单的飞机大战游戏。Pygame是一个开源的Python库,用于编写视频游戏。它包括计算机图形和声音库,设计目的是为游戏开发者提供一个简单易用的接口。一、环境准备在开始编码之前,请确保已经安装了Python和Pyga......
  • 三十四、Python基础语法(文件操作-上)
    一、介绍文件:可以储存在长期储存设备上的一段数据,在计算机储存的数据都是二进制的形式储存的,我们用软件打开文件不是看见0和1是因为软件会自动将二进制数据进行转换。二、文件操作1.打开文件打开文件:文件是在硬盘中储存的,打开文件可以理解为将硬盘中文件加载到内存中,在pyth......
  • 三十三、Python基础语法(面向对象其他语法-下)
    一、属性划分1.类属性类属性:类属性就是类对象具有的属性,一般写法在类内部、方法的外部定义的变量,就是类属性,类属性在内存中只有一份。可以通过类名直接访问,也可通过实例访问。classCircle:#类属性,定义圆周率pi=3.14159def__init__(self,radius):......
  • 三十、Python基础语法(继承-下)
    方法重写重写:在子类中定义和父类中名字相同的方法,如果父类中方法不能满足子类对象的需求,重写的形式有覆盖和扩展一、覆盖式重写classVehicle:defmove(self):print("Thevehicleismovinginageneralway.")classCar(Vehicle):#重写move方法......
  • 终于弄懂了Python中元组与列表的区别
    列表与元组的区别在Python编程中,列表和元组是两种非常重要的数据结构。尽管它们在许多方面具有相似性(如都可以存储任意类型的元素、都可以通过索引访问元素等),但在使用上仍有明显的区别。理解它们的不同点对于选择合适的数据结构、提高程序的性能和代码的可读性都有重要帮助......
  • 使用AMD GPU进行图像分类的ResNet模型
    ResNetforimageclassificationusingAMDGPUs—ROCmBlogs2024年4月9日,作者:LoganGrado。在这篇博客中,我们演示了如何使用ROCm在AMDGPU上训练一个简单的ResNet模型来进行CIFAR10数据集的图像分类。在AMDGPU上训练ResNet模型非常简单,仅需安装ROCm和适当的PyTorch库,无......
  • 【PDF提取神器】最新推出的PymuPDF4llm库 可提取pdf中的文字/表格/图像/单词
    目录前言安装Pymupdf4llm多模态具体应用API文档前言PymuPDF4llm是最新推出的pdf提取工具,针对LLM进行了专门优化,它支持markdown提取和LlamaIndex文档输出,可以准确提取pdf中的结构化数据,包括文字/表格/图像/单词,其中文字以markdown的形式提取,图像则以路径的形式插入到文......
  • 顶会新热门:小波变换×Transformer,效率翻倍的AI图像去噪神奇组合
    2024深度学习发论文&模型涨点之——小波变换+Transformer 小波变换与Transformer的结合主要探讨如何利用小波变换的多尺度特性来增强Transformer在处理信号和图像数据时的表现。具体来说,小波变换能够有效提取信号中的局部特征,并在时间和频率域上提供信息,这对于处理复杂的......
  • [python turtle summary] Python 海龟画图 函数总结
    Turtle文档导入turtleimportturtleastimportturtlefromturtleimport*Turtle函数方法移动和绘制penup()抬笔pendown()落笔goto(x,y)移动forward(distance)|fd(distance)前进backward(distance)|back(distance)|bk(distance)后退right(angle)|rt(ang......