从移动激光扫描数据中自动提取单棵树的双重生长方法

news2024/10/6 20:30:52

论文题目:A dual growing method for the automatic extraction of individual trees from mobile laser scanning data

Abstract

在城市场景的杂乱点云中,街道树木与其他物体交织在一起,阻碍了对单个树木的自动提取。根据树木的一般构成,提出了一种从移动激光扫描数据中自动提取树木个体的方法。每棵树的两个组成部分——树干和树冠可以通过双重生长法提取。该方法由粗分类组成,通过粗分类去除了大部分伪影;为个别树木自动选择合适的种子,避免了常见的手动初始设置;双重生长过程,通过在适应性生长半径内划分树干并在受限生长区域分割树冠,将一棵树与其他树分开;以及从交错的其他物体中提取单一树干的精炼过程。该方法通过两个数据集验证,完整性超过 98%,正确率超过 96%。捕获个体树的形态参数的低平均绝对百分比误差表明该方法可以高精度地输出个体树。

1. Introduction

移动 LiDAR 系统 (MLS) 的出现提供了一种有效的数据收集器,可以灵活有效地捕获广泛的城市道路环境中的密集点云 (Haala et al, 2008)。许多基于 MLS 数据的研究已经进行,例如对象分类 (Pu et al, 2011; Serna and Marcotegui, 2014; Yang et al, 2015) 和对象识别和提取 (Cabo et al, 2014; Jochem et al) , 2011; Lehtomaki et al, 2010; Nalani, 2014; Rodríguez-Cuenca et al, 2015; Zhu et al, 2011),这显示了 MLS 数据在提取行道树方面的巨大潜力。

最近,一些学者致力于从MLS数据中提取个体树,并提出了在特定上下文中高精度提取个体树的能力。然而,目前的方法在密集物体在局部区域交错混合的复杂环境中,甚至在相邻物体之间遮挡和重叠的杂乱情况下,都存在识别精度低和提取精度低的问题。

本文旨在从MLS数据中自动提取个体树木,为获取树木的形态参数提供准确的数据基础。

本文的结构如下。第2节介绍了激光雷达数据和单棵树提取的相关工作。第3节介绍了提取单棵树的方法,包括粗分类、种子选择、双重生长和逐步细化。第四节使用了两个实验数据集来验证该方法。最后,第5节给出了结论和未来的工作。

2. Related works

2.1. Identification of trees from LiDAR data

十多年前,一些学者开始关注从高分辨率遥感数据中检测和识别树木。Gougeon (1998)通过分析树冠的光谱数据对孤立的单个树种进行分类。后来,提出了一些新的方法来检测和描绘树冠和检测单个树木(Culvenor,2002;Hirschmugl等人,2007年;Pouliot等人,2005年)。然而,这种探测仅限于对座舱盖表面及其2D轮廓的描绘和测量。

光探测和测距(LiDAR)系统的出现提供了一种快速且经济高效的3D数据收集工具,能够更精确地探测和提取树木。根据搭载平台的不同,激光雷达系统可分为机载激光雷达系统(ALS)、地形激光雷达系统(TLS)和移动激光雷达系统(MLS,全称车载激光雷达系统,VLS)。

最近,从激光雷达数据中提取植被引起了极大的关注。最初,ALS数据被用于调查森林(Morsdorf等人,2004年),估计木材体积和计算生物量(Popescu等人,2003年)。之后,许多学者使用ALS数据来识别和提取树(Koch等人,2006;Vega等人,2014),估计树木的几何参数(Kwak等人,2007;范莱文和Nieuwenhuis,2010年)和建立树木模型(加藤等人,2009年;王等,2008)。其中,用于提取树木的方法显示出获得关于树木高度和树冠大小的准确信息的能力,其可以被分类为基于点的(Vega等人,2014;于等,2011)和基于冠层高度模型(Edson和Wing,2011;Lee等人,2010年)。由于采集方式的限制,ALS数据主要反映物体的上表面。因此,由于树冠的遮蔽作用,树木的下部结构总是曝光不足。因此,从树干上的几个激光点测量胸部高度的树干直径(DBH)是困难的(Bucksch等人,2014)。在某些条件下,一些多次返回测量可以产生每平方米多达120个点的点云,这表明了估计DBH的可行性(Dalponte等人,2011年)。

