对图像去雨算法的探究

(整期优先)网络出版时间:2024-02-22
/ 2

对图像去雨算法的探究

吴奇航 杨堃桢

广东海洋大学 广东 湛江 524000

摘要:本次课题的目的,是对现在主流的图像去雨算法进行一个对比,并通过对比,通过具体的案例,来分析出不同的算法间的优略。在本次课题中,主要对两个算法进行,分别是基于滤波去雨算法和暗通道先验算法去雨。对于基于滤波去雨算法和暗通道先验算法去雨的优略而言,基于滤波去雨算法更加适合雨水相较不那么密集的图像,面对雨水密集的图像时,它处理的结果一般。但它算法简单,易于实现;对于暗通道先验算法去雨而言,它对于雨水是否密集无太大的要求,都能有较好的效果,缺点在于运算量较大,且需要构建不少函数来支撑算法的实现,最后的结果如果不进行图像融合,呈现出灰色的图像。对于它们二者的结果,用MATLAB进行了复现。

关键词:基于滤波去雨算法 暗通道先验算   MATLAB

  1.   背景的介绍与目的

我们在室外进行拍照的时候,我们难免会遇到雨天的情况,而在雨天里拍照可能会造成图像的模糊不清,影响到了画面的画质,进而影响到观者的体验。

所以,本次课题的目的,在于对图像进行去雨,从而达到让画质更加清晰的目的,为此我准备了几种不同去雨方法的比较,在最后,我也会对去雨的方法进行一个评估,并给出相关实际处理效果。

  1.   几种不同去雨算法与比较

2.1 . 基于滤波的去雨算法

  基于滤波的去雨算法就是通过对图像进行滤波操作,去除雨滴造成的模糊和噪声。滤波方法包括均值滤波、中值滤波等。以达到去除雨滴的高频噪声,平滑图像的目的。

  具体的步骤如下:

  1. 雨滴检测:首先,需要检测图像中的雨滴。可以通过使用边缘检测算法实现。边缘检测算法可以帮助找到图像中的雨滴边缘,从而进行后续的处理。
  2. 模糊估计:在检测完雨滴后,需要进行模糊估计,而模糊估计需要估计雨滴的半径,轨迹等参数,而这需要计算机大概的估计。然后,可以确定需要使用的滤波器等。
  3. 滤波处理:根据模糊估计的结果,选择适当的滤波器进行处理。在本次课题中,使用中值滤波进行处理。
  4. 雨滴修复:在滤波处理后,可以尝试对图像中的雨滴进行修复。这可以通过使用图像修复算法来实现,例如基于纹理合成的方法或者基于纹理合成的方法。修复算法可以根据图像的上下文信息,尽可能地恢复雨滴遮挡的图像内容。
  5. 结果融合:最后,将滤波处理后的图像和修复后的图像进行融合,得到最终的去雨图像。

2.2. 暗通道先验算法去雨

  暗通道先验算法是一种用于图像去雨、去雾等任务的图像处理算法。该算法基于一个观察结果,即在户外的无雨、无雾图像中,大部分非天空区域至少有一个通道的像素值非常低,接近于零。根据这个观察,暗通道先验算法利用图像的暗通道信息来估计图像中的大气光强度和透射率,从而实现去雨、去雾等效果。

  暗通道先验算法的具体步骤如下:

  1. 读取有雨的图像:通常我们会使用 imread函数读取待处理的有雨图像。需提前把图片与MATLAB文件放在一起。
  2. 计算暗通道图像:将彩色图像转换为暗通道图像。暗通道图像即指在每个像素位置上,选择原始彩色图像的三个通道中的最小值作为该位置的像素值。
  3. 平滑暗通道图像:使用最小值滤波器对暗通道图像进行平滑处理。最小值滤波器可以通过对图像的每个像素位置应用一个窗口来选择窗口内的最小值,从而平滑图像。
  4. 估计大气光强:根据暗通道图像的统计特性,估计图像中的大气光强度。选择暗通道图像中亮度较高的像素作为大气光强度的估计值。
  5. 估计透射率:根据暗通道先验,计算图像中每个像素位置的透射率。透射率表示光线在通过雨滴时的衰减程度。透射率的计算公式为:transmission = 1 - omega * smoothed_dark_channel / atmospheric_light,其中omega是一个参数,smoothed_dark_channel是平滑后的暗通道图像,atmospheric_light是估计的大气光强度。
  6. 修复图像:根据估计的大气光强度和透射率,对原始彩色图像进行修复。修复图像的计算公式为:recovered_image = (I - atmospheric_light) ./ max(transmission, epsilon) + atmospheric_light,其中I是原始彩色图像,epsilon是一个小常数,用于防止除零错误。
  7. 显示结果:使用 imshow函数,分别显示原始图像和去雨后的图像。
  1.   几种不同去雨算法的实现与结果

