图像去雨(rainy streaks removal)#(代码+毕设)

简介: 图像去雨(rainy streaks removal)#(代码+毕设)

本文主要讲述自己所作图像去雨项目

由于雨水对光线的高反射,雨水在图像中通常被成像为明亮的条纹,进而会影响图像的视觉质量。摄影师可以调整曝光时间和景深这些参数来限制拍摄到雨线。然而,这种方法只能在很小程度上避免雨纹,并且不适用雨车载摄像头使用。因此,对于大多数采集到的雨图像来说,找到一种算法来去除图片中的雨纹是必要的。本节将采取主成分分析法对雨条纹进行特征描述和细化处理,通过中值滤波将雨线与之邻近的无雨背景层进行映射来恢复图像。

本人已做项目如下,其他代码需求也可以联系哦!资源大把! 好了废话不多说,开讲去雨项目!

7c1e4ea3151ba1774f6390e705c6f1c7_bedf7ce67de64d1ea3716fb96bc3161d.png


1.效果展示


雨线原图

709d7743e860441894f9ac17637268d5.jpeg


去雨后效果图

d3a33e4fc5a04ff2aad740bb0d8213fc.jpeg


2.采用方法


下图为区域过程图片。

雨图可以表示为:I=B+R

I为雨图,B为背景层,R为雨层


2.1.去雨过程


为了得到良好的去雨图像,当务之急是要使得雨图像的低频背景层和高频线特征层分离。首先,Wan发现雨滴通常对光线有很强的反射,所以它们的像素强度明显比背景像素大,利用该理论得到了粗糙的二值图像 M,并把高频雨线成分视为 1 值,背景层视为 0 值。这种方法可以粗略提取出雨图像的高频信息,把一些无关紧要的信息进行忽略。

398b8ff475b94cc6bed6cb16f12b7d83.png

然而,二值图像 M 包括了高频细节信息和雨线信息,需要进一步的将高频雨线与高频细节层分离。本文采用主成分分析法,对图像 M 中的连通区域进行分析来获取细化的二值图像 Mf,如图 1©所示。所谓连通区域是指图像中具有相同的像素值,而且彼此位置相邻的前景像素点所构成的图像区域。针对二值图像 M来说,前景像素点即为图像中白色区域,通过把每个单独区域的特征进行分析可以进一步的优化二值图像。


2.2 去雨重点


进行连通区域求取之前,需要确定雨线特征,对特征进行阈值划分来达到将二值图像 M 中的高频雨线与高频细节分离的效果。一般来说,雨线在图像中的分布比较均匀且形状大体固定。因此可以将雨线进行特征描述,具体的见图 中的局部放大图,本文把图像中雨线特征描述为长为 L,宽为 W,倾斜角为 β 的红色椭圆区域。根据长宽比、长、倾斜角的定义,进一步的遍历 图中各个独立的连通区域,求取连通区域长宽比、倾斜角、长度的情况。通过得到的长、宽、倾斜角度与设定的雨线特征阈值的比较,可以判断出连通区域是否属于雨线部分,进而可以将其分离主要采用引导滤波和主成分分析 以及神经网络进行雨线的去除,将无雨图像作为目标标签进行训练。


2.3 雨特征提取


8645b5c465de5f6a786f5b1b7f10abea_b9af952e37c54d88aa25f6c54e3b437c.png


代码如下

ef pre_mark(I,b,g,r):
    w1=w2=7
    K_Left_Up = np.zeros((2*w1-1, 2*w2-1))
    K_Right_Up = np.zeros((2*w1-1, 2*w2-1))
    K_Center = 1/(w1*w2)*np.ones((w1, w2))
    K_Left_Down =np.zeros((2*w1-1, 2*w2-1))
    K_Right_Down = np.zeros((2*w1-1, 2*w2-1))
    K_Left_Up[0:w1, 0:w2] = 1/(w1*w2)*np.ones((w1, w2))
    # print(K_Left_Up.shape)
    K_Right_Up[0:w1,w2-1:2*w2] = 1/(w1*w2)*np.ones((w1, w2))
    # print(K_Right_Up)
    K_Left_Down[w1-1:2*w1, 0:w2] = 1/(w1*w2)*np.ones((w1, w2))
    K_Right_Down[w1-1:2*w1, w2-1:2*w2] = 1/(w1*w2)*np.ones((w1xiaog, w2))
    #LU
    b1=scipy.ndimage.filters.convolve(b, K_Left_Up, mode='nearest')
    g1=scipy.ndimage.filters.convolve(g, K_Left_Up, mode='nearest')
    r1=scipy.ndimage.filters.convolve(r, K_Left_Up, mode='nearest')
    I_LU=cv2.merge((b1,g1,r1))在这里插入代码片
    #RU
    b2=scipy.ndimage.filters.convolve(b, K_Right_Up, mode='nearest')
    g2=scipy.ndimage.filters.convolve(g, K_Right_Up, mode='nearest')
    r2=scipy.ndimage.filters.convolve(r, K_Right_Up, mode='nearest')
    I_RU=cv2.merge((b2,g2,r2))
    #C
    b3=scipy.ndimage.filters.convolve(b, K_Center, mode='nearest')
    g3=scipy.ndimage.filters.convolve(g, K_Center, mode='nearest')
    r3=scipy.ndimage.filters.convolve(r, K_Center, mode='nearest')
    I_C=cv2.merge((b3,g3,r3))
    #LD
    b4=scipy.ndimage.filters.convolve(b, K_Left_Down, mode='nearest')
    g4=scipy.ndimage.filters.convolve(g, K_Left_Down, mode='nearest')
    r4=scipy.ndimage.filters.convolve(r, K_Left_Down, mode='nearest')
    I_LD=cv2.merge((b4,g4,r4))
    #RD
    b5=scipy.ndimage.filters.convolve(b, K_Right_Down, mode='nearest')
    g5=scipy.ndimage.filters.convolve(g, K_Right_Down, mode='nearest')
    r5=scipy.ndimage.filters.convolve(r, K_Right_Down, mode='nearest')
    I_RD=cv2.merge((b5,g5,r5))