与ALS数据相比,TLS数据具有更高的采样密度和精度。然而,由于TLS的移动性差,收集大范围的TLS数据来提取单个树是低效的。因此,基于TLS数据的研究很少关注单棵树的识别和提取。相反,大多数学者主要集中在识别和提取树结构(巴克奇和林登伯格,2008;Bremer等人,2013),树木形态参数的精确测量(Kankare等人,2013;马斯等人,2008年;Srinivasan等人,2014),树木的精细建模(Delagrange等人,2014;劳莫宁等人,2013)等。

MLS是一种灵活、快速和高效的设备,用于在城市道路环境中高精度地收集物体的3D点云。树木的MLS数据既包括大量的树冠点,也包括丰富的树干点。该特征显示了通过使用MLS数据从复杂的街道环境中提取单棵树的巨大潜力。

2.2. Extraction of individual trees from MLS data

许多研究致力于从城市MLS数据中提取树木。根据关于分割算法的分类方法(Vo等人,2015年),当前用于提取单棵树的方法也可以粗略地分为基于聚类特征的方法(Rutzinger等人,2011年;姚和范,2013;钟等,2013),基于模型拟合的方法(Monnier等,2012),基于区域生长的方法(吴等,2013)。

基于聚类特征的方法广泛用于从MLS数据中提取单个树。Rutzinger等人(2011年)使用3D Hough变换和表面生长来移除大平面(地面和立面),将剩余的点分割为点簇,然后使用高程的标准偏差来测量表面粗糙度。根据表面粗糙度和点密度比率(低于某一高度(0.5 m)的点数和簇的总数之间的比率)从簇中提取个体树。Yao和Fan (2013)通过分析点云的空间累积图来去除人造物体,并使用谱聚类算法将剩余的点(包括自然物体和少量垂直干扰物体)分割成单个物体。最后,通过形状分析提取单棵树。钟等(2013)根据垂直层次特征提取单木。他们首先将去除地面点后剩余的点投影到水平面或网格上,然后标记连续的非空网格。具有相同标记的网格被合并以构成单个物体的点云,该点云按高度被分成五层。最后,通过分析这些图层中的点,可以获得树木的形态参数(如树高、冠幅和树径)。因此,个别树木通过其形态特征与其他物体相区别。这些方法可以快速成功地分离出单棵树,但分离出的树仍然包含许多非树点,这可能导致参数估计的误差。

基于模型拟合的方法主要用于提取具有特定形状的对象,例如平面(Vosselman 等人,2004 年)和球体(Rabbani 和 Van Den Heuvel,2005 年)。 Lalonde et al (2006) 使用 3D 描述符来描述局部几何形状,并将点云分为 3 类:散点,主要表示体积物体(草、树冠等); surface,主要表示平面物体(地面,立面等)和linear,主要表示线状物体(杆状物体)。但是,描述结果仍然很粗糙。基于这项研究,Monnier 等人 (2012) 改进了这些描述,结合概率松弛 (Rosenfeld 等人,1976),并定义了一个新的圆柱描述符。可以通过将不属于立面且被树冠包围的圆柱形树干与最近的体积树冠相结合来提取单个树木。这些基于模型拟合的方法可以在某些特定情况下提取单个树,但在各种情况或复杂几何形状中表现不佳。当使用基于特征的方法或基于模型拟合的方法时,需要对每个提取的树簇进行细化处理。

基于区域生长的方法被许多学者用于 3D 点云分割 (Biosca and Lerma, 2008; Vo et al, 2015),包括分割建筑结构 (Dimitrov and Golparvar-Fard, 2015) 和单个树 (Lu et al , 2014).Wu et al (2013) 使用基于体素的标记邻域搜索(即区域生长)方法从 MLS 数据中提取个体树木,并成功获得了树木的形态参数。他们计算了特定高度截面(1.2-1.4 m)处连续非空体素形成的形状的紧密度指数(CI),以确定树木的种子体素。该方法以高精度提取单棵树,并在具有相似树的相对简单的环境中表现出优异的性能。然而,种子选择和生长标准存在一些问题。一方面,当树干分叉低于高度(1.2-1.4 m)时,手动设置初始搜索高度中的种子对具有多个茎的单木的检测具有明显的限制。另一方面,生长过程根据初始搜索高度而不是树的结构(例如树冠和树干)分为自上而下和自下而上的过程。基于区域生长的方法的单棵树的提取质量在很大程度上取决于种子的选择和多个生长标准。

