【图像拼接 精读】Parallax-Tolerant Unsupervised Deep Image Stitching

news2024/11/24 3:44:00

【精读】Parallax-Tolerant Unsupervised Deep Image Stitching

在这篇论文中,"warp"(变形)和"composition"(组合)是两个关键的概念。"Warp"指的是图像变形的过程,用于调整和对齐图像的不同部分,以减少视差效应。这是实现高质量图像拼接的重要步骤,特别是在存在大量视差的场景中。而"composition"则指的是将经过变形的图像合并成一个统一的整体的过程。这个过程需要精确地处理不同图像之间的过渡,以确保拼接后的图像看起来自然且无缝。这篇论文提出的方法在这两个方面都进行了创新,以提高图像拼接的质量和适应性。

变形(Warp):论文提出了一种结合全局单应性(Homography)和局部薄板样条(Thin-Plate Spline, TPS)变换的方法。这种双重变形方式能够在保证重叠区域对齐精准的同时,保持非重叠区域的形状。这种方法针对对齐和变形进行了联合优化,提高了处理图像视差的能力。

变形(Warp):论文提出了一种结合全局单应性(Homography)和局部薄板样条(Thin-Plate Spline, TPS)变换的方法。这种双重变形方式能够在保证重叠区域对齐精准的同时,保持非重叠区域的形状。这种方法针对对齐和变形进行了联合优化,提高了处理图像视差的能力。

摘要

  1. 传统图像拼接方法:这些方法主要依赖于越来越复杂的几何特征(如点、线、边缘等)来提高性能。但是,这些手工制作的特征通常只适用于具有充足几何结构的特定自然场景。这意味着,当场景缺乏明显的几何特征或纹理时,这些方法的效果可能会大大降低。

  2. 基于深度学习的拼接方案:这些方案通过适应性学习强大的语义特征来克服不利条件,例如在纹理不足或几何特征不明显的场景中仍能有效工作。然而,这些方法通常无法处理大视差情况。大视差是指图像间存在较大的视角差异,这在传统方法中也是一个挑战,但在基于深度学习的方法中尤为突出。

综上所述,传统方法和基于深度学习的方法各有优势和局限。传统方法在具有丰富几何特征的场景中表现良好,但在低纹理或特征不明显的环境中效果不佳;而基于深度学习的方法虽然能适应多种不利条件,但在处理大视差方面存在局限。这些对比表明,图像拼接领域仍然需要进一步的研究和创新,以解决各种复杂场景下的挑战。

论文中提出的一种新型图像拼接技术——抗视差的无监督深度图像拼接技术(UDIS++),以及它是如何解决传统方法和深度学习方法中存在的问题的:

  1. 鲁棒且灵活的变形(Warp):首先,该方法提出了一种鲁棒且灵活的变形模型,它结合了全局单应性(Global Homography)和局部薄板样条(Thin-Plate Spline)运动来模拟图像配准。这种方法通过联合优化对齐和变形,实现了重叠区域的准确对齐和非重叠区域的形状保持。

  2. 迭代策略增强变形适应性:为了提高泛化能力,研究者设计了一种简单但有效的迭代策略,以增强变形在跨数据集和跨分辨率应用中的适应性。这意味着UDIS++能够更好地适应不同的图像来源和质量。

  3. 无监督学习用于缝合驱动的组合掩膜:最后,为了进一步消除视差引起的拼接瑕疵,提出了一种无监督学习方法,用于生成引导缝合线的组合掩膜。这样可以实现拼接图像的无缝组合。

综合来看,与现有方法相比,UDIS++具有抗视差特性,并且免去了为特定场景设计复杂几何特征的繁琐工作。通过大量实验,UDIS++在量化和质量方面均显示出超越现有最先进(State of the Art, SoTA)方法的优势。这表明了UDIS++在处理大视差情况和不同类型场景中的图像拼接方面的显著改进。

