Practical Deep Raw Image Denoisingon Mobile Devices
Abstract
近年来,基于深度学习的图像去噪方法得到了广泛的研究,并在许多公共基准数据集中盛行。然而,最先进的网络计算成本太高,无法直接应用于移动设备。在这项工作中,我们提出了一种轻量级、高效的基于神经网络的原始图像降噪器,它可以在主流移动设备上流畅运行,并产生高质量的降噪结果。我们的主要见解有两个:(1)通过测量和估计传感器噪声水平,在合成传感器特定数据上训练的较小网络可以胜过在一般数据上训练的较大网络; (2) 不同 ISO 设置下的大噪声水平变化可以通过新颖的 k-Sigma 变换消除,从而允许小型网络有效地处理各种噪声水平。我们进行了大量的实验来证明我们方法的效率和准确性。我们提出的移动友好型降噪模型在高通 Snapdragon 855 芯片组上以每百万像素约 70 毫秒的速度运行,它是 2019 年发布的几款旗舰智能手机的夜间拍摄功能的基础。
1 Introduction
近年来,智能手机已成为消费者摄影的首选设备。与单反相机相比,由于使用相对低成本的传感器和镜头,移动设备拍摄的图像更容易受到较高水平的噪声污染,尤其是在弱光场景下。
尽管图像去噪技术已经发展了数十年,但在移动设备上从极其嘈杂的图像中恢复高质量图像仍然具有挑战性。最近,基于深度神经网络(DNN)的去噪方法[36,10,42,21,38,30]取得了巨大的成功,并且优于大多数传统方法[43,12,18,39,40]。然而,由于移动设备上可用的计算资源有限,直接在移动设备上部署这些重量级 DNN 是不切实际的。
在这项工作中,我们提出了一种简单而有效的深度原始图像去噪方法。它可以在现成的智能手机上高效运行,并具有高质量降噪功能。我们的主要观察结果是,特定传感器模型的噪声特性是一致的,并且可以以足够的精度进行测量。通过捕获和建模传感器噪声,我们可以生成具有干净和噪声图像对的合成数据集,并在其上训练轻量级神经网络。经过训练的模型对于同一传感器(即同一智能手机型号)捕获的真实图像仍然非常有效。此外,基于参数传感器噪声模型,我们在亮度空间中推导了一种独特的线性变换,称为 k-Sigma 变换,它将在不同 ISO 设置下捕获的噪声图像映射到 ISO 不变的信号噪声空间中,从而允许单个网络处理不同场景中的不同噪声级别。我们证明,这种方法不仅在理论上很优雅,而且在实践中比为每个 ISO 设置训练单独的模型或在具有不同噪声水平的图像上训练一个大型模型更有效。
总而言之,这项工作的主要贡献如下:
– 一种系统方法,用于估计传感器噪声并使用正确构建的合成数据训练特定于传感器的去噪神经网络。
– 一种新颖的 k-Sigma 变换,可将不同 ISO 设置下的噪声图像映射到 ISO 不变的信号噪声空间。所提出的变换允许在该空间中训练的单个小型网络来处理具有不同噪声水平的图像,而不是根据 ISO 训练单独的模型或更大的模型来覆盖变化。
– 适合移动设备的网络架构,可实现高效的图像去噪。我们对不同的网络架构和去噪方法进行了深入的分析和比较,证明我们的方法具有与最先进的方法兼容的性能,并且计算资源显着减少。
据我们所知,我们的解决方案是第一个实用的基于深度学习的图像去噪方法,在移动设备上具有令人满意的效率和准确性。在图 1 中,我们展示了由现成的智能手机拍摄的示例图像,该智能手机使用我们的低光摄影方法。与默认的 ISP 图像去噪技术相比,我们的结果包含了更多的场景细节。
2 Related work
图像去噪是图像处理和计算机视觉中的一项基本任务。经典方法通常依赖于使用稀疏图像先验,例如非局部均值(NLM)[6]、稀疏编码[13,28,2]、3D变换域滤波(BM3D)[12]等[18, 32]。其中 BM3D 考虑到其准确性和鲁棒性,通常被认为是领先的方法。这些方法大多数是针对一般噪声而设计的,并且没有利用已知的传感器噪声特性。它们的算法复杂性通常很高,使得在智能手机上全面实施变得困难。
随着卷积神经网络(CNN)的最新发展,训练端到端去噪 CNN 受到了相当多的关注。使用多层感知器 (MLP) [7] 的早期工作已经取得了与 BM3D 相当的结果。随着更先进的网络架构的引入,取得了进一步的改进,产生了大量基于CNN的去噪方法[36,10,21,38,30,37,41,23]。这些工作主要集中在新颖的网络结构上以提高准确性,而没有过多关注它们对移动设备的适应性。
我们的工作重点是对原始图像进行去噪,即在去马赛克和其他 ISP 处理之前以原始拜耳格式从传感器读出的图像。在最近提出的公共原始图像去噪基准数据集[1,8,3]上,基于CNN的方法[8,20,17]取得了最好的结果。然而,用干净和嘈杂的图像对构建如此高质量的真实数据集是一项非常乏味的工作。因此,合成用于训练的真实图像噪声的问题也得到了广泛的研究,包括高斯-泊松噪声[16,27]、高斯混合模型(GMM)[44]、相机内过程模拟[25,34]、GAN生成噪声[9]等。事实证明,根据合成数据进行适当训练的网络可以很好地推广到真实数据[42,5]。
移动设备上原始图像去噪的现有最佳实践是捕获并合并多个帧[19,24,31]。这些方法通常需要准确和快速的图像对齐,当场景中存在移动物体时,这很难实现。此外,当噪声水平较高时,对多个帧进行平均可以减少但不能完全消除噪声,从而导致结果不令人满意。据我们所知,我们提出的方法是第一个专为移动设备设计的单帧、基于深度学习的原始图像降噪器。
3 Method
在本节中,我们首先回顾相机传感器的一般与 ISO 相关的噪声模型,然后描述如何在给定新传感器的情况下估计噪声参数。我们进一步展示了如何使用所提出的 k-Sigma 变换合成独立于 ISO 的训练数据,并使用它来训练可以处理各种噪声水平的小型神经网络。
3.1 The Noise Model
相机传感器将曝光时间内撞击像素区域的光子转换为数字化亮度图。如图2所示的光子传输管道所示,该过程包含多个阶段,每个阶段都会引入特定的噪声。让我们首先考虑一个没有噪声的理想系统。在线性相机模型下,在每个像素处,传感器转换是线性放大:
其中 u* 是击中像素区域的预期光子数量,α 是量子效率因子,g 是模拟增益。现在考虑图 2 中管道每个步骤中的系统噪声,我们有:
其中u表示实际收集的光子量,nd ∼ N(0, σ2 d) 和nr ∼ N(0, σ2 r) 是应用模拟增益之前和之后的高斯噪声。此外,[14] 证明 u 服从 u* 的泊松分布,由下式给出
结合方程 (1) 至等式(3),我们有:
这与之前的工作中广泛研究的泊松高斯噪声模型一致[16,27]。通过替换 k = gα 和 可以进一步简化该公式:
请注意,k 和 都与 g 相关,g 由相机的 ISO 设置决定。
3.2 Parameter Estimation
对等式5中描述的分布进行采样,我们需要在特定传感器的指定 ISO 设置下准确估计 k 和 σ。幸运的是,当我们检查 x 的均值和方差时,如方程6所示,则可以将其转化为如下线性回归问题:
与[15]类似,我们在突发模式下捕获一系列静态灰度图的原始图像,如图3a所示,并根据同一像素位置的一系列亮度值计算E(x)。接下来,如图 3b 所示,我们将具有相同估计亮度的所有像素括起来,并根据它们计算 Var(x)。然后应用线性回归来找到 k 和 σ2 的最佳估计,如图 3c 所示。
3.3 The k-Sigma Transform
在实际应用中,相机会根据场景光照自动调整ISO设置,因此在训练去噪神经网络时必须考虑不同的噪声水平。一个简单的解决方案是训练单个网络来覆盖广泛的 ISO 设置,但随着训练数据中的噪声变化变得相当大,它会给网络本身带来额外的负担。受方差稳定变换 [4,29] 的启发,我们在这里提出 k-Sigma 变换来避免这个问题。
具体来说,我们定义一个线性变换
根据我们的噪声模型方程(5),
为了分析这种分布,通常的简化是将泊松分布 P(λ) 视为 N(λ, λ) 的高斯分布 [16]。所以:
结合方程(8) 和等式(9) 则f(x)的近似分布为:
方程。 (10) 表明 f(x) 的分布仅取决于 f(x*)。如图 4 所示,我们可以训练一个以 f(x) 作为输入并输出 f(^x*) 作为 f(x*) 估计的单个网络。然后可以通过应用反向 k-Sigma 变换 f−1(·) 到 f(ˆx*) 来计算估计的真实图像值 x*。换句话说,我们将 ISO 相关变换应用于神经网络的输入和输出,以便可以使用归一化数据来训练网络,而无需考虑 ISO 设置。
4 Learning to Denoise
4.1 Mobile-friendly Network Architecture
我们进一步引入了一种适合移动设备的卷积神经网络,用于图像去噪,如图 5 所示。我们使用类似 U-Net [33] 的架构,具有 4 个编码器和 4 个带有跳跃连接的解码器阶段,如图 5a 所示。
图5b描述了网络块的详细结构。具体来说,为了在移动设备上运行,我们在所有编码器和解码器阶段使用separable-conv [11]以降低计算成本,并且仅在输入和输出阶段使用普通密集卷积层。在编码器中,我们使用 5×5 内核大小来增加感受野并减少网络深度,并使用 stride-2 卷积对特征图进行下采样。在解码器中,我们仅使用 3 × 3-speconv 和具有 2×2 反卷积的上采样特征图。每个编码器级的输入通过逐元素相加的方式组合到相应的解码器级中,在skip connect中采用3×3-speconv来匹配通道形状。最后,最后一个卷积层输出添加到输入图像上的残差作为去噪结果。
4.2 Training Dataset
为了训练我们的去噪网络,我们需要一对有噪声和干净的 RAW 图像。在本文中,我们使用[8]中提出的黑暗中看到(SID)数据集的子集作为地面真实干净图像。 SID数据集包含索尼α7s II和富士X-T2相机拍摄的RAW图像,我们选择索尼α7s II相机拍摄的10秒和30秒长曝光子集,并手动剔除那些可见噪声的图像,留下214高优质 RAW 图像。
根据第 3 节中描述的噪声模型,如果可以获得干净的 RAW 图像,我们可以通过从泊松高斯分布中采样以及从目标传感器测量的估计噪声参数来合成噪声图像。
4.3 Settings and Details
为了生成训练样本,我们从原始数据集中随机裁剪 1024×1024 大小的拜耳补丁。我们采用[26]中描述的bayer-aug方法,随机水平和垂直翻转,并确保输入拜耳模式为R-G-G-B顺序。然后,我们将拜耳图像打包为 512 × 512 × 4 形状的 RGGB 张量。我们还随机调整裁剪图像的亮度和对比度以进行数据增强。然后根据噪声模型合成噪声图像,噪声参数为随机选择的 ISO 值。最后,我们将 k-Sigma 变换应用于噪声图像和干净图像,以便在独立于 ISO 的空间中训练去噪网络。
我们使用噪声图像和干净图像之间的 l1 距离作为损失函数,并使用 Adam [22] 优化器训练网络。我们采用三角循环学习率调度[35],最大学习率为1e-3,循环步长为50×214次迭代,基础学习率在4000×214次迭代后线性衰减到1e-5。批量大小设置为1,训练在8000×214次迭代时收敛。
5 Experiments
在本节中,我们使用 OPPO Reno-10x 智能手机收集的真实数据集来评估我们的去噪方法。这款智能手机配备了三个后置摄像头,我们使用最常用的主摄像头进行测试。该相机的传感器为索尼IMX586,尺寸为1/2'',48兆像素,像素尺寸为0.8微米。该传感器广泛应用于2019年的多款智能手机中,包括OPPO Reno系列、小米9等。
5.1 Noise Parameters Estimation
我们首先使用3.2节中描述的方法测量和估计噪声参数。我们编写了一个简单的应用程序来使用 Android Camera2 API 收集 RAW 图像,它允许我们手动控制相机的 ISO 和曝光时间。为了保持稳定的光照条件,我们在暗室中使用 Xrite SpectraLight QC 灯箱。在每个 ISO 和曝光时间设置下,我们都会调整光源的亮度以避免曝光过度或不足,并将捕获图像的最终值保持在适当的范围内。
在每个 ISO 设置下,以连拍模式拍摄 64 张 RAW 图像,平均图像被视为干净图像。使用 3.2 节中描述的方法,我们可以估计每个指定 ISO 设置下的噪声参数 k 和 σ2。图6a绘制了测试手机在ISO 4800下的数值-方差曲线,其中散点表示平均图像上每个原始值对应的测量方差,蓝线绘制了方程6的线性回归结果。从图中我们可以看出,我们的理论噪声模型能够很好地拟合测量结果。拟合线的斜率是估计的噪声参数 ˆk,y 截距值是估计的噪声参数 ˆσ2。
IMX586传感器模拟增益的可调范围为[1.0, 64.0],对应OPPO Reno-10x相机的ISO值为[100, 6400]。根据我们的噪声模型方程(4) 参数 k 和 σ2 分别与 ISO 值线性相关和二次相关。我们测量和估计每个 ISO 设置下的噪声参数,并绘制图 6 中的 ISO-k 和 ISO-σ2 曲线。散点代表每个 ISO 设置下的估计噪声参数,图 6b 和 6b 中的蓝线表示图6c分别表示线性和二次拟合曲线,这表明我们的理论模型与测量结果吻合良好。
通过很好地拟合ISO-k和ISO-σ2曲线,可以轻松计算出任何ISO设置下的噪声参数,从而满足合成训练数据和应用k-Sigma变换的要求。
5.2 Test Dataset and Metrics
由于我们提出的去噪网络需要针对特定传感器进行训练,因此由于传感器的不匹配,我们无法直接使用 SIDD [1] 等公共基准。因此,我们构建了一个测试数据集来评估我们的去噪方法。
我们在暗室中使用 Xrite SpectraLight QC 灯箱来构建稳定的光照条件。对于每个捕获过程,捕获 64 张 RAW 图像,平均图像可以用作估计的地面实况。如图7所示,我们捕获4个静态场景作为测试图像的内容,并为每个场景设置2个亮度条件。捕捉一个场景时,相机位置和场景内容保持固定。我们在每个场景和亮度下设置了5种曝光组合,分别是ISO-800@160ms、ISO-1600@80ms、ISO3200@40ms、ISO-4800@30ms和ISO-6400@20ms。这些设置共享相同的 ISO 和曝光时间乘积值,因此拍摄的图像具有相似的亮度但不同的噪点水平。
我们使用峰值信噪比(PSNR)和结构相似性(SSIM)来衡量去噪方法的性能。使用简单的后处理流程在 sRGB 域中测量去噪结果和干净图像之间的 PSNR 和 SSIM,包括 (1) 白平衡校正、(2) 去马赛克、(3) 颜色校正和 (4) 伽玛校正。白平衡校正和色彩校正的参数是从RAW图像的元数据中获取的。去马赛克算法为像素分组(PPG),gamma值为2.2。
5.3 Results
我们首先展示我们的方法与[26]中提出的先前最先进的原始图像去噪方法之间的比较,该方法使用 SIDD 数据集进行训练和测试。 [26] 中提出了一种超大型类 UNet 网络,每百万像素需要 1T 乘法累加运算(MAC),并在 NTIRE 2019 去噪挑战中实现了最先进的性能。除了 UNet-1T 架构之外,我们还通过减少通道宽度和层深度来修改网络,以适应各种计算复杂性。我们使用两个不同的数据源训练这些模型:SIDD 数据集和我们的方法生成的训练数据。
如图 8 所示,由于我们精确的噪声建模,使用我们的合成数据训练的模型大大优于使用 SIDD 数据集训练的模型。此外,我们在合成数据上训练的移动友好网络实现了与 UNet-36G 相当的性能,而计算复杂度仅为 UNet-36G 的 10%(3.6G 与 36.3G)。图 9 提供了更多视觉比较。
我们进一步测试了不同模型在移动设备上的实际运行时间,如表 1 所示。我们的适合移动设备的模型可以在 Qualcomm Snapdragon 855 GPU上以 70.70 毫秒(即 12MP 全尺寸图像的 ∼850 毫秒)处理 1024 × 1024 Bayer 输入,而其他性能相当的型号则需要更长的时间,21G 网络为 292ms,36G 网络为 383ms(12MP 为 4.45 秒),这使得它们在移动设备上部署不切实际。
5.4 Ablation Studies
Data synthesis method
为了验证我们的数据合成方法的有效性,我们使用四个不同的训练数据集来训练我们的去噪网络,包括
- 测试集过度拟合:直接使用测试集中的输入和真实数据作为训练数据;
– 合成测试集:使用测试集的真实值并添加合成噪声作为输入;
– 具有噪声缩放的测试集:使用我们的噪声合成方法,但缩放噪声参数以故意与目标传感器不匹配;
– SID:将训练集与第 4.2 节中描述的 SID 数据集合成。
测试结果如表2所示。毫不奇怪,过拟合实验获得了最高的PSNR 40.06dB和SSIM 0.9335,这为这次比较设定了上限。使用我们的合成噪声的测试集取得了第二好的结果,PSNR 为 39.97dB。当通过将 k 和 σ2 缩放 0.5 或 2.0 来使用不准确的噪声参数时,网络会导致本实验中的 PSNR 最低。我们使用 SID 数据集的方法实现了 39.76dB PSNR。
该实验表明,我们的噪声模型和合成噪声能够很好地匹配真实输入噪声的特征,并且测试结果可以接近上限性能。不准确的噪声参数,即使在过度拟合实验中,也会导致明显的性能下降。
Robustness to ISO
我们比较了不同 ISO 设置的几种图像去噪策略,以验证 k-Sigma 变换的有效性。我们比较了处理多个 ISO 设置的两种方法:(1)iso-augmentation:在合成训练样本时随机选择 ISO 设置并将其直接输入到去噪网络中; (2) concat-variance:[5]中提出的方法,其中估计的噪声方差作为 4 个附加通道连接到输入。此外,我们还测试了单 ISO 方法的性能,其中训练数据是使用单 ISO 的噪声参数合成的。
结果如表3所示。concat-variance策略的PSNR达到了39.65 dB,比iso-augmentation策略高了约0.09dB。这意味着明确的噪声水平信息可以帮助模型获得比盲目去噪更好的结果。通过提出的 k-Sigma 变换,我们的网络在本次实验中实现了最高的 PSNR。相比之下,所有单 ISO 方法的性能都比多 ISO 方法差得多。
表 4 给出了对单 ISO 方法和我们的方法的更详细分析,其中测试集中测量的 PSNR 被分组为不同的 ISO 设置。从表中我们可以看到,当测试集的ISO设置与单ISO模型匹配时,可以产生有竞争力的去噪结果。我们基于 k-Sigma 变换的方法在所有 ISO 设置下始终表现良好。
6 Conclusion
我们推出了一款专为移动设备设计的新型原始图像降噪器。通过准确的传感器噪声估计,我们可以利用在特定于传感器的合成数据上训练的轻量级网络,该网络可以很好地推广到真实噪声。我们还提出了 k-Sigma 变换来处理输入和输出数据,以便可以在独立于 ISO 的空间中学习去噪。这使得网络能够处理各种噪声级别,而不会增加网络复杂性。我们的结果表明,所提出的方法可以实现与最先进的方法兼容的性能,这些方法通常采用无法直接应用于移动应用的更大的网络。
在应用中,我们的方法可以集成到现有的相机管道中并替换其去噪组件。由于我们的方法可以生成高质量的去噪原始图像,因此它为 ISP 应用更积极的后处理奠定了坚实的基础。我们的方法已在2019年发布的多款旗舰手机的夜拍模式中得到应用,在移动设备上表现稳定、出色。
未来,我们希望探索如何进一步降低所提出方法的计算复杂度,以便我们可以将其实时应用于视频流。此外,我们相信探索基于深度学习的原始图像处理方法将是有趣且有前途的,这些方法可以改进甚至取代相机的 ISP 管道。
相关文章:

