Du G, Wu J, Cao H, et al. A real-time effective fusion-based image defogging architecture on FPGA[J]. ACM transactions on multimedia computing, communications, and applications (TOMM), 2021, 17(3): 1-21.

基于 FPGA 的实时有效融合图像去雾架构(图像融合)

雾天会降低被摄物体的能见度,导致图像失真并降低整体图像质量。已经提出了许多方法(例如,图像恢复、图像增强和基于融合的方法)来解决这个问题。然而,这些去雾算法中的大多数都面临着算法复杂性或实时处理要求等挑战。为了简化去雾过程,我们提出了一种基于灰度单通道线性传输的融合去雾算法。该方法根据不同比例将灰度单通道线性变换与高升压滤波相结合。为了更有效地增强去雾图像的可见性,我们在不降低去雾结果的情况下将 RGB 通道转换为灰度单通道。灰度融合后,灰度域中的数据应该是线性传输的。随着对清晰图像的实时性要求不断提高,我们还提出了一种高效的实时 FPGA 除雾架构。该架构优化了引导过滤的数据路径,加快了除雾速度,节省了面积和资源。由于均值和平方值计算的像素读取顺序相同,平均和平方值计算后的箱式滤波器中的移位寄存器与箱式滤波器分离并放在输入端共享,节省了存储区域.更重要的是,使用LUT代替乘法器可以减少平方值计算模块的时间延迟并提高效率。实验结果表明,线性传输可以节省总时间的66.7%。我们提出的架构可以高效准确地去雾,满足1920×1080图像尺寸的实时去雾要求。

1. 简介

在雾天拍摄的图像经常变得模糊。它会降低对比度,导致图像失真,从而降低整体质量。在一些对图像敏感的应用(如自动驾驶)中,汽车电子系统捕捉到的图片和视频对汽车自主决策至关重要,图像质量成为影响物体检测和牵引精度的关键因素之一。图像处理速度是另一个关键因素。在大雾天气下,如果快速行驶的自动驾驶汽车拍摄的视频无法在特定时间内消除雾气,就会给决策带来严重问题。甚至可能引发事故,严重威胁驾驶员和乘客的生命安全。在智能手术应用领域,例如内窥镜,这类医疗设备获得的图像也受到雾气的影响,需要实用和实时的去雾。总之,图像去雾对现实生活中的应用有着重大的影响,设计一个能够实时高质量运行的去雾系统不仅重要而且具有挑战性。

一般来说,图像去雾算法大致可以分为三类:图像恢复、图像增强和基于融合的方法。图像恢复通常使用大气散射的物理模型,例如暗通道先验除雾算法及其不同的改进算法。为了解决大雾天气下的低能见度问题,Narasimhan 等人。建立了基于大气散射现象的物理成像模型,He等。提出了基于该模型的暗通道算法[11]。在这个框架下,首先采用了最小滤波方法,但它导致了去雾图像中的“光晕”伪影。然后,使用软抠图方法来优化透射图像。这种方法对很多场景都很有用,但对有天空区域的图片没有用。马等人。将前景与背景分开并分别对它们进行去雾 [23]。黄等人。在深度估计模块中使用了中值滤波方法。他们采用了自适应伽马校正,避免了复杂结构图像中的“光晕”效应,实现了实用的透射图估计[40]。软消光的另一个副作用是耗时,因此 Tarel 和 Hautiere 使用快速中值滤波代替软消光,执行更短的除雾时间 [33]。但是这种去雾效果还不够好,所以Xiao和Gan采用中值滤波和引导联合双边滤波去除大量纹理信息,恢复深度边缘信息[35]。机器学习是近年来出现的另一种基于图像恢复的方法 [3, 4, 20, 28]。赵等人。提出了一种多尺度最优融合模型来优化透射图,使用曝光增强方法和快速梯度域GIF(GD-GIF)进行后处理,以更稳健和快速地改进所提出的去雾算法[38]。徐等人。提出了一种用于遥感图像的迭代去雾模型(IDeRS)和一个迭代框架,以迭代实现以达到最佳去雾效果[36]。但是,这种方法需要大量的数据,图像训练时间长,并且对给定模型对不同场景的图像进行去雾,耗时且受场景限制。