1. 引言

  1. UDIS [41] (学习方法):UDIS是一种基于学习的方法,用于处理图像拼接时的大视差问题。但该方法在处理视差区域时会引入模糊(在图中用红色高亮显示)。这意味着虽然UDIS可以处理大视差,但它会牺牲图像的清晰度,特别是在视差区域。

  2. LPC [19] (传统方法):LPC是一种传统的图像拼接方法,它在低纹理场景中效果不佳,尤其是在缺乏足够几何特征的情况下。这表明LPC在没有明显特征来辅助对齐的场景中,可能无法有效地进行图像拼接。

  3. 相比之下,该论文提出的解决方案不受这些限制,能够在这两种具有挑战性的情况下都取得令人满意的结果。这意味着论文中的方法能够更好地处理大视差情况,同时在低纹理或特征不足的场景中也能有效工作,避免了现有方法中的模糊和对齐失败的问题。

  1. 图像拼接的应用领域:图像拼接是一项实用技术,旨在从有限视场(FoV)的不同图像中构建宽视场的场景。这项技术在自动驾驶、医学成像、监控视频、虚拟现实等众多领域都有广泛应用。

  2. 传统拼接方法的发展:过去几十年里,传统的图像拼接方法趋向于采用越来越复杂的几何特征,以实现更好的内容对齐和形状保持。起初,SIFT算法被广泛用于提取关键点和计算适应性变形。随后,线段被证明是另一个能够提高拼接质量并保持线性结构的独特特征。近期,还引入了大规模边缘特征以保持轮廓结构。此外,还有许多其他几何特征被用来提高拼接质量,如深度图、语义平面区域等。

  3. 拼接算法的问题:尽管采用了复杂的几何特征,但这些算法对于缺乏足够几何结构的场景适应性较差,例如医学图像、工业图像和其他低纹理、低光照或低分辨率的自然图像。此外,当存在丰富的几何结构时,运行速度较慢。

  4. 基于深度学习的拼接技术:近年来,使用卷积神经网络(CNNs)的深度拼接技术在学术界引起了广泛关注。这些方法放弃了几何特征,转而采用高级语义特征,这些特征可以在有监督、弱监督或无监督的模式下以数据驱动的方式适应性地学习。尽管这些方法对各种自然或非自然条件都很鲁棒,但它们无法处理大视差情况,并且在跨数据集和跨分辨率条件下的泛化能力不佳。

作者的主要贡献: 

  1. 鲁棒且灵活的变形(Warp):提出了一种通过将单应性(Homography)和薄板样条(Thin-Plate Spline)参数化为统一表示的鲁棒且灵活的变形方法。这种方法实现了在各种场景中的无监督内容对齐和形状保持。这意味着该方法能够在不同类型的图像中有效地对齐和保持图像的结构,而不需要显式的监督或标记。

  2. 新型组合方法(Composition):提出了一种新的组合方法,通过无监督学习生成组合掩膜来创建无缝拼接的图像。与之前的基于重建的方法[41]相比,这种组合方法在消除视差伪影的同时不会引入不希望的模糊。这表明该方法能够更有效地处理拼接边界,避免了以往方法中的常见问题。

  3. 简单迭代策略增强变形适应性:设计了一种简单的迭代策略,以增强变形在不同数据集和分辨率下的适应性。这表明该方法不仅在特定条件下表现出色,而且具有很好的泛化能力,能够适应多种不同的图像源和质量。

2. 相关工作 