Practical Deep Raw Image Denoisingon Mobile Devices
Abstract 近年来,基于深度学习的图像去噪方法得到了广泛的研究,并在许多公共基准数据集中盛行。然而,最先进的网络计算成本太高,无法直接应用于移动设备。在这项工作中,我们提出了一种轻量级、高效的基于神经网络的原…...

如何在Android项目中制作和使用三方包(jar文件)
文章目录 1 概念介绍2 制作方法2.1 制作步骤2.2 制作结果3 使用方法3.1 具体步骤3.2 示例代码4 内容总结在项目中为了跨部门协作需要把相关的内容打成包文件,基于这个需求,我们将介绍如何把 代码制作成三方包,这里的三方包是指jar文件。同时也会介绍如何在Android项目中使用…...

消息队列Beanstalkd介绍
摘要: Beanstalkd是一个高性能、轻量级的、分布式的、内存型的消息队列系统。最初设计的目的是想通过后台异步执行耗时的任务来降低高容量Web应用系统的页面访问延迟。其实Beanstalkd是典型的类Memcached设计,协议和使用方式都是同样的风格。其基本设计思…...

【C++】继承 ⑥ ( 继承中的构造函数和析构函数 | 类型兼容性原则 | 父类指针 指向 子类对象 | 使用 子类对象 为 父类对象 进行初始化 )
文章目录 一、public 公有继承 - 示例分析1、类型兼容性原则2、类型兼容性原则应用场景 二、类型兼容性原则 - 示例分析1、父类指针 指向 子类对象2、使用 子类对象 为 父类对象 进行初始化3、完整代码示例 一、public 公有继承 - 示例分析 1、类型兼容性原则 类型兼容性原则 :…...