图像增强去雾算法通过增加图像的对比度来去雾。 大致分为基于 Retinex 理论的方法、幂律伽马变换、分段线性变换和直方图均衡(HE)方法。 Land和McCann首先提出了一种基于Retinex理论的图像增强算法[18],其性能与亮度分量的估计直接相关。 高斯函数在较宽的空间常数范围内具有良好的性能。 因此,乔布森等人。 使用高斯函数来估计亮度分量,称为单尺度 Retinex (SSR) 算法。 由于不能同时实现动态范围压缩和颜色/亮度再现,多尺度 Retinex 颜色恢复 (MSRCR) 算法和多尺度 Retinex 颜色恢复 (MSR) 算法被提出 [13, 14, 27]。

直方图均衡只能调整整个图像的对比度[39]。 局部直方图均衡(AHE)可以改变局部图片,但AHE存在图像中同一区域噪声过大的问题[15]。 因此,徐等人。 提出了一种对比度限制自适应直方图均衡(CLAHE)方法,通过对比度限制克服了AHE放大噪声过大的问题[37]。 由于高斯滤波产生了“光环”效应,Ma等人使用分段线性变换来提高由 SSR 算法获得的去雾图像的可见性 [24]。 高等人。 在 MSRCR 算法之后应用对比度拉伸和全局伽马校正来增强图像,并提出了一种基于自适应尺度的彩色雾图像增强 MRCR 算法[9]。 上述图像增强和除雾方法相对快速和直接,但通常会导致过度的色彩还原。

去雾融合算法通过融合两种不同的方法来提高去雾图像质量 [1, 7, 24]:第一个输入图像还原颜色以减少噪声,第二个输入图像增强可见性。一些研究人员融合了红外和可见光图像 [17, 29, 30]。傅等人。使用伽马校正获得两个不同亮度的输入图像,并将输入图像与从两个输入图像中获得的权重图相结合[7]。这种方法计算太复杂,所以Ancuti和Ancuti将白平衡和线性透射得到的两幅输入图像融合进行去雾[2]。 Ancuti和Ancuti还提出了另一种水下照片去雾算法,该算法使用简单的有限自适应直方图均衡(LAHE)算法代替线性传输,实现更快的处理速度[1]。但是,它可能会导致颜色失真和“光晕”效果。因此,马等人。提出了一种新的图像融合选择方法。第一个输入图像是简单的线性传输,第二个输入图像是基于引导滤波的高升压滤波算法[24]。这种方法有较好的除雾速度和效果[32]。

然而,这些算法仍然存在局限性。它只是一个系统级模型,因为没有针对实时应用场景的硬件实现或优化。因此,一些研究人员改进了暗通道先验算法并实现了FPGA [16, 34]。为了满足实时除雾,Shiau 等人。采用了 11 级流水线硬件架构 [31]。然后为了提​​高吞吐量,Lee 和 Wu 提出了一种单级 LAE(低复杂度空光估计)和 3 级并行 ITRE(独立传输速率估计)和 SR(场景恢复)的并行架构 [19]。然而,在这些硬件实现中,**大多数算法都是基于暗通道先验的,具有很高的复杂性。基于融合的去雾算法计算简单。通过融合两种不同的方法来实现去雾,也很容易实现硬件并行架构来提高吞吐量。**此外,在实现层面,我们发现该算法[24]中有很多冗余的乘除运算,这可能会导致大量的硬件消耗,但对提高去雾图像质量几乎没有用。