总的来说,目前用于提取个体树的方法可以在一些简单的上下文中表现良好。然而,这些方法在密集对象交错的复杂环境中表现出低识别精度和不令人满意的结果,即使在相邻对象之间的遮挡和重叠的杂乱情况下也是如此。为了获得更好的效果,上述方法可以在以下两个方面进行改进:

  • 即使在复杂的点簇或混合点簇中,也可以通过选择合适的种子来识别树木,例如那些包含交错树持有人的点簇。
  • 通过生长选定的种子来确定仅属于树的云点,从而将单个树从复杂的点簇中分离出来。

针对这两点和树木的结构特征,本文提出了一种双重生长方法来自动提取个体树木。本文的贡献包括(1)为每棵树自动选择合适的种子,以消除初始搜索高度的手动设置; (2)树干生长过程中的自适应半径; (3) 在树冠生长过程中考虑局部几何特征和重叠树冠的分割,以较少的面积增量为准。此外,对提取的单棵树使用渐进细化。因此,通过这种方法可以更准确地提取单棵树。

3. Dual growing method

城市街道场景的点云可以分为地面点和非地面点(Yang et al, 2015)。所提出的方法旨在从非地面点中提取单棵树。假设地面在局部区域是平坦的并且位于低海拔区域。因此,可以通过分析局部区域点的高度来去除它。首先,将原始点云分割成水平网格。根据等式。 (1),这样的网格(行,列)中的点被认为是地面点。

在这里插入图片描述
其中 Hmax i;j 和 Hmin i;j 是网格 (i, j) 中的最大高度和最小高度。 Hground k是距离网格(i,j)中心最近的轨迹点k在半径为Rrange的水平范围内的最小高度。 DHmin和DHground是高差阈值,视实际情况而定。网格大小 (Lgrid) 和半径 (Rground) 的参数选择并不重要。少量的错误分类不会影响后续的双重生长方法。此外,这里也可以应用其他提取地面点的方法。

在没有地面点连接的情况下,可以实现欧几里德意义上的简单点聚类方法,这在本质上类似于洪水填充算法(Rusu,2009)。因此,短距离(<0.3 m)的点被分组为一个簇。否则,它们被分成不同的集群。只有满足最小簇大小标准的簇才可能包含树,这可以用来去除那些小对象,包括异常值。

整体工作流程如图 1 所示。

3.1. Coarse classification

一个点簇可能包含对象的混合点云,在一个步骤中从中清楚地分离出一棵单独的树并不容易。因此,逐步分离是更好的策略。第一步是提取可能包含至少一棵树的候选树簇。冠具有不规则的几何形状,其局部表面法线 (SN) 具有分散分布,而具有规则结构的物体的 SN 主要垂直或平行于水平面。 SN 的角度偏差可以通过等式计算。 (2). SN 的平均角度偏差可以通过等式计算。 (3)并用作特征值(Eirr)来衡量点云的SN分布。

在这里插入图片描述
其中 hi dev 是点 pi 的 SN 的角度偏差,n !i 是 pi 的 SN,hðn !iÞ 是 n !i 与水平面之间的角度。表面法线估计是最近邻 § 中的最小二乘平面拟合估计问题,可以使用主成分分析 (Rusu, 2009) 计算。这里 n !i 是通过分析协方差矩阵 M(等式(4))的特征向量和特征值来估计的,该协方差矩阵 M(等式(4))是从 P 在半径为 Rn(例如,0.5 m)的球体中创建的。

在这里插入图片描述
其中 k 是 P 中的点数,?p 是 P 的质心:?p ¼ 1 k Pk i=1pi。

通过分析数百个规则结构和不规则结构的 Eirr 找到阈值 (g),可用于将不规则结构与规则结构分开(等式(5))。当点云的 Eirr 低于 g 时,该因子被定义为代表规则结构。否则,它代表一个不规则的。

