图像去雨(rainy streaks removal)#(代码+教程)

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

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

在这里插入图片描述

1.效果展示

雨线原图在这里插入图片描述
去雨后效果图
在这里插入图片描述

2.采用方法

下图为区域过程图片。
雨图可以表示为:I=B+R
I为雨图,B为背景层,R为雨层

2.1.去雨过程

为了得到良好的去雨图像,当务之急是要使得雨图像的低频背景层和高频线特征层分离。首先,Wan发现雨滴通常对光线有很强的反射,所以它们的像素强度明显比背景像素大,利用该理论得到了粗糙的二值图像 M,并把高频雨线成分视为 1 值,背景层视为 0 值。这种方法可以粗略提取出雨图像的高频信息,把一些无关紧要的信息进行忽略。
在这里插入图片描述
然而,二值图像 M 包括了高频细节信息和雨线信息,需要进一步的将高频雨线与高频细节层分离。本文采用主成分分析法,对图像 M 中的连通区域进行分析来获取细化的二值图像 Mf,如图 1©所示。所谓连通区域是指图像中具有相同的像素值,而且彼此位置相邻的前景像素点所构成的图像区域。针对二值图像 M来说,前景像素点即为图像中白色区域,通过把每个单独区域的特征进行分析可以进一步的优化二值图像

2.2 去雨重点

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

2.3 雨特征提取

在这里插入图片描述

代码如下

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


效果对比图

在这里插入图片描述
在这里插入图片描述

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

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

评论 55
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿利同学

一角两角不嫌少

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值