3.1 . 基于滤波的去雨算法的实现

  1. 首先是无法使用的inpaintExemplar函数,所以替换为使用输入图像作为修复后的图像其他部分保持不变。
  2. 在解决了这个问题后,又发现了一个错误,即"整数只能与同类的整数或双精度标量值组合使用",这个错误通常是由于整数与其他类型的数据进行了加法操作导致的。在matlab中,整数只能与同类型的整数或双精度标量值进行运算。
  3. 要解决这个错误,需要将整数转换为双精度标量值,然后再进行加法操作。
  4. 在修复图像之前,将输入图像转换为双精度标量值double(inputImage)。在结果融合时,将滤波处理后的图像filteredImage和修复后的图像repairedImage都转换为双精度标量值double(),然后再进行加法操作。最后,使用uint8()函数将最终的图像转换回无符号8位整数类型,以便正确显示。

3.2. 暗通道先验去雨算法的实现

  1. 算法里,还需要构建很多不同的函数,首先是计算暗通道三个通道中的最小值,用min(im, [], 3)计算得出。
  2. 然后就是构造透射率的相关函数,这个问题还需要一定的物理知识,在查阅了相关资料后,得出了现在的公式。
  3. 再后,就是估计大气光强,选择暗通道图像中亮度较高的像素作为大气光强度的估计值。
  4. 在然后就是构造去雨的函数,其中的原理,是根据透射率和大气光照,对原始图像进行去雨处理
  5. 最后,把相关构造好的函数,命名为“函数名.m”方便后续对函数的调用。
  6. 最终,引入相关的图像,然后调用函数。
  1.   总结

算法

优点

缺点

基于滤波的去雨算法

  1. 算法简单,易于实现。
  2. 对于轻度雨滴遮挡的图像效果较好。
  1. 对于强烈的雨滴遮挡效果不佳,可能无法完全去除雨滴的影响。
  2. 在处理复杂场景或大面积雨滴遮挡时,可能会产生伪影或失真。

暗通道先验去雨算法

  1. 对于不同程度的雨滴遮挡效果都有较好的去雨效果。
  2. 在处理复杂场景或大面积雨滴遮挡时,能够更好地保留图像细节。
  1. 对于亮度较低的图像或存在强烈光照变化的图像,可能会产生伪影或失真。
  2. 算法的计算复杂度较高,处理时间较长。

就结果而言,基于滤波的去雨算法表现的效果一般,无法能够有效的去除掉大部分的雨。而对于暗通道先验去雨算法来说,虽然选取的图片雨水比较密集,但它还是可以较好的实现了去雨的效果,虽然图像不再是彩色的,但去雨的目的也达到了。

参考文献:

[1]王金山, 刘文彬, 李红, 等. 基于暗通道先验的单幅图像去雾算法[J]. 中国图象图形学报, 2009, 14(7): 1199-1206.

[2]何恺明, 周博, 董志, 等. 基于深度学习的单幅图像去雾方法[J]. 计算机学报, 2016, 39(10): 2094-2104.

[3]李宇, 谭锐. 基于深度学习的实时单幅图像去雨算法[J]. 模式识别, 2017, 71: 1-12.