为了更清楚地揭示问题,我们给出一个动机示例。图 1 显示了三个线性传输框架的时序图。图 1(a) 显示了传统线性传输的时序图 [32]。设数据输入所需时间为Ta,遍历一个通道的像素值所需时间为Tb,线性传输所需时间为Tc。传统的三通道(RGB)线性变换可分为串行线性变换和并行线性变换。串行RGB三通道线性变换所需时间为(Ta + 3 × (Tb + Tc )),导致传输时间较长。并行RGB三通道线性传输的总处理时间为(Ta +Tb +Tc )。与串行方式相比,所需时间最多可减少(2×(Tb+Tc)),但硬件消耗成本是串行方式的三倍。为了平衡电路资源和性能,我们仔细研究了三通道处理(RGB)和单通道处理(灰色)之间的关系。我们发现基于灰度通道的方法在适当的预处理下对图像去雾几乎具有相同的效果,但它可以显着降低硬件消耗。因此,我们提出了一种线性传输的灰度融合方法(如图1(c)所示)。总处理时间为(Ta +Tb +Tc ),比传统串行线性传输方法的时间减少了2 × (Tb +Tc )。


为了进一步提高算法的去雾速度并将其应用于实际,我们还提出了一种基于融合去雾的硬件架构。 在硬件架构中的引导过滤模块中,我们参考了[5]的硬件架构,对引导过滤的数据路径进行了优化。 同时,我们设计了一个基于数据复用的盒式滤波器。 这项工作的贡献总结如下:

  • 我们提出了一种基于灰度和线性传输的融合方法。 我们在RGB图像灰度融合后进行线性变换,提高了去雾图像的可见度。 与传统的串行RGB三通道线性拉伸相比,该方法节省了66.7%的处理时间。 与全并行架构相比,可节省约50%的硬件面积。
  • 我们在引导滤波器上提出了基于 FPGA 的硬件架构,以提高资源利用率结构和性能。 [5]中的引导过滤器架构使用了大量的盒式过滤器模块,消耗了太多资源。 箱式滤波器包括移位寄存器模块和平均模块。 我们将引导滤波器架构的箱式滤波器电路中的移位寄存器和平均模块分开,并将移位寄存器模块移动到引导滤波器的输入端。 这种方法减少了移位寄存器的数量。 在方差计算的引导过滤中,我们使用LUT代替乘法器来减少平均延迟并节省硬件资源。
  • 我们为盒式滤波器电路提出了一种数据重用硬件架构。 该电路将包含 k-1 个加法器的加法器树优化为重复使用一个加法器和减法器的电路。 该电路以最小的内存为代价减少了 k-3 个加法器。 同时,箱式滤波器考虑了边缘滤波窗口,增加了控制电路和系数选择,使系数计算更加准确。
  • 我们将上述基于融合的方法实现到 FPGA 平台中,用于实时图像去雾。 实验结果表明,除雾速度有较大提高,适合实时除雾。

本文的组织如下:第 2 节介绍了与融合相关的去雾算法。 我们在第 3 节中展示了所提出的硬件架构和细节。第 4 节在系统级和硬件实现级进行了实验。 最后,第 5 节给出了结论。

2 基于灰度和线性传输的融合去雾算法

图像融合是一种简单但有效的消雾方法。 将两种方式得到的两幅输入图像按照不同的权重比进行组合,得到最终的去雾图像。 第一个输入图像是恢复雾化图像像素值的动态范围,通过直方图均衡、线性传输等方法实现。 第二个输入图像是为了增强图片的可视性。 它使用这些技术来实现,例如高斯滤波 [8]、引导滤波 [10] 和高提升滤波。 结合简单的线性传输和高提升滤波来实现去雾[24]。

为了增强有雾图像的对比度,该算法使用简单的线性传输来获得第一幅输入图像。 线性拉伸的公式为:
Lic=Iic−IMincIMaxc−IMincL_{i}^{c}=\frac{I_{i}^{c}-I_{M i n}^{c}}{I_{M a x}^{c}-I_{M i n}^{c}} Lic​=IMaxc​−IMinc​Iic​−IMinc​​
其中 c 是图片的一个通道,I c Min 和 I c Max 是 I c i 的最小和最大像素,I c i 表示图像 I 的通道 c 中的第 i 个像素。