2.1 传统图像拼接

  1. 适应性变形(Adaptive Warp)

    • 利用SIFT[38]提取显著关键点以构建全局单应性变换,AutoStitch[4]开创了这一方法。
    • 后续发展了多种灵活的变形方法,例如DHW[13]、SVA[36]、APAP[50]、ELA[28]、TFA[27]等,以实现更好的对齐;SPHP[5]、AANAP[34]、GSP[7]等,用于更好的形状保持。
    • DFW[13]结合LSD[48]提取的线段和关键点,丰富了人造环境中的结构信息。
    • 线引导的网格变形[49]通过优化包含多种保留线条的能量函数来设计[32, 19]。
    • GES-GSP[10]使用边缘特征以实现局部对齐与结构保持之间的平滑过渡。

    此外,深度图和语义平面也被用来辅助特征匹配,通过深度一致性[33]和平面共识[26]来实现。

  2. 缝合裁剪(Seam Cutting)

    • 通常用作后处理操作来组合拼接图像,引入了沿着缝合线的标签分配的优化问题。
    • 为了获得合理的拼接结果,定义了广泛的能量项,通过惩罚光度差异,例如欧几里得度量的颜色差异[22]、梯度差异[1, 8]、运动和曝光感知差异[11]、显著差异[30]等。
    • 然后,这些能量函数通过图割优化[22]来最小化。
    • 此外,缝合裁剪也应用于图像对齐,以找到具有最小缝合线成本的最佳对齐变形[14, 51, 35, 29]。

2.2 深度图像拼接技术 

与传统的基于几何特征的拼接方法相比较:

  1. 摆脱复杂几何特征设计:与传统方法不同,深度拼接方案不依赖于无休止的几何特征设计。它们通过有监督[24, 40, 44, 47, 23]、弱监督[46]或无监督[41]的方式,从大量数据中自动学习捕获高级语义特征,使其对各种具有挑战性的场景都具有鲁棒性。

  2. 无监督深度学习的流行性:在这些方法中,无监督学习[41]更受欢迎,原因在于真实的拼接标签很难获得。这种方法依靠从数据中自主学习,而不是依赖预先定义的几何结构或标签。

  3. 处理大视差的局限性:尽管深度拼接方案在许多方面表现出色,但它们在处理大视差方面存在局限性。这是因为它们通常基于单应性对齐模型,这种模型在面对大视差时可能不够有效。在随后的重建过程中,这可能导致视差区域周围出现不希望的模糊。

尽管深度图像拼接技术在处理具有挑战性的场景方面具有显著优势,但它们在处理大视差问题时仍存在局限。这强调了继续探索和发展更高效、更全面的图像拼接技术的必要性,以解决这些挑战。 

3. 方法

该框架由两个阶段组成:变形(Warp)和组合(Composition)。

  1. 变形阶段

    • 这一阶段的目标是预测一个鲁棒且灵活的变形,以对齐图像并保持形状。
    • 在这个阶段,使用的变形方法不仅能够处理图像间的对齐问题,还能保持非重叠区域的原始形状和结构。这是通过联合优化对齐和变形来实现的。
    • 在这个阶段,方法接受一张参考图像(Ir)和一张目标图像(It),这两张图像具有重叠区域。
    • 方法对这两张图像进行处理,回归出一个鲁棒且灵活的变形。这个变形用于对齐参考图像和目标图像,确保它们在重叠区域能够正确对齐。
  2. 组合阶段

    • 在这个阶段,网络生成与变形后的图像相对应的组合掩膜,以组合出无缝拼接的图像。
    • 这意味着网络不仅对图像进行变形以实现对齐,还通过学习生成掩膜来优化拼接边界,确保拼接的自然性和无缝性。
    • 变形后的图像(Iwr, Iwt)被输入到第二阶段,以预测组合掩膜(Mcr, Mct)。
    • 这些掩膜用于组合出无缝拼接的图像。具体来说,拼接后的图像(S)可以通过以下公式生成:S=Mcr×Iwr+Mct×Iwt。这个公式表示的是,拼接图像是通过将参考图像和目标图像的变形版本(Iwr, Iwt)与相应的掩膜(Mcr, Mct)相乘,然后将结果相加得到的。

这个框架的关键在于它能够处理传统方法难以处理的大视差问题,并且不需要人工设计复杂的几何特征。通过这种方法,可以实现在各种场景下的高质量图像拼接,特别是在包含大视差或复杂几何结构的场景中。 