在这里插入图片描述
根据树的整体形状,可以利用簇上半部分的截面计算Eirr,以决定是否将其视为树冠截面。一旦它们的值都高于g,则该簇将被视为候选树簇。然而,许多城市物体,如路灯和不完整的立面,在其顶部和中部也有不规则结构,这可能导致这些部分的 Eirr 高于 g。因此,如果只分析整个上半部分的 Eirr,这些非树类可能会被错误分类为候选树类。考虑到效率和准确性,发现将每个簇分成六个部分并分析上面三个部分的Eirr可以将候选树簇与大多数非树簇区分开来。此外,候选树簇的高度阈值(H)是去除灌木和灌木所需要的,它由灌木和灌木的最大高度决定。

在这里插入图片描述

图 1. 我们方法的整体工作流程。

3.2. Detecting seeds of trees

一旦完成粗分类,就获得了候选树簇。为了有效地管理点云,每个候选树簇都被组织成 3D 体素 (Cabo et al, 2014),这些体素按层进一步组织(自下而上,然后是 Layer0;Layer1;Layer2;…)。

一棵树的一个典型特征是它的两部分,即树冠和树干,它们提供了与其他树不同的特征。识别树冠和树干对于在点云中隔离单个树至关重要。与树冠相比,树干的直径更小,占用的体素更少。此外,树干位于树的下部,每个树干的点与其他树干的点在空间上是分开的,这显示了为每棵树选择树干上合适的种子的能力。在 Layer0 和 Layerhalf (ceil (Layertop=2)) 之间且具有最少体素数的层被视为 Layerinitial。通过分割该层中的体素,找到表示躯干部分的每个体素组并将其作为初始种子(图 2)。

然而,候选树簇可能包含其他对象(例如,灯杆;图 2​​),因此种子可能不属于树。有必要使用典型的树特征将单个树的种子与其他树的种子区分开来。

在街景中,一棵树可以通过以下特征与人造物体区分开来:

(i) 一棵树可以分为树冠和树干。
(ii) 冠具有近似圆形的横截面、大直径和不规则形状。
(iii) 树干位于相应树冠的水平中心附近,其直径小于具有相对圆柱形的树冠。

根据这些特征,与树干相比,树冠可以通过更大的横截面来识别,如其周长和直径所示(图 3)。此外,不同高度横截面积的绝对变化将树冠与树干区分开来。因此,每层体素组中的点的水平凸包(图4)可以用来描述相应高度处物体的横截面,并区分每个候选树簇中的物体。

在这里插入图片描述

图 2. 候选树簇的体素化。

在这里插入图片描述

图 3. 一棵树的横截面分析。

在这里插入图片描述

图 4. 候选树簇的横截面分析。 (a) 候选树簇的体素化。 (b) 不同体素组中点的俯视图。

执行向上横截面分析以区分树干上的种子与其他种子。分析从种子(初始体素组)开始,向上层追踪相邻的体素组,寻找新的体素组,直到体素组符合树冠规则(式(11))或没有找到新的体素组(参见算法 1)。在此向上追踪过程中,除非找到第一个冠层,否则在横截面分析之前计算向上追踪的体素组的 Eirr 值(Eq.(3))。体素组的 Eirr 值大于 g(等式(5))的第一层被定义为树的第一树冠层。然后比较每个种子中点的水平凸包(CHinitial)和Layeri中对应的向上跟踪体素组中点的水平凸包(CHi, i P initial)通过几何变化(Rup in Eq. (9)) ) 由面积(式(6))、周长(式(7))和直径(式(8))计算。 CHi与对应圆的逼近度由式(10)计算。

在这里插入图片描述
其中 a + b + c ¼ 1 和 a ¼ 2b ¼ 2c ¼ 0:5。

根据这些计算,皇冠可按以下规则区分:
在这里插入图片描述
其中,SDcrown 为冠部所需的最小直径,SAcrown 为冠部所需的最小圆度,SHup 为冠部所需的最大几何参数比。