简单的线性传输不仅可以增强有雾图像的对比度,而且具有良好的保色性能。 因此,选择这种简单的线性传输得到的结果作为第一输入图像有助于获得更好的融合结果。 为了锐化图像并增强图像的边缘特征,该算法使用高提升滤波器来获得第二个输入图像。 改进的高提升滤波的主要步骤如下:

步骤(1):通过引导过滤获取模板图像:
(2)
qi=akIi+bk,∀i∈ωkq_{i}=a_{k} I_{i}+b_{k}, \forall i \in \omega_{k} qi​=ak​Ii​+bk​,∀i∈ωk​
步骤(2):通过改进的高升压滤波器获取结果图像:
(3)
Ji=Ii+α×qiJ_{i}=I_{i}+\alpha \times q_{i} Ji​=Ii​+α×qi​
其中 α 是高提升滤波的参数,决定了锐化程度。 引导滤波[12]用于改进的高提升滤波。 式(2)表示以像素k为中心的局部区域内引导图像I与滤波后的输出图像q的关系。 (ak ,bk ) 是局部区域的线性系数,ωk 是半径为 R 的方形窗口。 该算法使用图像本身作为引导图像,因此输出图像 q 具有与雾图像相同的边缘信息 (指导图片)我。 为了找到线性模型的参数,我们定义成本函数如下:
E(ak,bk)=∑i∈ωk((akIi+bk−pi)2+εak2)E\left(a_{k}, b_{k}\right)=\sum_{i \in \omega_{k}}\left(\left(a_{k} I_{i}+b_{k}-p_{i}\right)^{2}+\varepsilon a_{k}^{2}\right) E(ak​,bk​)=i∈ωk​∑​((ak​Ii​+bk​−pi​)2+εak2​)
其中ε为取值较小的约束参数,pi为输入图像。 最小化代价函数(公式(4))给出以下解决方案:

μk 是 ωk 窗口的均值,σ2 k 是 ωk 窗口的方差。 pk 是输入图像 p 在 ωk 中的平均值。 对于 μk 、σ2 k 和 pk ,我们定义如下:


因为图像的每个像素I可能被不同的窗口ωk覆盖,所以每个窗口对应不同的ak和bk。 如公式(10)和公式(11)所示,计算输出像素值,计算每个窗口对应的ak和bk的均值。

输出像素值改写如下:


由于引导图像是原始雾图像,ak , bk 可以写成:

高提升滤波处理后的图像会产生噪声和“光晕”效果。 线性传输可以增加图片的对比度和可见度。 因此,线性变换和高提升滤波的融合会降低高升压滤波产生的噪声和“光晕”效应。 融合公式如下:
(15)

其中β为融合权重,F为通道c中的融合图像,L为线性传输的结果,J为通道c中高升压滤波的结果。

基于去雾融合算法和暗通道先验的启发,我们对去雾融合算法的第一输入图像进行了改进,提出了一种基于灰度的融合方法。 在融合去雾算法[24]中,第一个输入图像是通过线性传输RGB通道获得的。 该算法要求对每个通道进行线性传输。 在我们的方法中,我们首先执行 RGB 通道的灰度融合。 公式表示如下:


其中 I R、IG、I B 和 IGray 分别表示 R、G、B 和灰度通道的像素值。 此外,我们在灰度通道上完成了一个简单的线性传输,定义如下:


其中 LGray 表示灰度通道中的线性透射值,IGray Min 和 IGray Max 分别是灰度通道中的最小和最大像素。 因此,式(15)中的L被重新定义为灰度通道的线性透射值,并分配给RGB通道进行融合计算。 我们的方法减少了硬件实现的时间和资源。 我们在第 3.2 节中展示了详细信息。

(待补充……)

3.2 基于灰度图像的单通道线性传输方法

