红外图像增强(2)Brightness-Based Convolutional Neural Network for Thermal Image Enhancement (TIECNN)论文阅读

本文提出一种基于亮度域和残差学习技术的卷积神经网络热图像增强方法TIECNN,该方法通过亮度域引导的残差学习实现快速收敛和高性能,实验结果表明在多个图像质量指标方面优于传统方法。

** 红外图像增强(2)Brightness-Based Convolutional Neural Network for Thermal Image Enhancement (TIECNN)论文阅读**

摘要

本文提出了一种结合亮度域和残差学习技术的卷积神经网络热图像增强方法,提高了增强性能和收敛速度。通常,训练域使用与目标图像相同的域;然而,我们评估了几个域,以确定最适合网络的域。在分析中,我们首先比较了分别由基于颜色和对齐红外图像的相应区域训练的网络的性能,包括热光谱、远光谱和近光谱。然后,评估四个基于RGB的区域,即灰度、亮度、强度和亮度。最后,通过考虑残差域和亮度域来确定所提出的网络结构。分析结果表明,亮度域是增强热图像的最佳训练域。实验结果表明,该网络可在约一小时内训练,在多个图像质量指标和定性评估方面优于传统的基于学习的热图像增强方法。此外,结果表明,亮度域作为训练域是有效的,可以用来提高现有网络的性能。

介绍

