使用深度学习进行图像去噪

简介: 使用深度学习进行图像去噪

图像去噪是研究人员几十年来试图解决的一个经典问题。在早期,研究人员使用滤波器器来减少图像中的噪声。它们曾经在噪音水平合理的图像中工作得相当好。然而,应用这些滤镜会使图像模糊。如果图像太过嘈杂,那么合成的图像会非常模糊,图像中的大部分关键细节都会丢失。

使用深度学习架构会更好的解决这个问题。目前看深度学习远远超过了传统的去噪滤波器。在这篇文章中,我将使用一个案例来逐步解释几种方法,从问题的形成到实现最先进的深度学习模型,然后最终看到结果。

内容摘要

  • 图像中的噪声是什么?
  • 问题表述
  • 机器学习问题提法
  • 数据来源
  • 探索性数据分析
  • 图像去噪的传统滤波器概述
  • 用于图像去噪的深度学习模型
  • 结果比较
  • 未来的工作和改进的范围
  • 参考文献

图像中的噪点是什么?

图像噪声是所捕获图像中亮度或颜色信息的随机变化。 这是由外部源引起的图像信号劣化。 从数学上讲,图像中的噪点可以表示为

A(x,y)= B(x,y)+ H(x,y)

其中

A(x,y)=噪声图像的函数; B(x,y)=原始图像的函数; H(x,y)=噪声的函数;

问题表述

传统的图像降噪算法始终假定噪声是均匀的高斯分布。但是,实际上,真实图像上的噪点可能要复杂得多。真实图像上的这种噪声称为真实噪声或盲噪声。传统的滤波器无法在具有此类噪点的图像上表现良好。

所以问题的表述变成了:我们如何去噪包含盲噪声的图像?

我们的目的是用盲噪声对彩色图像进行去噪,没有延迟的限制,因为我想对图像进行降噪处理,使其尽可能接近真实值实况,即使它花费了合理的时间

盲去噪是指在去噪过程中,用于去噪的基础是从有噪声的样本本身学习来的。换句话说,无论我们构建什么样的深度学习体系结构,都应该学习图像中的噪声分布并去噪。所以和往常一样,这都取决于我们提供给深度学习模型的数据类型。

机器学习问题提法

首先,让我们考虑一下RGB图像的格式。 一个图像的3个颜色通道

image.jpeg

任何RGB图像对于每个像素都有三个颜色通道——红、绿、蓝。

现在,每种颜色都由一个范围为0-255的8位数字表示。任何图像都可以用一个三维矩阵来表示。


image.jpeg

对于一个有噪声的图像。

tt.png

我们在前面的章节中看到,噪声是像素的随机变化。换句话说,图像中3个通道的一些像素数值被破坏了。为了恢复图像的原始形式,我们需要纠正那些损坏的像素值。

我们可以把这看作是一个监督学习回归问题,在这个问题中我们预测被损坏像素的真实值[0-255范围内的数字]。

我将使用的损失是MSE(均方误差)。分数越低越好。

image.jpeg

对于绩效评估,我会使用两个指标,分数越高越好

  • PSNR (Peak Signal to Noise Ratio) 峰值信噪比
  • SSIM (Structural Similarity Index Measure) 结构相似性

数据来源

由于这是一个监督学习问题,我们需要一对有噪声的图像(x)和ground truth图像(y)。

我从三个方面收集了这些数据。

SIDD -包含160对来[噪声-真值]图像

RENOIR -包含80对[嘈杂的-真值]图像

NIND -包含62对[噪声-真值]图像

探索性数据分析

元数据分析

image.jpeg

我们可以看到,大部分照片是在iPhone 7上被拍摄的,其次是三星S6和谷歌Pixel。LG G4的照片数量最少。

image.jpeg

数据集中总共使用了14个唯一的ISO级别设置。大多数照片都是在低ISO设置下点击的。最常用的ISO设置是100和800,然后是1600,400和3200。曝光越高,图像就越亮,反之亦然。

image.jpeg

大多数照片是在100快门速度下拍摄的,其次是400和800快门。快门速度越快,图像就越暗,反之亦然。

image.jpeg

大多数照片是在普通亮度模式下点击的,其次是低亮度模式。三星S6在高亮度下只点击了2张照片。

image.jpeg