15 | JPA 对 Web MVC 开发者做了哪些支持
我们使用 Spring Data JPA 的时候,一般都会用到 Spring MVC,Spring Data 对 Spring MVC 做了很好的支持,体现在以下几个方面: 支持在 Controller 层直接返回实体,而不使用其显式的调用方法;对 MVC 层支持标…...

链表的概念+MySingleList的实现
文章目录 链表一、 链表的概念1.概念2. 结构 二、MySingleList的实现1 .定义内部类2 .创建链表3. 遍历链表并打印4.查找单链表中是否包含关键字key5.得到链表的长度6.头插法7. 尾插法8.任意位置插入8.删除结点清空 链表 顺序存储:顺序表/ArrayList 优点࿱…...

小黑子—Maven基础
Maven基础 一 小黑子的Maven学习1. Mavn的介绍2. Maven基础概念2.1 仓库2.2 坐标2.3 仓库配置 3. 手动写一个maven项目3.1 Maven项目构建命令3.2 插件创建工程 4. IDEA下的maven项目5. 依赖管理5.1 依赖配置5.2 依赖传递5.3 可选依赖(不透明)5.4 排除依赖…...

【Netty专题】【网络编程】从OSI、TCP/IP网络模型开始到BIO、NIO(Netty前置知识)
目录 前言前置知识一、计算机网络体系结构二、TCP/IP协议族2.1 简介*2.2 TCP/IP网络传输中的数据2.3 地址和端口号2.4 小总结 三、TCP/UDP特性3.1 TCP特性TCP 3次握手TCP 4次挥手TCP头部结构体 3.2 UDP特性 四、总结 课程内容一、网络通信编程基础知识1.1 什么是Socket1.2 长连…...