当一个体素组满足上述规则时,就认为找到了一个冠。因此,该种子可能位于树干上。但是,当极点接触树冠或相邻树冠重叠时,多个种子可能会追踪同一体素组(图 4)。如果不同种子之间的水平距离小于两个行道树之间的最小间隔距离(根据行道树的生长规范,例如3 m),则仅将距离同一体素组中心最近的种子视为种子在行李箱上。否则,种子被认为是不同树干上的种子。以下几行总结了向上的横截面分析步骤:

算法 1. 向上横截面分析算法。

在这里插入图片描述
由于体素被分为下部的树干层和上部的树冠层,因此实施了更精细的种子双重生长过程。

3.3. Dual growing

根据树冠和树干的形态差异采取不同的生长策略。

在这里插入图片描述

图 5. 主干点从初始层增长到第 0 层。 (a) 种子点 (Layeri); (b) 和 © 在序列下层 (Layeri?1 和 Layeri?2) 中生长的主干点,(d) 在底层 (Layer0) 中生长的主干点。

3.3.1. Trunk point growing

一般来说,树干是一个圆柱形的垂直物体。其横截面近似圆形,逐渐变化。因此,利用自适应圆逐层约束树干的水平生长范围。生长包括一个下溯过程和一个上溯过程。它从种子开始,计算种子中点的最小边界圆(MBC,中心:P;半径:r)(图5(a))。在向下生长的过程中,用一个更大的圆圈(圆心:P;半径=R>r)来约束下一层(上层为上溯,下层为下层)点的水平生长范围.根据我们对几种树干选择不同半径的经验,R = 1.2r时效果最好,既能满足树干的正常生长又能避免过度生长。然后圆圈内的点被认为是主干点(图 5(b))。一旦得到当前层的主干点,就可以计算出这些点的新MBC(中心:P;半径:R)和下一层点的增长范围(中心:P;半径:1.2R) (图 5(c 和 d))。这个重复的步骤直到底部或顶部主干层完成生长才结束(见算法 2)。此过程的修订版本适用于向上跟踪过程。以下几行总结了主干点增长步骤:

算法 2. 树干点增长算法。

在这里插入图片描述
在这里插入图片描述

图 6. 从小体素到大体素的过渡。

3.3.2. Crown voxel growing and segmentation

由于树冠点相对稀疏,形状多样,分布广泛,因此使用比原始大小(Lvoxel)大1.5倍的体素进行树冠生长,以避免体素中的点太少。冠层中的所有点都用大体素尺寸新体素化,新的底层作为初始冠层(Layer0)。包含每棵树原始第一冠层(蓝色)中的点的新大体素被视为种子体素(红色)以继续向上追踪(图6)。 Layer0 中的种子体素将首先生长,上层的种子体素将在其层中进行生长之前不会开始生长。

在这里插入图片描述

图 7. Layeri+1 中树冠的生长过程。红色点是未标记的点。绿点代表 Tree1。蓝点代表 Tree2。 (a) Layeri 的成果越来越大; (b) Layeri 中标记的体素和 Layeri+1 中的点; © Layeri+1 向上增长; (d) Layeriþ1 中 Tree1 的体素生长; (e) Layeri+1 中 Tree2 的体素生长和分割以及 (f) Layeri+1 中的生长结果。 (为了解释这个图例中对颜色的引用,读者可以参考本文的网络版本。)

在这里插入图片描述

图 8. 分离重叠的牙冠(黄色体素)。带有红色点的红色体素是要分割的体素。 (a) 生成体素点的凸包; (b) Tree1、Tree2 的凸包及其面积增量(红色)。 (为了解释这个图例中对颜色的引用,读者可以参考本文的网络版本。)

(1) Crown voxel growing

冠体素生长过程包括向上生长和当前层8邻域生长。生长从牙冠初始层中的体素开始。实施向上生长是因为树冠在垂直方向上具有大致自然的延伸结构。如果 Layeri+1 中的体素与 Layeri 中的冠体素具有相同的列和行,并且冠体素的 Eirr 高于 g,则认为它是冠体素(图 7(b)和(c))并被视为作为在 Layeriþ1 中生长的种子体素。考虑到树冠的不规则性和横截面积的变化,体素从当前层中的种子体素在水平方向上扩展(图7(d))。搜索到的体素是否为冠体素由式(3)和(5)决定。由于太稀疏的点不能很好地反映局部特征,只有具有足够点的体素才被用来生长。然后,将新冠体素作为种子体素继续水平8邻域生长。一旦在当前层没有发现新的冠体素,再次执行向上生长。当候选树簇中有几棵树时,树的生长在当前层中一棵一棵地进行,然后是下一层。这个重复的步骤直到顶部冠层完成生长才结束(见算法 3)。然而,一旦在树冠生长过程中被两棵不同标记的树搜索到体素,就会使用分割来分割重叠的树冠。