由于雾图像对比度低,整个画面的像素值范围较小,通过线性传输增加像素值范围和对比度。 图 3© 显示了所提出的基于灰度图像的线性传输方法和相应的电路架构。 首先输入R、G、B通道(分别表示为红色、绿色和蓝色通道)的像素值,然后按照公式(16)转换为灰度融合(Gray cal)。 接下来,将改变后的灰度图像写入灰度RAM,然后在灰度比较模块(Gray comp)中遍历整幅图像进行比较,得到整幅图像的最大值和最小值。 最后,最后一个模块根据公式(1)进行线性传输,其中IGray、IMax和IMin分别为灰度、最大和最小像素值的像素值。

对于传统线性传输的硬件架构,图3(a)显示了现有的线性传输串行化方案。该方案以串行方式对R、G、B三个通道进行线性拉伸。需要先遍历R、G、B三个轨迹,然后在比较模块(compare)中选择每个通道的最大和最小像素值。最后,它在线性传输模块(L.传输)中计算每个通道的线性传输值。计算公式如式(1)所示。它必须旅行六次。图 1(a) 显示了该方案的时间。如图3(b)所示,三个通道并行进行线性传输以缩短时间。图 1(b) 显示了该方案的时序图。与序列化中的线性拉伸相比,线性变换时间减少了66.7%,但消耗了更多的硬件资源。图 3© 显示了所提出的改进的线性传输方法。它以较小的硬件资源开销将线性传输的串行化时间优化了 66.7%,时序图如图 1© 所示。

4.2 雾图像的定性比较

在本节中,我们通过观察去雾后的图片,定性地分析我们的去雾算法和其他去雾算法。 我们将不同的雾图像与 He 等人的方法进行比较。 [11]、CLAHE [39]、Tarel 和 Hautiere [33]、Meng 等人。 [25],以及马等人。 [24]。 比较结果如图 7 所示。 我们方法中使用的参数初始化如下:β = 0.4,α = 0.6 r = 20。

在图 7 中,He 等人。 [11] 有更好的去雾效果并还原了一些细节。但是,对于出现天空的区域的有雾图片,如图7(a)和图7(b)所示,去雾效果不显着,大气中过度曝光导致特定细节缺失。由图 7(b)和图 7©可知,CLAHE[39]的除雾效果在雾海中更为显着。但是,当雾不是很大时,这种方法会导致去雾过多,导致颜色过饱和,如图7(e)所示。证明CLAHE更适合那些整幅图像对比度较低的场景。 Tarel 和 Hautiere [33] 整体上提高了有雾照片的可见度。 但是,与原始图像相比,仅对原始图像的边缘进行了锐化处理,还原后的图像颜色变得比原始图像更暗。孟等人。 [25] 是 He 等人的改进版本。 [11],其除雾效果更好。

但由于大气光误差估计错误,会造成色彩失真。从图 7 中,大部分出现天空的图片都是白色的,但缺少局部细节。特别是在图7(a)中,天空中的白云不再可见,“光晕”效应出现在图7©中。马等人。 [24]提出了一种基于融合的去雾算法,我们的算法在此基础上进行了改进。我们的除雾效果与他们的相似。对于图 7(a),我们的颜色更深,因为我们在线性传输期间将 RGB 三通道混合为单个灰色通道。对于其他图片,我们可以看到我们对图像的边缘处理得更好,它们的边缘,[24]中的“光晕”效果,比我们的更明显。特别是在图 7© 中,边缘锐化更加明显。在我们提出的算法中,更好的去雾方案提高了图片的可见性:恢复更多细节,不过度曝光,减少“光晕”效应。总的来说,在所有这些方法中,我们的去雾效果更好。

从图 8 可以看出,所提出的方法有四个步骤:线性传输、引导滤波、高升压滤波和图像融合去雾。 图8中的第二列是线性变换的结果。我们发现,当将原始RGB有雾图像转换为灰度图像时,整个图片在灰度域中变得更加明显。 线性透射用雾图像的像素值范围填充整个灰度通道。