扬帆起航:许战海方法论日文版正式发布
近日,中国头部战略咨询机构‘许战海咨询’最新研究成果《中国汽车行业新能源转型战略》行业白皮书日文版,即将在日本发布。同时发布的日文版核心方法论白皮书还有《主品牌进化战略》、《第二招牌增长战略》、《链主品牌:制造业的竞争之王》等…...

Docker 安装zookeeper
一、安装单机版 1、拉取镜像 docker pull zookeeper2、创建挂载目录 mkdir -p /mydata/zookeeper/{conf,data,logs}3、新建配置文件 cd /mydata/zookeeper/conf vi zoo.cfgdataDir/data dataLogDir/logs tickTime2000 initLimit10 syncLimit5 clientPort21814、单机主机启…...

项目管理与SSM框架(二)| Spring
Spring简介 Spring是一个开源框架,为简化企业级开发而生。它以IOC(控制反转)和AOP(面向切面)为思想内核,提供了控制层 SpringMVC、数据层SpringData、服务层事务管理等众多技术,并可以整合众多…...

Ubuntu系统忘记Root用户密码-无法登录系统-更改Root密码-Ubuntu系统维护
一、背景 很多时候,我们总会设计复杂的密码,但是大多数时候,我们反而会先忘记我们的密码,导致密码不仅仅阻挡其他用户进入系统,同时也阻碍我们进入系统。 本文将介绍在忘记密码的情况下,如何进入系统并更改…...