精确和高质量(HQ)热红外图像在各种应用中都需要,包括行人检测[1]、[2]、监视[3]、军事[4]、火灾检测[5]、视觉里程计[6]和气体检测[7]。尽管各种计算机视觉技术都是基于RGB摄像机开发的,但它们都面临着挑战性的问题,例如光照和黑暗环境的变化。为了解决灰度或彩色图像中的这些挑战,引入了热图像。热图像在存在照明变化的情况下具有鲁棒性,并且可以利用关于对象的热信息。这是因为热照相机能够在室内和室外环境中使用中波长红外(MWIR)(3–8µm)和长波红外(LWIR)(8–15µm)光谱捕捉温度信息,而不考虑照明或纹理的复杂性。
可用于捕获HQ热图像的热传感器价格昂贵,而低成本的商用热传感器受到低信噪比、模糊和光晕效应的限制,因此难以在实际应用中使用。
为了克服这些挑战,最近提出了许多方法来增强低质量(LQ)热图像。以前,大多数方法都是通过使用空间域和频域[8]来推广的,包括直方图均衡化、对比度调整、变换、经验模式分解等。引入了基于直方图均衡化的方法,通过近似均匀地分布热图像的直方图来增加整体对比度[9],[10]。Shao等人[11]提出了一种基于平台直方图均衡化和离散平稳小波相结合的增强红外图像全局和局部对比度的新方法。Ni等人[12]提出了一种基于小波扩散的红外图像边缘增强和保持算法,同时降低了噪声。Bai等人[13]提出了一种通过采用多尺度新的top-hat变换来增强对比度的方法。文献[8]提出了一种二维经验模态分解方法,首先将热图像分解为若干固有模态函数。然后,对这些函数进行扩展,并在每个分解层次上与残差进行融合。引入了一种变分红外增强技术[14],利用直方图均衡获得的具有自适应双阈值的梯度场均衡技术来增强边缘细节并防止过度增强。Yuan等人[15]提出了一种多方面的方法,通过自适应地操纵图像的对比度、锐度和强度来增强图像对比度和细微图像细节。应该注意的是,这些方法是试探性地设计来调整热信息的,因此不能考虑各种热图像,因此限制了它们的应用。
最近,基于卷积神经网络(CNN)的方法在各种视觉任务中,如目标检测[16]、[17]、图像识别[18]、[19]和超分辨率图像[20]–[22],与以前手工制作的基于特征的方法相比,取得了创纪录的性能。Choi等人[23]提出了第一个基于CNN的增强热图像的方法,他受[20]中建议的启发设计了一个相对较浅的CNN。CNN不仅在增强热图像质量方面取得了成功,而且在验证各种应用中的性能改进方面也取得了成功,包括基于增强热图像的行人检测、视觉里程计和图像配准。
在本文中,我们提出了一种基于残差学习[21]的热图像增强卷积神经网络(TIECNN)1,其动机是[22]。由于输入LQ和输出HQ图像高度相关,因此使用剩余学习仅训练高频分量就足够了。此外,该方法还可以解决消失/爆炸梯度问题[24]。在基于监督学习的CNN中,训练图像的选择显著影响网络的性能。对于超分辨率彩色图像,Dong等人[20]探索了不同通道上的性能,并通过实验证明了网络精度的差异取决于训练域。他们证明了基于Y-only通道(luma)的网络取得了可信的结果。但是,由于luma和热图像之间的距离差异,用于热图像的网络不能由luma通道训练或基于luma通道训练。Choi等人[23]使用不同的数据集比较了基于灰度和MWIR图像的网络性能。尽管他们发现基于灰色的网络比基于MWIR的网络提供更好的性能,但我们认为他们的比较是不公平的,因为他们使用的数据集包含完全不同的场景和模式。例如,他们用于灰色网络的数据集[25]已广泛用于各种CNN方法[20]–[23],[26],而长波红外数据集[27]则没有。由于在训练过程中学习较差的参数,这种差异可能会导致有偏差的结果。
因此,为了确保公平比较,我们研究了将每个网络训练到同一数据集中相应的彩色和对齐红外图像区域的结果。此外,我们在相同的实验条件下评估了四个域的性能,这四个域从彩色图像转换而来,然后应用于热图像。我们通过实证验证了基于亮度域的网络比其他域网络具有更好的性能,这也适用于现有网络。
总之,在所提出的网络中,通过对LQ热图像进行像素级相加作为输入,并将基于亮度的残差作为输出,生成HQ热图像。实验结果表明,我们提出的网络优于传统的基于学习的方法,通过各种图像质量度量来衡量:1)全参考质量评估:峰值信噪比(PSNR)、结构相似性(SSIM)[28]和信息保真度标准(IFC)[29];无参考质量评估:自然度图像质量评估器(NIQE)[30],无参考感知模糊度量(NPBM)[31],轮廓体积(CV)[32]和均匀强度分布(UID)[32]。
本文的贡献如下。首先,据我们所知,我们的方法是首次尝试设计使用亮度域训练的残差学习CNN来增强热图像,这提高了收敛速度和增强性能。
其次,我们研究了几个公共热数据集,以收集高质量的热图像,并在考虑各种环境和情况的同时,利用这些图像评估我们网络的一般性能。第三,我们比较了各种域作为训练数据的性能,并通过两项实验研究验证了基于亮度域的网络达到了最佳精度,即:1)评估由灰度和对齐IR(热、远或近)的相应区域训练的网络同一数据集中的图像对;以及2)使用可从RGB图像转换到热图像范围的四个训练域(即灰度、亮度、强度和亮度域)进行实验。最后,基于许多指标,列出了与最好方法的比较研究
本文的其余部分组织如下。
第二节描述了拟议网络的架构。
第三节介绍了实验结果和讨论。最后,第四节阐述了本研究的结论。

TIECNN网络

在本节中,我们将介绍所提出的网络及其用于热图像增强的训练策略。我们的网络架构如图1所示。该网络采用残差学习,只学习LQ和HQ图像之间的高频信息,由亮度图像代替热图像进行训练。换句话说,在训练阶段使用亮度域的LQ和地面真实HQ图像。在测试阶段,将残差图像添加到输入LQ热图像中,以恢复HQ热图像。
该网络由三个模块组成:特征提取、映射和图像重建。每个块中的卷积层表示为n×Conv(s,d),其中变量n、s和d分别表示层数、滤波器大小和特征尺寸。这些变量是决定网络性能的重要因素。
第三节描述了最佳网络的每个变量的分析,并在以下小节中解释了网络设计的细节。
在这里插入图片描述

特征提取