3.1 无监督变形构建

3.1.1 变形参数
  1. 单应性变换的参数化

    • 单应性变换是一种具有8个自由度的可逆映射,包括平移、旋转、缩放以及无穷远线。
    • 在回归网络中,为了保证非奇异性[39],单应性通常被参数化为四个顶点的运动[9],并使用DLT[15]求解为一个3×3矩阵。
    • 然而,当非平面场景由具有不同拍摄中心的相机捕获时,单应性无法实现准确对齐。传统拼接算法通常使用基于网格的多单应性方案[50]解决这一问题,但这种方案无法在深度学习框架中有效地并行加速[43, 42]。
  2. 薄板样条(TPS)变换

    • TPS变换是一种非线性、灵活的变换,通常用于近似非刚性物体的变形,由两组控制点决定,这些点在平面图像和变形图像之间有一对一的对应关系。
    • TPS变换通过最小化包含数据项和扭曲项的能量函数[20]来参数化(更多细节见补充材料第2.1节)。
    • 公式定义了TPS变换,其中p是平面图像上的任意点,p′是变形图像上的对应点,是变换参数。是一个径向基函数,表示每个控制点对p的影响。

为了解决这些参数,作者根据公式(2)使用N对控制点制定了N个数据约束,并施加额外的维度约束[20](如公式(3)所述)。然后,这些约束可以被重写为矩阵计算形式,并按照公式(4)解决参数。

总体来说,这种变形参数化方法通过结合全局单应性变换和局部TPS变换,实现了在各种场景下更准确和灵活的图像对齐。这对于处理包含大视差的复杂场景尤其重要。

3.1.2 变形Warp流程
  1. 特征提取

    • 使用带有预训练参数的ResNet50[17]作为骨干网络来首先提取语义特征。
    • 这个步骤将3通道的图像映射到高维的语义特征上,其分辨率缩放到原始图像的1/16。
  2. 特征映射的相关性分析

    • 对于提取的特征映射(Fr1/16 和 Ft1/16),使用上下文相关层[43]将它们的相关性聚合成2通道的特征流。
    • 这有助于捕捉参考图像(Ir)和目标图像(It)之间的语义相关性。
  3. 单应性变形的回归估计

    • 接下来,使用回归网络来估计单应性变形的4点参数化。
    • 这个全局变形还生成了控制点的初始运动。
  4. 特征映射的变形和细化

    • 然后,将更高分辨率的特征映射(Ft1/8)变形,以将单应性先验嵌入到后续工作流中。
    • 经过另一个上下文相关层和回归网络后,预测控制点的残差运动,这有助于实现一个鲁棒的灵活的TPS变形。

总的来说,这个流程通过结合全局单应性变形和局部TPS变形,实现了对参考图像和目标图像之间重叠区域的准确和灵活的对齐。这种方法特别适用于包含大视差和复杂场景的图像拼接。

3.1.3 变形Warp优化 

优化函数包括对齐损失与扭曲损失两个方面

1. 对齐损失:

        1. 变形操作:使用的变形操作符号为φ(⋅,⋅)。

        2. 全一矩阵:使用与参考图像 Ir 相同分辨率的全一矩阵(记为 1)。

        3. 对齐损失定义:对齐损失是通过比较经过变形后的图像与原始图像之间的像素级差异来定义的。具体来说,考虑了两种变形:单应性变换(H)和薄板样条变换(TPS)。

        

2. 扭曲损失