引导滤波的提出是为了平滑图像信息。 从图 8 中的第三列开始,引导过滤使有雾的图像变得平滑和模糊。 图 8 中的第四列是高升压滤波的结果。 我们可以发现高boost滤波对图片边缘特征进行了锐化处理,对于有雾的图片有很好的色彩恢复。 不过画面色彩太亮,画面边缘有“光晕”效果。 因此,图 8 中第五列的最终去雾结果是图像融合。 线性透射和高升压滤波按照特定的比例融合,得到最终的去雾图像。 融合后的图像更接近真实画面的色彩,边缘的“光晕”效果也减少了很多。

4.3 雾图像的定量比较

为了定量评估每种去雾算法的性能,我们使用可见边缘和对比度增强评估方法来比较每种算法的优缺点。 常用的定量评价标准主要包括:新可见边缘的比例(e)、可见边缘归一化梯度均值®、饱和黑色或白色像素的百分比(σ)。 e和r用图像边缘的增强程度来表示图像可见性的增强程度。 e 是图像去雾后可见边缘的增加率。 定义公式如下:

e=nr−nono\mathrm{e}=\frac{n_{r}-n_{o}}{n_{o}} e=no​nr​−no​​

其中 no 和 nr 分别表示原始图像 Io 和去雾图像 Ir 中可见边缘的数量。 e 越大表示去雾效果越好。

r 使用增强的图像梯度来表示图像边缘和纹理信息的恢复程度。 r 越大,相应去雾算法的边缘保持性能越好。 r 定义如下:
rˉ=exp⁡[1nr∑Pi∈φrlog⁡ri]\bar{r}=\exp \left[\frac{1}{n_{r}} \sum_{P_{i} \in \varphi_{r}} \log r_{i}\right] rˉ=exp⎣⎡​nr​1​Pi​∈φr​∑​logri​⎦⎤​
其中 φr 是 Ir 中可见边缘的集合,Pi 是属于去雾图像 Ir 中可见边缘的像素点。 ri i 是 Pi 处去雾图像的 Sobel 梯度与 Pi 处原始图像的 Sobel 梯度之比。

σ 可以评估去雾的颜色恢复性能算法。 σ 是图像去雾后饱和像素的比率,计算公式为:

σ=nsdim⁡x×dim⁡y\sigma=\frac{n_{s}}{\operatorname{dim}_{x} \times \operatorname{dim}_{y}} σ=dimx​×dimy​ns​​
其中 ns 是饱和度和黑色或白色像素的数量。 dimx 和 dimy 分别表示图像的宽度和高度。 σ 越小,我们能得到的去雾算法效果越好。 但是,我们应该指出,在不同的比较算法中,σ 并不完美。 在实际操作中,我们通过计算灰度去雾图像中像素亮度值为255或0的像素个数之和来确定。 灰度图像的白色或黑色像素越多,对比度越低。 在一些算法中,例如基于Retinex算法的增强图像需要通过增益/偏移算法[0,255]转换到显示域。 增益/偏移算法会将一些像素转换为黑白像素以提高显示的动态范围,从而产生更高的σ。 表 1 通过上述三个定量指标显示了图 7(a)-7(e) 的图像质量。