(2) Segmentation of overlapping crowns

虽然属于两个重叠冠的点在空间上是相邻的,但这些点与两个冠具有不同的一致性。树冠形态的一致性可以通过连续层上横截面积的变化形式来衡量。因此,提出了一种较少面积增量的规则来分割重叠的树冠。对于每个生长的体素,通过等式(12)计算与面积增量的一致性测量。

在这里插入图片描述
其中 Si 是由向上生长创建的体素组中的投影点生成的凸包 (CH) 的面积,Sgrow 是由体素组中的投影点生成的 CH 的面积和要分割的体素中的点 (Sgrow P Si)。

当用两棵不同树的树冠体素搜索时,重叠的生长体素可以计算两次。这种类型的体素属于 Areagrow 值较小的树。例如,图 8 基于当前层 (Layeri) 显示了两棵树,即 Tree1(绿色)和 Tree2(蓝色)。增长的体素(红色)可以通过等式计算两次。 (12) 与 Tree1 和 Tree2 的体素组。因此,Area1 增长 6 Area2 增长,因此增长的体素被认为是 Tree1 并继续其 8-neighborhood 增长。图 7(e) 显示了分割结果。

此外,那些未标记的体素(图7(d和e)中的红色体素)如果与冠体素相邻并且使用较少面积增量的规则分割则直接视为冠体素(图7(f)) .冠体素逐层生长的整个过程如图7所示。以下几行总结了整个冠体素的生长和分割步骤:

算法 3. 冠体素生长和分割算法。

在这里插入图片描述
在这里插入图片描述

3.4. Gradual refinement

向下追踪和向上追踪完成后,整棵树,包括树干和树冠,由具有相同标记的点组成。然而,有时由于树干支架(图9(a))或树下部其他物体的影响,无法找到纯树干部分的初始层。包含树干支架或其他物体体素的种子可能会产生过度约束的半径并导致非树点增长。为了去除树干以外的对象,种子选择和树干点生长过程再次应用于被视为候选树簇的提取的个体树。因为在第一次树干点生长过程中去除了一些树干持有点并且单个树木已经被提取出来,在没有其他对象点的情况下,找到纯树干部分并获得合适的种子变得更加容易。因此,约束半径减小,可以删除更多的行李箱支架点。此外,使用适度较小的体素也有类似的效果,这可能会为渐进细化带来更好的性能。经过多次迭代,当主干点数趋于稳定时,这种逐步细化就完成了。在此过程中,随着树干支架点的逐渐去除,提取树干的精度也逐渐提高(图9(b-e))。

在这里插入图片描述

图 9. 逐步细化过程。 (a) 带有树干支架的树,这些树干支架通常是围绕树干并支撑树木的杆状物体; (b) 候选树簇; © 第一次树干生长过程后提取的树; (d) 第二次树干生长过程后提取的树; (e) 第三次树干生长过程后提取的树。

5. Conclusions

提出了一种通过粗分类、选种、二元生长和逐步细化的方法从激光扫描数据中提取单株树。所提出方法的明显优点在于它能够自动选择合适的种子,根据树木的典型特征将树木与其他物体区分开来,并将一棵树与其他树木或物体分开。这些优势提供了从复杂的城市场景中提取单个树木的能力。

实验中使用了两个数据集,其中包括多个物种的树木、其他对象和交错对象,以展示该方法。具有密集点云上下文的两个实验数据集在提取个体树方面表现出非常好的性能。两项测试实现了树木检测的98%以上的完整性,个体树木提取的正确率超过96%,树木形态参数的平均绝对百分比误差非常低:树冠直径为2.74%,树冠直径为3.41%树冠面积,树高0.01%,树干直径3.76%。即使包括带有交错支架的树干,树干直径的平均绝对百分比误差也只有大约 10%。基于这些结果,所提出的方法不仅可用于提取个体树,而且可用于捕获树的属性。此外,在提取过程中仅使用点的xyz坐标,这意味着该方法具有广泛的适应性。