webSocket 有哪些安全问题?
WebSocket在实现实时通信和双向数据传输方面非常有用,但也存在一些安全问题需要注意。以下是一些与WebSocket相关的安全问题: 1:跨站脚本攻击(XSS): WebSocket在消息传递过程中可能传输恶意脚本ÿ…...

ArcGis打开影像显示全黑解决方法
我们加载图像,显示如下: 解决方法: 问题分析:Gamma值高于1影像亮化,低于1影像暗化。栅格影像导入进来呈现黑色,可能是因为影像的“Gamma校正”设置出现问题,影响了影像的拉伸度、亮度、对比度等…...

雷达基础导论及MATLAB仿真
文章目录 前言一、雷达基础导论二、Matlab 仿真1、SNR 相对检测距离的仿真①、Matlab 源码②、仿真1)、不同 RCS,SNR 相对检测距离仿真2)、不同雷达峰值功率,SNR 相对检测距离仿真 2、脉冲宽度相对所要求的 SNR 仿真①、Matlab 源…...

设计模式再探——适配器模式
目录 一、背景介绍二、思路&方案三、过程1.适配器模式简介2.适配器模式的类图3.适配器模式代码4.适配器模式,类适配器模式和对象的对比5.适配器模式终极奥秘 四、总结五、升华 一、背景介绍 最近公司在对业务模型做构建的时候,涉及到和三方系统的对…...