我们可以看到每一部手机都有自己的图像分辨率。每一部手机都以相同的分辨率拍摄照片。

image.jpeg

可以看出,大部分的平均像素值处于较低到中值(较暗到中亮度的图像)。只有少数是非常高的价值(明亮的图像)。你也可以看到在噪声图像中的一些平均值与真实图像有差异。这种差异在较高像素值时更容易看到。

image.jpeg

可以观察到,与原始图像相比,噪声图像具有像素强度的平滑分布。 产生这样的原因是,每当图像中有噪点时,相机便无法捕获这些像素的颜色信息(由于各种原因),因此,在这些像素中填充“无颜色”(大部分是 通过相机软件填充一些随机值。 由于这些随机值(噪声),像素值变得平滑了。

传统图像去噪滤波器概述

传统上,研究人员想出了滤波器器来对图像进行降噪。大多数滤波器器特定于图像所具有的噪声类型。有几种类型的噪声,例如高斯噪声,泊松噪声,斑点噪声,椒盐(脉冲)噪声等。每种类型的噪声都有特定的滤波器。因此,使用传统滤波器对图像进行降噪的第一步是识别图像中存在的噪声类型。确定后,我们可以继续应用特定的滤波器器。为了识别噪声的类型,有一些数学公式可以帮助我们猜测噪声的类型。否则,领域专家可以仅通过查看图像来决定。还有一些滤波器可以处理任何类型的噪声。

有大量的滤波器可用于对图像进行降噪。每个人都有其优点和缺点。在这里,我将讨论非局部均值(NLM)算法,该算法被认为可以很好地对图像进行去噪。

NLM的公式,

image.jpeg

该算法将像素的估计值计算为图像中所有像素的加权平均值,但是权重族取决于像素i和j之间的相似度。 换句话说,它查看一个图像块,然后识别整个图像中的其他相似块,并对它们进行加权平均。 要了解这一点,请考虑以下图像,

image.jpeg

相似的色块用相同颜色的方框标记。 因此,现在,它将相似补丁的像素的加权平均值作为目标像素的估计值。 该算法将色块大小和色块距离作为输入。

考虑以下使用NLM滤镜去噪的灰度图像。

image.jpeg

您可以看到NLM在图像去噪方面做得不错。 如果仔细观察,将会发现去噪图像略有模糊。 这是由于应用于任何数据的均值将使值平滑。

但是,当噪声水平太高时,NLM无法提供良好的结果。 考虑以下图像,该图像已使用NLM滤波器进行了去噪。

image.jpeg

可以清楚地看到,去噪后的图像太模糊了,大部分关键细节都丢失了。例如,观察蓝色卡车的橙色前灯。

用于图像去噪的深度学习模型

随着深度学习技术的出现,现在可以从图像中去除盲目的噪声,这样的结果非常接近于真实图像的细节损失最小。

已经实现了三个深度学习架构,

REDNet、MWCNN、PRIDNet

REDNet -Residual Encoder-Decoder Networks

这是一个基于CNN的跳过连接的自动编码器架构。体系结构如下:

image.jpeg

在这里,我用了5层卷积的编码器和5层反卷积的解码器。这是一个非常简单的体系结构,我将其作为基准。

input_0 = Input(shape=(256,256,3), name="input_layer")
conv_layer_1 = Conv2D(filters=256, kernel_size=2, padding='same', name="conv_1")(input_0)
conv_layer_2 = Conv2D(filters=256, kernel_size=2, padding='same', name="conv_2")(conv_layer_1)
conv_layer_3 = Conv2D(filters=256, kernel_size=3, padding='same', name="conv_3")(conv_layer_2)
conv_layer_4 = Conv2D(filters=256, kernel_size=3, padding='same', name="conv_4")(conv_layer_3)
conv_layer_5 = Conv2D(filters=128, kernel_size=3, padding='same', name="conv_5")(conv_layer_4)
deconv_layer_5 = Conv2DTranspose(filters=256, kernel_size=2, padding='same', name="deconv_5")(conv_layer_5)
deconv_layer_5 = Add(name="add_1")([conv_layer_4, deconv_layer_5])
deconv_layer_4 = Conv2DTranspose(filters=256, kernel_size=2, padding='same', name="deconv_4")(deconv_layer_5)
deconv_layer_3 = Conv2DTranspose(filters=256, kernel_size=3, padding='same', name="deconv_3")(deconv_layer_4)
deconv_layer_3 = Add(name="add_2")([conv_layer_2, deconv_layer_3])
deconv_layer_2 = Conv2DTranspose(filters=128, kernel_size=3, padding='same', name="deconv_2")(deconv_layer_3)
deconv_layer_1 = Conv2DTranspose(filters=3, kernel_size=3, padding='same', name="deconv_1")(deconv_layer_2)
out = Add(name="add_3")([input_0, deconv_layer_1])
model = Model(inputs=[input_0], outputs=[out])



目录
相关文章
|
2月前
|
机器学习/深度学习 监控 算法
深度学习之图像去噪与去模糊
基于深度学习的图像去噪和去模糊是计算机视觉中的重要任务,旨在提升图像质量,去除噪声和模糊。
165 3
|
机器学习/深度学习
使用深度学习进行图像去噪(三)
使用深度学习进行图像去噪
845 0
使用深度学习进行图像去噪(三)
|
机器学习/深度学习 存储 算法
使用深度学习进行图像去噪(二)
使用深度学习进行图像去噪
531 0
使用深度学习进行图像去噪(二)
|
机器学习/深度学习 编解码 算法
使用深度学习进行图像去噪(一)
使用深度学习进行图像去噪
669 0
使用深度学习进行图像去噪(一)
|
11天前
|
机器学习/深度学习 数据采集 人工智能
AI赋能教育:深度学习在个性化学习系统中的应用
【10月更文挑战第26天】随着人工智能的发展,深度学习技术正逐步应用于教育领域,特别是个性化学习系统中。通过分析学生的学习数据,深度学习模型能够精准预测学生的学习表现,并为其推荐合适的学习资源和规划学习路径,从而提供更加高效、有趣和个性化的学习体验。
61 9
|
8天前
|
机器学习/深度学习 人工智能 监控
深度学习在图像识别中的应用与挑战
本文探讨了深度学习技术在图像识别领域的应用,并分析了当前面临的主要挑战。随着卷积神经网络(CNN)的发展,图像识别的准确性和效率得到了显著提升。然而,数据不平衡、模型泛化能力、计算资源消耗等问题仍然是制约深度学习在图像识别领域进一步发展的关键因素。本文将详细介绍深度学习在图像识别中的应用案例,并讨论解决现有挑战的可能策略。
|
2天前
|
机器学习/深度学习 人工智能 测试技术
深度学习在图像识别中的应用与挑战
本文探讨了深度学习技术,尤其是卷积神经网络(CNN)在图像识别任务中的最新进展和面临的主要挑战。通过分析不同的网络架构、训练技巧以及优化策略,文章旨在提供一个全面的概览,帮助研究人员和实践者更好地理解和应用这些技术。
22 9
|
1天前
|
机器学习/深度学习 人工智能 算法框架/工具
深度学习中的卷积神经网络(CNN)及其在图像识别中的应用
【10月更文挑战第36天】探索卷积神经网络(CNN)的神秘面纱,揭示其在图像识别领域的威力。本文将带你了解CNN的核心概念,并通过实际代码示例,展示如何构建和训练一个简单的CNN模型。无论你是深度学习的初学者还是希望深化理解,这篇文章都将为你提供有价值的见解。
|
2天前
|
机器学习/深度学习 算法 数据处理
深度学习在图像识别中的应用与挑战
本文深入探讨了深度学习技术在图像识别领域的应用,分析了其背后的原理、主要算法以及在实际场景中的应用效果。同时,文章也指出了当前深度学习在图像识别领域面临的挑战,包括数据不平衡、模型泛化能力、计算资源需求等问题,并展望了未来的研究方向。
|
1天前
|
机器学习/深度学习 人工智能 自动驾驶
深度学习中的图像识别技术及其应用
【10月更文挑战第36天】在当今科技飞速发展的时代,深度学习已成为人工智能领域的一颗璀璨明珠。本文将深入探讨深度学习在图像识别方面的技术原理和应用实例,旨在为读者提供一个全面而深入的了解。我们将从基础理论出发,逐步揭示深度学习如何革新了我们对图像数据的处理和理解方式。
下一篇
无影云桌面