此时,我们的双重生长方法侧重于将单个树木与复杂环境中的其他物体隔离开来,在复杂环境中,密集物体在局部区域交错混合。然而,很少有人关注躯干弯曲、躯干倾斜度大和躯干不完整的情况。这些问题将在本研究的下一步中进行研究。

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

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

相关文章

React:安装配置使用scss

目录 前言&#xff1a; 1.暴露隐藏的webpack配置&#xff1b; 2.安装sass的相关包&#xff1b; 3.项目中新建一些scss文件&#xff1b; 4.在config文件夹中找到webpack.config.js文件&#xff0c;进行配置&#xff1b; 5.测试使用&#xff1b; 前言&#xff1a; 项目采用…

Python之Pandas的常用技能【写入数据】

1、背景&#xff1a; 最近在工作中遇到越来越多的的使用pandas或者python来处里写入操作&#xff0c;尤其是对excel文件或者csv文件的操作更是常见&#xff0c;这里将写入操作总结如下&#xff0c;方便记忆&#xff0c;也分享给大家&#xff0c;希望对阅读者能够有所帮助 2、…

nvdiffrec:Extracting Triangular 3D Models, Materials, and Lighting From Images

论文主页 https://nvlabs.github.io/nvdiffrec/git主页 https://github.com/NVlabs/nvdiffrec新闻报道 https://redian.news/wxnews/36324YuQiao0303 读后感 https://blog.csdn.net/qq_34342853/article/details/125622816b站演示效果视频 https://www.bilibili.com/video/BV1P…

8天获offer|祝贺信息技术老师获CSC资助赴意大利访学

I老师拟申报CSC青年骨干教师项目&#xff0c;指定欧洲学校&#xff0c;且要求半个月内获得邀请函。我们8天就取得了意大利帕多瓦大学的offer&#xff0c;研究方向完全相符&#xff0c;因而顺利通过了CSC审批。后经繁琐的手续&#xff0c;I老师最终获得签证&#xff0c;如期出国…

ABB机器人设置有效载荷的2种方法具体步骤(直接输入法+自动识别推算法2)

ABB机器人设置有效载荷的2种方法具体步骤(直接输入法+自动识别推算法2) 为什么要设置有效载荷Loaddata? 对于搬运应用的机器人只有设定正确的工具和载荷数据,机器人才能正确的工作; 对于搬运比较重的产品,或工具的重量也比较重,需要设置工具及搬运对象的重心和重量; …

2023年黑马Java入门到精通教程--程序流程控制

程序流程控制 程序执行的几种常见形式 分支结构 If分支 根据判定的结果&#xff08;真或假&#xff09;决定执行某个分支的代码 If分支的作用 If分支有三种格式 switch分支 也是匹配条件去执行分支, 适合做值匹配的分支选择&#xff0c;结构清晰&#xff0c;格式良好 swit…

通信原理笔记—基带信号的检测与最佳接收

目录 在加性白高斯噪声信道条件下数字基带信号的接收&#xff1a; 加性高斯白噪声干扰下的信号检测&#xff1a; 最大似然判决准则&#xff1a;误码率最小意义上的最佳判决&#xff1a; 先验等概及最佳判决时的误码率计算&#xff1a; 高斯噪声干扰下二进制信号的检测&…

Mock.js(简单代替后台)

Mock.js &#xff08;官网http://mockjs.com/&#xff09;是一款模拟数据生成器&#xff0c;旨在帮助前端开发人员独立于后端进行开发&#xff0c;帮助编写单元测试。二、为什么使用mockjs在做开发时&#xff0c;当后端的接口还未完成&#xff0c;前端为了不影响工作效率&#…

【实际开发12】- Utils / tools

目录 1. 自定义工具类 概念 / 解析 1. 构建方式 1. XxxClassl 类 public xxx() → new XxxClass() 2. XxxClassl 类 public static xxx() → XxxClass.xxx() 2. Interface 1. public interface XxxMapper → private final XxxMapper 2. public interface IXxxService →…

面经八,笔试加面试