去雾论文A real-time effective fusion-based image defogging architecture on FPGA相关推荐

  1. 【去雾论文阅读】A Novel Fast Single Image Dehazing Algorithm Based on Artificial Multiexposure Image Fusion

    题目:A Novel Fast Single Image Dehazing Algorithm Based on Artificial Multiexposure Image Fusion 作者:Zh ...

  2. 去雾论文Single Image Defogging Method Based on Image Patch Decomposition and Multi-Exposure Image Fusion

    Liu Q, Luo Y, Li K, et al. Single Image Defogging Method Based on Image Patch Decomposition and Mult ...

  3. [去雾论文]--AAAI2020-FFA-Net:Feature Fusion Attention Network for Single Image Dehazing

    摘要: 在本文中,我们提出了一种端到端的特征融合注意力网络(FFA-Net)来直接恢复无雾图像.FFA-Net架构由以下三个主要部分组成: 1)提出了一种新的特征注意(FA)模块,该模块将通道注意与像 ...

  4. 去雾论文综述:Comparative Re-evaluation of Different Single Image Defogging Techniques: A Review

    Baba A, Anwar M I, Moon A, et al. Comparative Re-evaluation of Different Single Image Defogging Tech ...

  5. 1.AOD-Net去雾论文阅读

    AOD-Net 文章DOI:10.1109/ICCV.2017.511 源代码可以在:AODnet-by-pytorch中找到,其中有些代码过期或者命令行有错误,需要完整能跑的可以留言我看到会回复 A ...

  6. 去雾论文A real-time fast defogging system to clear the vision of driver in foggy highway using minimu...

    Mandal G, De P, Bhattacharya D. A real-time fast defogging system to clear the vision of driver in f ...

  7. 【论文阅读】基于单幅图像的快速去雾

    基于单幅图像的快速去雾 刘倩, 陈茂银, 周东华 第25届中国控制与决策会议论文集. 2013. 本文提出了一种基于均值滤波的去雾算法,算是后续多种基于均值滤波去雾算法的鼻祖.虽然本文于2013提出, ...

  8. 去雾综述_【综述】图像去雾的前世今生

    1. 前言 其实之前对图像去雾也没有什么深入的理解,只是了解,实现过一些传统的图像去雾方法而已.个人感觉,在CNN模型大流行的今天,已经有很多人忽略了传统算法的发展,以至于你今天去搜索10年前的传统去 ...

  9. 去雾综述_图像去雾的算法历史与综述

    图像去雾的算法历史与综述 1. 前言 其实之前对图像去雾也没有什么深入的理解,只是了解,实现过一些传统的图像去雾方法而已.个人感觉,在CNN模型大流行的今天,已经有很多人忽略了传统算法的发展,以至于你 ...

最新文章

  1. 项目进度,你汇报清楚了么?
  2. acwing2019. 拖拉机(最短路径)
  3. 中科大基础数学博士招生放大招 年收入10万吸引生源
  4. Pytest之pytest-assume同用例多断言,断言1失败会执行后续代码及断言2
  5. 这里有最全的C++工程师的技术需求,你要做哪方面的开发?
  6. Mac安装Spring Boot CLI
  7. 翻译:Hystrix - How To Use
  8. oracle的clob赋值_oracle 临时clob 和永久clob 的读取操作详解
  9. java高并发编程讲解_有人看过 java高并发编程详解 汪文君著 这本书吗?
  10. linux计划任务失败如何排查原因
  11. 免流服务器稳定吗,什么是免流服务器
  12. 瞬态抑制二极管有方向吗?
  13. vue基于canvas 涂鸦和文字编辑
  14. hadoop和spark HA部署
  15. 安装QQ的时候,页面显示创建文件夹失败,无法正常安装,请尝试选择新的安装目录
  16. Xen - Networking
  17. 2019肖秀荣考研政治3件套【全】
  18. python画饼状图
  19. 从零开始学Pyqt5之【控件介绍】(15):绘图类控件QPainter、QPen、QBrush、QPixMap
  20. 云仓:大数据环境下的库存分布

热门文章

  1. Java 日期 calendar中 DATE 和 DAY_OF_MONTH 和 DAY_OF_YEAR
  2. DAHUA拼接屏操作步骤
  3. 舔狗舔到最后一无所有 (线性dp)
  4. 关于上传图片失败的问题
  5. 给计算机老师发一封信,写给老师的一封信作文500字
  6. 3 个助你玩转正则表达式的利器
  7. java实现加密———Base64加解密
  8. 模型无关的时间序列度量方法及特征
  9. Srt字幕文件只保留文字
  10. 每日一练2,希尔排序