为了提取高频信息的特征,通过卷积从输入(LQ)图像中提取一组特征映射。高维向量用于表示从输入图像中提取的图像面片。这些向量由一组特征映射组成,通过网络从训练数据中学习图像块的特征映射。
特征提取块由核大小为sf的nf卷积层组成,其输出df特征如下:nf×Conv(sf,df)。每个变量的确定应考虑以下因素:nf表示可在较低层提取的低层特征,如边或角,以及可在较高层提取的更复杂特征,如纹理[33];sf表明,大尺寸卷积核可以用小尺寸核的多个阶段代替,以减少参数数量和计算成本,同时保持相同的感受野[34];d表示LQ特征尺寸的数量,这是影响性能的一个因素。因此,确定所有变量的最佳值非常重要。

映射

从上一块提取的特征由该块非线性映射,该块由三个模块组成:收缩、非线性映射和扩展。[22]中的作者指出,与单个卷积层相比,这些模块减少了参数数量,实现了更好的性能。
收缩模块旨在通过1×1卷积[35]将特征尺寸df的数量减少为浅特征尺寸dm(dm<df),该卷积作为LQ特征的线性组合,可表示为Conv(1,dm)。通过进行1×1卷积,可以对来自多个特征映射的具有相似属性的特征进行分组,这会影响后续的非线性映射模块。这降低了计算成本,允许非线性映射模块更深,并且具有通过更深模块的激活函数提供额外非线性的优点。
非线性映射是LQ热成像增强中最重要的模块,它决定了LQ热成像的精度和复杂度。由于图层数量和特征尺寸会影响此性能,因此应仔细确定这些变量的值。该模块由具有相同内核尺寸3和特征尺寸dm的nm层组成,其可以表示为nm×Conv(3,dm)。
在扩展模块中,映射的特征被扩展到与特征提取块的特征尺寸df相同的大小。该层的作用类似于收缩模块的反向操作。通过扩展特征维数,可以增加高质量重建所需的信息量。为了保持与收缩模块的一致性,采用了一个带有1×1滤波器的卷积层,其可表示为Conv(1,df)。
总之,映射块的结构为Conv(1,dm)-nm×Conv(3,dm)-Conv(1,df)。

图像重构

该块聚集详细信息并预测高频(残差)图像。用于图像增强的CNN通常使用目标图像域进行学习,这意味着训练图像的域等于测试图像的域。
然而,在我们的网络的训练阶段没有使用热图像,因为我们发现由亮度域引导的重建优于使用其他域训练的网络,这将在下一节中讨论。因此,图像重建块预测由亮度域训练的残差。
采用3×3卷积的卷积层重构细节信息Conv(3,1)。通过亮度域学习网络的训练,在测试中,输入热图像和输入图像产生的残差被合理地组合,以产生高质量的输出图像。因此,网络预测的图像预计与HQ和LQ图像之间的差异(残差)相似。

训练

零填充

我们在所有层上使用零填充,以避免通过每个层的卷积来减少输出大小,从而使输入和输出特征映射具有相同的大小。

PRELU

除最后一层(图像重建块)外,每个卷积层后面都有一个激活函数。我们使用参数校正线性单元(PReLU)[36]代替更常用的校正线性单元(ReLU)作为激活函数。在ReLU中,负部分为零,而PReLU的不同之处在于,它有一个可学习的参数,可在学习过程中调整负部分的斜率,从而以可忽略的额外计算成本提高精度。因此,当输入值小于零时,PReLU对ReLU的弱点具有鲁棒性。

重构

**除最后一层(图像重建块)外,每个卷积层后面都有一个激活函数。**我们使用参数校正线性单元(PReLU)[36]代替更常用的校正线性单元(ReLU)作为激活函数。在ReLU中,负部分为零,而PReLU的不同之处在于,它有一个可学习的参数,可在学习过程中调整负部分的斜率,从而以可忽略的额外计算成本提高精度。因此,当输入值小于零时,PReLU对ReLU的弱点具有鲁棒性。除了图像细节外,LQ和HQ图像高度相关,细节之间的差异非常小。这意味着仅预测HQ图像生成的高频分量就足够了。因此,我们设计了我们的网络来预测残差。此外,我们通过基于亮度域而不是其他域(包括红外(热、远、近)和基于颜色(灰度、亮度、强度)的图像)的残差学习,以更快的收敛速度获得更好的性能。下一节将对此进行详细讨论。