【无标题】光伏逆变器的IEC62109测试,逆变器IEC62109测试项目
光伏逆变器的IEC62109测试,逆变器IEC62109测试项目 逆变器又称电源调整器,根据逆变器在光伏发电系统中的用途可分为独立型电源用和并网用二种。根据波形调制方式又可分为方波逆变器、阶梯波逆变器、正弦波逆变器和组合式三相逆变器。对于用于并网系统的…...

Windows用VM虚拟机安装MacOS Ventura 13.6系统全流程教程(附资源)
安装成果: 所需容量:至少40GB的硬盘空间,推荐80GB以上。 所需资源 VMware虚拟机激活密钥:VMware Workstation Pro 17.0.2MacOS Ventura 13.6的ISO镜像MacOS的解锁工具卡顿优化工具:beamoff 有人反馈说需要能用的ISO镜…...

PHP7和PHP8的新特性
PHP 7 新特性: 改进的性能:最显著的变化就是性能提升,据官方报告,PHP 7 的速度是 PHP 5.6 的两倍。 标量类型声明:PHP 7 添加了 int, float, string 和 bool 四种标量类型声明,这使得函数可以通过预定义参…...

mysql按照日期分组统计数据(date_formatstr_to_date)
学习链接 mysql按照日期分组统计数据 博主-山茶花开时的 【Mysql专栏学习】 mysql按照日期分组统计数据 Mysql的date_format函数想必大家都使用过吧,一般用于日期时间转化,如下所示 # 可以得出 2023-01-01 08:30:50 select DATE_FORMAT(2023-01-01…...