为了处理在变形目标图像中的失真问题,论文提出了两种约束:相邻网格间的约束(ℓinter)和网格内部的约束(ℓintra)。其中,相邻网格间的约束旨在保持非重叠区域的几何结构,而网格内部的约束则用于减少投影失真。初始时,论文采用了传统方法中常用的DLT(直接线性变换)来近似非重叠区域的每个网格的相似变换,并以4点投影误差作为损失函数。但是,在深度学习方案中,这种传统约束不再适用。因此,论文从更直观的角度重新探索约束,即通过网格边缘。类似于其他研究,论文提出了一种惩罚超出阈值的网格边缘的方法,并详细描述了网格内部的约束。通过这种方式,论文能够有效地减少在图像拼接过程中产生的投影失真。

3.2 无监督无缝合成

3.2.1 动机
  • 之前的工作(UDIS): 这篇论文引用了一种名为UDIS的技术,该技术通过无监督重建将图像拼接在一起,从特征提取过渡到像素级细节。但是,UDIS无法处理大视差问题。
  • 传统接缝切割技术的局限性: 传统的接缝切割通过动态规划或图割优化找到无缝切割路径来消除拼接瑕疵。然而,这种方法过分依赖于光度差异。
  • 融合思路: 论文提出了将接缝切割的思想融入学习框架中的直观想法。然而,如何使无监督的深度拼接方法与接缝切割有效结合,是一个主要难点。例如,动态规划不是可微的;图割优化为标签分配绝对整数,这在反向传播中截断了梯度。
  • 创新解决方案: 作者提出将硬标签放宽为具有浮点数的软掩膜,并通过两个特殊设计的约束的平衡效果,创新地监督接缝启发式掩膜的生成。
3.2.2 合成流程
  • 初步处理: 首先,将扭曲的图像串联起来作为输入,并使用类似UNet的网络作为合成网络。但这种模式粗略地混合了来自不同图像的特征。对于这样的网络来说,感知扭曲图像之间的语义差异是一个挑战。
  • 解决方案: 为了克服这一点,使用网络的编码器分别从参考图像(Iwr)和目标图像(Iwt)中提取语义特征,并共享权重。对于跳跃连接,通过从Iwr的特征中减去Iwt的特征并将残差在每个分辨率下传递到解码器来替换它们。我们设置最后一层的滤波器数量和激活函数分别为1和sigmoid,以预测扭曲参考图像的掩膜Mcr。扭曲目标图像的另一个掩膜Mct可以通过简单的后处理轻松获得。

 

3.2.3 合成优化

  • 优化目标: 无监督合成的优化目标包括边界项和平滑性项,表示为: 其中,前者表示“接缝”的起点和终点,而后者约束路径。

  • 端点期望: 期望端点位于扭曲图像边界的交点。为了实现这一点,论文利用0-1边界掩膜 Mbr 和 Mbt 来指示“接缝”两侧重叠区域的边界位置。更多细节在补充材料的第3.1节中有介绍。

  • 边界损失公式: 边界损失定义为:

  • 平滑性度量: 为了衡量接缝的平滑性,传统的接缝切割方法定义了基于不同光度差异的多种能量函数。在这项工作中,作者采用了最简单的光度差异D = (Iwr − Iwt)²来展示其有效性。然后,他们在差异图上定义平滑性如下:  其中i, j是笛卡尔坐标。

  • 接缝两侧平滑过渡: 为了在“接缝”两侧产生平滑过渡,还定义了拼接图像的平滑性如下:

  • 平滑性术语的完整公式: 通过添加ℓD和ℓS,构建了完整的平滑性术语Lc_smoothness。值得注意的是,网络训练旨在提高提取语义差异的能力。在推理过程中,提出的方法不再依赖于光度差异。