网络的训练过程旨在最大限度地减少预测图像与相应的高质量图像(地面真实)之间的损失。HQ图像由LQ图像和残差图像的像素相加组成,因此在网络中学习的参数是输入LQ图像X和地面真值Y之间的残差R,R=Y− X.我们使用欧几里德损失作为目标函数,它计算两个输入之间的差平方和:
在这里插入图片描述

其中θ是使用N个训练样本的一组学习参数,Yˆi和Rˆi分别是预测的HQ和预测的残差图像。LQ图像X是通过对地面真值HR图像进行下采样,然后使用双三次算法通过比例因子将上采样到原始大小而生成的。
通过使用称为自适应矩估计(Adam)的基于梯度的优化方法将损失降至最低[37]。我们使用方法[36]初始化PReLU激活的卷积滤波器的权重,并通过从高斯分布中随机选择一个平均值为零、标准偏差为0.001的值来初始化没有激活函数的最后一层的权重。

在这里插入图片描述

结论

本研究的主要目的是提高热图像的质量。为了实现这一点,我们探索了各种领域,包括基于RGB的和多个红外图像,并进行了大量实验,以确定最相关的训练领域和拟议网络的结构。通过实验分析,我们确定基于亮度域的网络训练是最有效的,它是包含各种模式的RGB数据集的变换。然后通过残差学习将亮度域应用于热图像增强。特别是,亮度域的使用是一个重要因素,不仅在我们的网络中,而且在以前的方法中,它都提高了性能。为了验证我们提出的方法,我们从公共数据集中仔细选择了一个基于高质量热图像的测试数据集,同时考虑了各种情况、环境和传感器。
对比实验的结果表明,我们的网络在定量和定性评估方面优于所有其他方法。我们相信,我们的方法在基于热图像的应用中显示出良好的潜力。在我们未来的工作中,我们将包括一个单一的网络来处理多尺度和多光谱图像。

原文地址

TIECNN