效果对比图


7566b2caff70660019c2d48f33ad3d5e_6204dd9205914b2981cebed492c33f22.jpeg


同时,在真实数据集参数对比中,本文所提算法依旧拥有良好的表现,,本文所提算法结果在 PSNR 和 SSIM 参数中均高于对比算法。


欢迎被代码困住的 被debug缠身的小伙伴交流解决,视觉相关代码,单目测距,论文撰写,(yolo,presacn,matlab,c++)皆可交流哦------------------------!


相关文章
|
机器学习/深度学习 算法 数据可视化
python/matlab图像去雾/去雨综述
python/matlab图像去雾/去雨综述
|
机器学习/深度学习 人工智能 自然语言处理
视觉 注意力机制——通道注意力、空间注意力、自注意力
本文介绍注意力机制的概念和基本原理,并站在计算机视觉CV角度,进一步介绍通道注意力、空间注意力、混合注意力、自注意力等。
12878 58
|
算法 计算机视觉
图像去雨-雨线清除-图像处理-(计算机作业附代码)
图像去雨-雨线清除-图像处理-(计算机作业附代码)
|
Windows
已解决Win11报错 OSError: [WinError 1455] 页面文件太小,无法完成操作。
Win11报错 OSError: [WinError 1455] 页面文件太小,无法完成操作。 Error loading "D:\aaaa\envs\gs\lib\site-packages\torch\lib\caffe2_detectron_ops_gpu.dll" or one of its dependencies.
9398 0
已解决Win11报错 OSError: [WinError 1455] 页面文件太小,无法完成操作。
|
算法 PyTorch 算法框架/工具
Pytorch学习笔记(九):Pytorch模型的FLOPs、模型参数量等信息输出(torchstat、thop、ptflops、torchsummary)
本文介绍了如何使用torchstat、thop、ptflops和torchsummary等工具来计算Pytorch模型的FLOPs、模型参数量等信息。
2124 2
|
JSON 人工智能 数据格式
AI计算机视觉笔记二十六:YOLOV8自训练关键点检测
本文档详细记录了使用YOLOv8训练关键点检测模型的过程。首先通过清华源安装YOLOv8,并验证安装。接着通过示例权重文件与测试图片`bus.jpg`演示预测流程。为准备训练数据,文档介绍了如何使用`labelme`标注工具进行关键点标注,并提供了一个Python脚本`labelme2yolo.py`将标注结果从JSON格式转换为YOLO所需的TXT格式。随后,通过Jupyter Notebook可视化标注结果确保准确性。最后,文档展示了如何组织数据集目录结构,并提供了训练与测试代码示例,包括配置文件`smoke.yaml`及训练脚本`train.py`,帮助读者完成自定义模型的训练与评估。
3583 2
|
机器学习/深度学习 编解码 监控
目标检测实战(六): 使用YOLOv8完成对图像的目标检测任务(从数据准备到训练测试部署的完整流程)
这篇文章详细介绍了如何使用YOLOv8进行目标检测任务,包括环境搭建、数据准备、模型训练、验证测试以及模型转换等完整流程。
20833 59
目标检测实战(六): 使用YOLOv8完成对图像的目标检测任务(从数据准备到训练测试部署的完整流程)
|
消息中间件 中间件 Kafka
分布式事务最全详解 ,看这篇就够了!
本文详解分布式事务的一致性及实战解决方案,包括CAP理论、BASE理论及2PC、TCC、消息队列等常见方案,助你深入理解分布式系统的核心技术。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
分布式事务最全详解 ,看这篇就够了!
|
XML 机器学习/深度学习 数据格式
YOLOv8训练自己的数据集+常用传参说明
YOLOv8训练自己的数据集+常用传参说明
21127 3
|
机器学习/深度学习 PyTorch 算法框架/工具
Pytorch学习笔记(八):nn.ModuleList和nn.Sequential函数详解
PyTorch中的nn.ModuleList和nn.Sequential函数,包括它们的语法格式、参数解释和具体代码示例,展示了如何使用这些函数来构建和管理神经网络模型。
2038 1