3.3 迭代变形适应

  • 跨场景和分辨率迁移: 当将预训练模型迁移到其他数据集(跨场景和跨分辨率)时,最常见的方法是在新数据集上进行微调。然而,这通常需要标签来协助适应过程。

  • 无监督优化目标: 在这项工作中,为了解决这个限制,作者设定了一个无监督优化目标,公式如下: 这与公式5相比,去除了单应性对齐损失和畸变损失。因为这些约束已经被预训练模型很好地学习了,所以现在的任务是调整不同数据上的局部对齐。

  • 单样本数据集的特殊情况: 进一步考虑了新数据集只包含一个样本的特殊情况。实验表明,该模型也可以通过迭代方式稳定地优化,以适应单个样本。具体来说,设定一个阈值τ和最大迭代次数T。当迭代次数达到T或连续优化错误(公式13)低于τ时,适应过程停止。

  • 迭代适应示例: 文中展示了一个迭代适应的例子(图3),显示随着迭代次数的增加,伪影显著减少。完成一次迭代大约需要0.1秒。

 

4 实验结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1422612.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【乳腺肿瘤诊断分类及预测】基于LVQNN学习向量量化神经网络

课题名称:基于LVQ神经网络的乳腺肿瘤诊断(类型分类) 版本日期:2023-03-10 运行方式: 直接运行0501_LVQ0501.m 文件即可 代码获取方式:私信博主或QQ:491052175 模型描述: 威斯康辛大学医学院…

NetCore实现输入用户名和密码后访问Swagger页面