【C++程序员必修第一课】C++基础课程-07:switch 分支选择
1 本课主要内容: 为什么需要有 switch 多分支选择?应用场景在哪里?switch 多分支选择的应用讲解:case, break,default 2 主要知识点: 为什么需要有 switch 多分支选择 思考一个问题,数学老师需要统计班上同…...

initramfs介绍
initramfs介绍 什么是initramfs? initramfs(Initial RAM Filesystem)是一种临时文件系统,它在Linux系统启动过程中被加载到内存中。它包含了必要的驱动程序、工具和配置文件,用于在内核启动后挂载真实的根文件系统之…...

数据结构与算法:二分查找(心得)
前言 前些天我做了一道题目,题目中要求使用二分查找,我便按照我心中的二分查找,信心满满的提交上去了。结果发现无限循环,后面我便去查阅了资料 二分查找的条件 用于查找的内容需要是有序的查找的数量只能是一个 二分查找的二种方…...

项目管理之分析项目特点的方法
在管理项目时,了解项目的目标和实现方法可以帮助我们更好地规划和执行项目。根据项目的目标和实现方法的不同,可以将项目分为四种类型:地、水、火和气。 对于工程项目,采用基于活动任务的计划管理方法,使用活动网络图…...

MyBatisPlus(二十一)乐观锁
使用场景 用于当有多个用户同时修改同一条数据的时候,只允许有一个修改成功。 实现原理 使用一个字段,用于记录数据的版本。 当修改数据时,会去检测当前版本是否是正在修改的版本,同时修改成功后会把 版本号 1。 实现方式 配…...