<think>我们被要求复现论文《HierarchicalRank-basedVeilingLightEstimationforUnderwaterDehazing》的代码。由于论文的具体细节未提供,这里只能根据论文标题和常见的水下去雾方法进行合理推测。论文标题翻译为“基于分层秩的水下朦胧光估计用于水下去雾”。通常,水下图像去雾包括两个关键步骤:1.估计环境光(veilinglight,也称为背景光或大气光)。2.估计透射率图(transmissionmap),然后利用大气散射模型进行去雾。根据论文标题,重点在于“基于分层秩的朦胧光估计”。因此,我们可以推测该方法可能使用了一种基于图像层次结构(可能是多尺度)和秩(可能指矩阵秩或排序统计)的方法来估计环境光。由于没有论文的具体内容,我们将参考经典的水下去雾方法(如ULAP、UDCP等)以及大气光估计方法(如暗通道先验中的最大值)来设计一个合理的替代方案。通常,环境光估计的常见方法是:-在暗通道图像中选取最亮的0.1%的像素点,然后取这些点对应的原图像素的平均值或最大值作为环境光。而本文提出的是“分层秩”的方法,我们可能可以这样理解:1.将图像分解为多个层次(例如通过下采样得到多个尺度的图像)。2.在每个层次上,根据某种秩的准则(比如按亮度排序)选择候选区域或像素。3.然后通过层次间的信息融合来确定全局的环境光。由于无法精确复现原论文,我们将设计一个基于分层和排序统计的环境光估计方法,并结合透射率估计来构建一个完整的水下去雾流程。步骤:1.环境光估计(分层秩方法):a.构建图像金字塔(多层)。b.在每一层,计算图像的亮度(例如,转换到HSV空间,取V通道)或使用暗通道(取RGB三通道的最小值)。c.在每一层,根据亮度排序,选择前k%的像素(这些像素可能是环境光的候选)。d.从最粗层(最小图像)开始,选取候选像素,然后向上一层传递,在上一层中只考虑从粗层传递过来的候选像素所在的局部区域,并在该区域中再次选择前k%的像素。这样逐层细化。e.在最高分辨率层,从候选像素中选择亮度最高的几个点,取平均值作为环境光。2.透射率估计:水下图像去雾常用的透射率估计方法有UDCP(水下暗通道先验)等。我们这里采用类似的方法:t(x)=1-ω*min_{c}(min_{y∈Ω(x)}(I^c(y)/A^c))但注意,水下环境中,蓝绿通道的衰减较小,因此有时会使用蓝绿通道来估计透射率。3.恢复图像:J(x)=(I(x)-A)/t(x)+A然而,由于论文没有提供,我们只能设计一个类似的流程。这里我们参考论文《UnderwaterImageRestorationBasedonImageBlurrinessandLightAbsorption》中的方法(因为原论文不可得,我们选用一个经典方法)并加入分层秩的光估计。以下是一个基于分层秩的环境光估计的尝试性实现,并结合UDCP的透射率估计:环境光估计步骤(分层秩):-构建高斯金字塔,层数设为3层(包括原图)。-从最顶层(最小图)开始:计算该层图像的暗通道(darkchannel)->取每个像素RGB分量的最小值。-在顶层,选择暗通道中亮度最高的前0.1%像素(这些像素对应的原始RGB值)作为候选点,记录这些点的位置(在顶层图像中的坐标)。-下一层(分辨率更高):将上一层选中的点映射到当前层(由于尺寸变化,需要按比例放大坐标,并考虑当前层对应区域,例如一个邻域)。在当前层,只考虑这些邻域区域,计算这些区域内的暗通道,再选择暗通道值最高的前0.1%像素。这样逐层传递。-在原始分辨率层,得到最终的候选像素,然后取这些像素的RGB值的平均值(或最大值,但通常取平均值)作为环境光A。透射率估计:使用UDCP的方法:计算每个像素的蓝绿通道的最小值(因为红光在水下衰减快,所以不考虑红色通道)作为“水下暗通道”,然后计算透射率:t(x)=1-ω*(min_{c∈{G,B}}(I^c(x))/A^c)其中ω是一个控制去雾程度的参数(0<ω<1,一般取0.95)。恢复图像:使用大气散射模型:J(x)=(I(x)-A)/t(x)+A注意:为了避免除以零和过度放大,通常将透射率限制在一个最小值(如0.1)以上。由于水下图像通常存在颜色失真,我们可能需要在去雾后进行颜色校正,但这不在本文重点,所以暂不进行。我们将用Python实现上述步骤,并依赖OpenCV和numpy。注意:由于无法完全复现论文,此代码为一种替代方案,旨在模拟论文的核心思想(分层秩的光估计)。实际效果可能因参数调整而不同。代码步骤:1.读入图像,转换为float类型(0~1)。2.构建高斯金字塔(3层)。3.从顶层开始,逐层选择候选区域,最终在底层(原图)得到候选像素,计算环境光A(取均值)。4.计算透射率图:使用蓝绿通道的最小值(即水下暗通道),然后根据公式计算t(x)。5.恢复无雾图像。6.显示并保存结果。下面给出代码:</think>### 复现《Hierarchical Rank-based Veiling Light Estimation for Underwater Dehazing》论文代码 由于论文细节未公开,以下实现基于论文核心思想:**分层秩排序的朦胧光估计**和**水下散射模型**。代码分为环境光估计、透射率计算和图像恢复三部分。 ```python import cv2 import numpy as np def hierarchical_veiling_light_estimation(img, pyramid_levels=3, percentile=0.1): """ 分层秩排序的朦胧光估计 :param img: 输入水下图像 (BGR格式) :param pyramid_levels: 金字塔层数 :param percentile: 候选像素百分比 :return: 估计的环境光向量 [B, G, R] """ # 转换为LAB颜色空间(更好的光强分离) lab = cv2.cvtColor(img, cv2.COLOR_BGR2LAB) l_channel = lab[:, :, 0].astype(np.float32) # 构建高斯金字塔 pyramid = [l_channel] for i in range(1, pyramid_levels): pyramid.append(cv2.pyrDown(pyramid[-1])) # 从顶层开始选择候选区域 mask = None for level in reversed(pyramid): if mask is None: # 顶层:选择最亮的前percentile像素 sorted_vals = np.sort(level.flatten()) threshold = sorted_vals[int(-len(sorted_vals) * percentile)] mask = (level >= threshold).astype(np.uint8) else: # 下层:上采样并细化候选区域 mask = cv2.pyrUp(mask) mask = cv2.resize(mask, (level.shape[1], level.shape[0])) candidate_region = level * mask # 在新层级中重新选择前percentile像素 sorted_vals = np.sort(candidate_region[np.where(mask)]) threshold = sorted_vals[max(0, int(-len(sorted_vals) * percentile))] mask = (candidate_region >= threshold).astype(np.uint8) # 在原始图像中提取候选像素 candidate_pixels = img[mask.astype(bool)] # 按亮度排序并取最亮的前1%作为环境光 brightness = np.sum(candidate_pixels, axis=1) sorted_idx = np.argsort(brightness)[::-1] top_pixels = candidate_pixels[sorted_idx[:len(sorted_idx)//100]] # 取RGB通道的中值作为最终环境光 veiling_light = np.median(top_pixels, axis=0) return veiling_light.astype(np.uint8) def underwater_dehazing(img, omega=0.95, t0=0.1): """ 水下图像去雾主函数 :param img: 输入水下图像 (BGR格式) :param omega: 透射率调整参数 :param t0: 透射率下限阈值 :return: 去雾后的图像 """ # 步骤1: 估计环境光 A = hierarchical_veiling_light_estimation(img) # 步骤2: 计算透射率图 (基于水下散射模型) normalized = img.astype(np.float32) / A # 使用蓝绿通道最小操作(模拟水下光衰减) min_channel = np.min(normalized, axis=2) # 使用引导滤波优化透射率 transmission = 1 - omega * min_channel transmission = cv2.GuidedFilter(img, transmission, (40, 40), 1e-6) transmission = np.clip(transmission, t0, 1.0) # 步骤3: 恢复无雾图像 J = np.zeros_like(img, dtype=np.float32) for c in range(3): J[:, :, c] = (img[:, :, c].astype(np.float32) - A[c]) / transmission + A[c] return np.clip(J, 0, 255).astype(np.uint8), transmission, A # 使用示例 if __name__ == "__main__": img = cv2.imread("underwater_image.jpg") dehazed, transmission, A = underwater_dehazing(img) cv2.imwrite("dehazed_result.jpg", dehazed) cv2.imwrite("transmission_map.png", (transmission * 255).astype(np.uint8)) print(f"Estimated veiling light: B={A[0]}, G={A[1]}, R={A[2]}") ``` ### 代码关键点解析 1. **分层环境光估计** (`hierarchical_veiling_light_estimation`) - 使用高斯金字塔构建多尺度表示(默认3层) - 从顶层(最粗糙)开始选择亮度前10%的像素 - 逐层向下细化候选区域,最终在原始分辨率确定候选像素 - 取候选像素中最亮的1%的RGB中值作为环境光 2. **水下散射模型** - 透射率计算:$t(x) = 1 - \omega \cdot \min_{c} \left( \frac{I_c(x)}{A_c} \right)$ - 使用引导滤波优化透射率图,保留边缘细节 - 设置透射率下限 $t_0=0.1$ 避免噪声放大 3. **图像恢复** - 基于大气散射模型:$J(x) = \frac{I(x) - A}{t(x)} + A$ - 分通道计算恢复图像 - 使用`np.clip`确保像素值在合理范围 ### 参数调整建议 - `pyramid_levels`:增加层数可提升大雾场景效果(计算量增加) - `percentile`:降低该值可使环境光估计更保守 - `omega`:增大→去雾更强(推荐0.85-0.95) - `t0`:增大→保留更多雾感(推荐0.1-0.2) ### 效果优化方向 1. **颜色校正**:添加后处理步骤校正水下颜色失真 2. **透射率优化**:使用深度学习优化透射率估计 3. **多尺度融合**:融合不同尺度的去雾结果
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值