Java 开发面试题&#xff0c;尧壁信科有限公司 笔试&#xff1a; 1、Java 中有几种类型的流&#xff1f; 字节流字符流&#xff0c;输入流输出流 2、什么是 java反射? 在程序的运行状态中&#xff0c;对于任意一个类&#xff0c;都可以知道整这个类的所有属性和方法&#xf…

如何锁定Excel表格的公式不被修改

很多小伙伴在制作Excel表格的时候&#xff0c;往往还会设置很多公式&#xff0c;但如果不小心或被他人随意修改了公式&#xff0c;就会造成数据错误&#xff0c;为了避免这种情况&#xff0c;其实我们可以设置保护&#xff0c;让公式锁定无法被修改。 下面举一个例子来看看如何…

【C语言 数据结构】串

文章目录串类型的定义串的表示和实现定长顺序存储堆分配存储表示串的块链存储表示串的模式匹配算法字串的定位函数匹配模式的改进算法串类型的定义 对于由多个字符&#xff08;≥ 0&#xff09;组成的字符串&#xff08;例如 http://data.biancheng.net&#xff09;&#xff0…

Git版本如何使用命令进行升级(win10)

1、桌面鼠标右键&#xff0c;点击Git Bash Here,输入git --version 查看目前Git版本。 2、输入git update-git-for-windows 升级版本&#xff0c;再输入y同意升级并覆盖之前的版本。 我在版本升级的过程中遇到了error: RPC failed&#xff1b; curl 92 HTTP/2 stream 0 was not…

SaaS-API越权漏洞检测系统

概述通过替换认证信息后重放请求&#xff0c;并对比数据包结果&#xff0c;判断接口是否存在越权漏洞特点支持HTTPS自动过滤图片/js/css/html页面等静态内容多线程检测&#xff0c;避免阻塞支持输出报表与完整的URL、请求、响应安装和使用安装依赖git clone https://github.co…

Eyeshot 2023 测试版,离发行版不远了

Eyeshot 2023 测试版 这个 Beta 版本来得太晚了&#xff0c;因为我们决定放弃许多客户不喜欢的 v2022 GEntities。该产品已根据以下架构进行了完全重构。例如&#xff0c;使用 Eyeshot 2023 可以非常轻松地在 Web 项目中使用没有 UI 的产品。这也简化了从 Eyeshot 2021 版的项…

【软件测试】6年资深测试总结的,测试人常常犯的9大误区,背锅不存在的......

目录&#xff1a;导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09;前言 1、把原型设计、UI效…

Chapter3:机器人系统设计

ROS1{\rm ROS1}ROS1的基础及应用&#xff0c;基于古月的课&#xff0c;各位可以去看&#xff0c;基于hawkbot{\rm hawkbot}hawkbot机器人进行实际操作。 ROS{\rm ROS}ROS版本&#xff1a;ROS1{\rm ROS1}ROS1的Melodic{\rm Melodic}Melodic&#xff1b;实际机器人&#xff1a;Ha…

无忧·企业文档自助配置完成单点登录配置,对接企业原有组织架构

我作为企业文档的产品负责人&#xff0c;常常被问及企业文档和其他在线文档有啥差不一样的地方&#xff1f;我大致总结了下&#xff0c;有几个方面&#xff1a;1、企业文档定位于企业内部的内容管理工具&#xff0c;侧重于私有化部署。核心的是数据的控制权在企业自己手中&…

类和对象-对象特性

前言&#xff1a;主要讲述对象的初始化与清理&#xff0c;构造函数与析构函数&#xff0c;其分类和调用&#xff0c;以及调用时机等相关内容对象的初始化与清理&#xff1a;1.生活中我们买的电子产品都基本会有出厂设置&#xff0c;在某一天我们不用的时候也会删除一些自己的信…

Java基础多线程下篇

本篇本文目录:一.线程死锁1.重入锁2.释放锁3.死锁4.wait和notify二.锁1.ReentrantLock2.Condition3.ReadWriteLock4.StampedLock5.Semaphore6.线程并发安全(1) concurrent(2) atomic三.线程池1.通过线程池分配线程2.FixedThreadPool3.CachedThreadPool4.ScheduledThreadPool四.…