node 通过axios发送post请求(FormData)
方案一: const axios require(axios) const FormData require(form-data) const fs require(fs)const sdUpscaleOnAzure async (req, res) > {const data new FormData()data.append(image, fs.readFileSync(/temp/ai/sd/download/1.png))let config {hea…...

2024 王道考研-数据结构
第二章 线性表算法题(线性表的顺序表示) 二、综合应用题 01.从顺序表中删除具有最小值的元素(假设唯一)并由函数返回被删元素的值。空出的位 置由最后一个元素填补,若顺序表为空,则显示出错信息并退出运行。 算法思想:搜索整个顺序表…...

【疯狂Java讲义】Java学习记录(使用jar命令打包)
jar命令 把多个文件打包成一个压缩包——这个压缩包和WinZip的压缩格式是一样的。 区别在于jar压缩的文件默认多一个META-INF的文件夹,该文件夹里包含一个MANIFEST.MF的文件(清单)。 通常来说,得到的压缩包有3种(压缩格…...

数据库第一、二章作业
只为记录与分享 第1,2章作业.xls 题量: 34 满分: 100 一. 单选题(共34题) 1. (单选题)在数据库中,下列说法( )是不正确的。 A. 数据库避免了一切数据的重复B. 若系统是完全可以控制的,则系统可确保更新…...

将数组拆分成斐波那契序列
题目描述 示例 代码如下: public class SplitIntoFibonacci {LinkedList<Integer> res new LinkedList<>();public List<Integer> splitIntoFibonacci(String num) {if(num.length() < 3) return res;if(dfs(num, 0)) return res;return new…...