1 原理说明 在后端编程时,通常使用swagger文档来呈现接口文档。为了接口的安全性,可通过输入用户名和密码的方式来进行验证。 这里用到了Basic认证方式。原理图如下: 步骤 1: 当请求的资源需要 B A S I C \textcolor{red}{BA…

力扣238. 除自身以外数组的乘积(前后缀和)

Problem: 238. 除自身以外数组的乘积 文章目录 题目描述思路复杂度Code 题目描述 思路 思路1: 1.先求取数组的包括当前下标值得前后缀乘积(利用两个数组记录下来分别为leftProduct和rightProduct) 2.当求取一个下标为i的数组中的元素&#x…

正则表达式补充以及sed

正则表达式: 下划线算 在单词里面 解释一下过程: 在第二行hello world当中,hello中的h 与后面第一个h相匹配,所以hello中的ello可以和abcde匹配 在world中,w先匹配h匹配不上,则在看0,r&#…

【Java 数据结构】LinkedList与链表

LinkedList与链表 1. ArrayList的缺陷2. 链表2.1 链表的概念及结构2.2 链表的实现 3. LinkedList的模拟实现4.LinkedList的使用4.1 什么是LinkedList4.2LinkedList的使用 5. ArrayList和LinkedList的区别 1. ArrayList的缺陷 上节课已经熟悉了ArrayList的使用,并且…

多头 eRCD(Multi-Headed eRCD)

🔥点击查看精选 CXL 系列文章🔥 🔥点击进入【芯片设计验证】社区,查看更多精彩内容🔥 📢 声明: 🥭 作者主页:【MangoPapa的CSDN主页】。⚠️ 本文首发于CSDN&#xff0c…

在哪里申请SSL证书

其实只是单纯的申请SSL证书来说,渠道还是比较多的。只是需要格外注意在申请SSL证书的过程中,对于自身需求的认知。 首先最重要的是,该证书是否可信。就目前而言,非可信根的证书是无法与主流浏览器兼容的,会时常发生风险…

503 Service Temporarily Unavailable nginx 原因和解决办法

前言 HTTP 503 Service Temporarily Unavailable 错误通常表示服务器无法处理请求,可能是由于服务器过载、维护或其他临时性问题导致的。在 Nginx 中,这种错误通常与后端服务的可用性问题相关。以下是可能的原因和解决办法: 正文…

RTC实时时钟之读取时间

1. RTC 基本介绍 RTC(Real Time Clock) 即实时时钟,它是一个可以为系统提供精确的时间基准的元器件,RTC一般采用精度较高的晶振作为时钟源,有些RTC为了在主电源掉电时还可以工作,需要外加电池供电 2. RTC 控制器 2.1 RTC的特点是:…

VxTerm:SSH工具中的中文显示和乱码时的相关信息和一些基本的知识

当我们写的程序含有控制台(Console)输出时,如果输入内容包含中文时,我们一般需要知道下面的信息,才能正确的搞清楚怎么处理中文显示的问题: 1、实际程序或文件中的实际编码: Linux下的应用程序和文本文件,…

mkcert的安装和使用,5分学会在本地开启localhost的https访问方式

mkcert官方仓库地址:https://github.com/FiloSottile/mkcert#installation mkcert 是一个简单的工具,用于制作本地信任的开发证书。它不需要配置。 简化我们在本地搭建 https 环境的复杂性,无需操作繁杂的 openssl 实现自签证书了&#xff…

【开源操作系统】上海道宁为您带来稳定、安全、开源和易用的操作系统——Ubuntu,为您的数字化生活保驾护航

Ubuntu是 源于非洲的一种传统价值观 意为“人性、关爱和共享” 这种价值观在 开源、稳定、安全、易用的 Ubuntu操作系统中 得到了完美的体现 除此之外,Ubuntu还具有 强大的安全性 它自带了诸多安全功能 如防火墙、加密文件系统等 可以有效地保护用户的隐私…

CRF条件随机场学习记录

阅读建议 仔细阅读书[1]对应的序列标注章节,理解该方法面向的问题以及相关背景,然后理解基础的概念。 引言 威胁情报挖掘的相关论文中,均涉及到两部分任务:命名实体识别(Named Entity Recognition,NER&a…

【PyCharm教程】PyCharm 安装、卸载和升级包

PyCharm 为特定的 Python 解释器提供了安装、卸载和升级 Python 包的方法。默认情况下,PyCharm 使用 pip 来管理项目包。对于 Conda 环境,您可以使用conda 包管理器。 在 PyCharm 中,您可以在Python 包工具窗口和 Python 解释器Settings/Pre…

C语言——深入理解指针3

目录 1. 数组名的理解1. 数组名1.2 数组名理解的特例 2. 使用指针访问数组3. 一维数组传参的本质4. 冒泡排序4.1 冒泡排序的概念4.2 冒泡排序的优化 5. 二级指针5.1 二级指针的概念5.2 二级指针的运算 6. 指针数组7. 指针数组模拟二维数组 1. 数组名的理解 1. 数组名 在上⼀个…

重生奇迹MU 骑装选择攻略--剑士

剑士作为唯一一个攻防兼备的近战职业,战士大部分时间需要承担团队的坦克职责,因此我们需要尽可量的提升自己的血量以及防御属性,这样才能在面对敌人和大量野怪时保护好我方的后排目标,并且保证自己能够在猛烈的攻击下支撑更长的时…

HarmonyOS 线程讲解(任务分发、线程通信)

一、简单说明 说起鸿蒙的线程就不得不说Android的线程,相信都知道在Android中,每一个应用都会有自己的主线程和其他的子线程,主线程负责处理大部分业务,负责UI的显示和更新等操作,所以又称之为UI线程,同时…

Docker的使用方式

一、Docker概念 Docker类似于一个轻量的虚拟机。 容器和镜像是Docker中最重要的两个概念,镜像可以保存为tar文件,Dockerfile是配置文件,仓库保存了很多第三方已经做好的镜像。 基本指令 查找镜像 docker search nginx 拉取nginx镜像 do…

文件归类整理,文件归类软件

数字化时代,我们经常面对的一个问题是:电脑中的文件越积越多,找起东西来如同大海捞针。这个时候,一款好的文件归类软件无疑能够帮你节省大量的时间和精力。那还等什么?快来试试这款【文件批量改名高手】软件吧&#xf…

MyISAM和InnoDB区别

MyISAM是括全文索引、压缩、空间函数等,但MyISAM不支持事MySQL的默认数据库引擎(5.5版之前)。虽然性能极佳,而且提供了大量的特性,包务和行级锁,而且最大的缺陷就是崩溃后无法安全恢复。不过,5.…