【论文精读】360MVSNet

news2024/11/20 2:33:11

今天读的是发表在WACV2023上的MVS文章,该文章提出了基于全景相机的MVS pipeline。
文章链接:点击前往
代码链接:暂未开源。

文章目录

  • Abstract
  • 1. Introduction
  • 2. Related works
  • 3. Method
    • 3.1 Feature Extraction
    • 3.2 360 Spherical Sweeping
      • 3.2.1 Preliminary: Spherical coordinates
      • 3.2.3 Feature map warping
    • 3.3 Multi-scale Cost Volume
    • 3.4 Depth Regression and Loss Function
  • 4. Synthetic Dataset: EQMVS
    • 4.1 Data Acquisition
  • 5. Experiments and Results
    • 5.1 Implementation Details
    • 5.2 Performance
  • 6. Conclusions and Future Works

Abstract

随着深度学习技术的进步,最近的多视图立体方法取得了可喜的成果。 尽管取得了进展,但由于常规图像的视野有限,重建大型室内环境仍然需要收集许多具有足够视觉重叠的图像,这是相当劳动密集型的。 360° 图像覆盖的视野比常规图像大得多,并且有助于捕获过程。 在本文中,我们介绍了 360MVSNet,这是第一个用于具有 360° 图像的多视图立体的深度学习网络。 我们的方法将不确定性估计与球形扫描模块相结合,用于从多个视点捕获的 360° 图像,以构建多尺度成本量。 通过以粗到细的方式回归体积,可以获得高分辨率的深度图。 此外,我们还构建了 EQMVS,这是一个大型合成数据集,由等距柱状投影中超过 50K 对 RGB 和深度图组成。 实验结果表明,我们的方法可以重建大型合成和真实世界的室内场景,其完整性明显优于以前的传统和基于学习的方法,同时在数据采集过程中节省了时间和精力。

1. Introduction

介绍了MVS的一般流程和当前状况下的问题,全景相机发展很好,尽管可以将 360° 图像变形为多个透视图图像,然后应用经典的 MVS 方法,但它不是最优的,因为它忽略了 360° 图像中的连续几何信息。
本文贡献有两个:

  1. 提出了首个基于全景相机的MVS框架。
  2. 提出了EQMVS,一个大规模的 360° 图像合成 MVS 数据集。

2. Related works

介绍了传统MVS、基于深度学习的MVS和全景相机的深度估计与立体匹配。

360MVSNet的网络架构

3. Method

我们的目标是从一组 360° 图像重建 3D 场景结构。 与以前的方法类似,我们的方法遍历图像并一次预测它们的深度图。 每次,我们的方法都会选取一个参考图像并使用 N 个附近的源图像估计其深度图。 在估计所有深度图之后,将它们合并在一起以产生最终的场景点云。 图 2 描述了我们的网络架构,用于预测具有一组源图像的参考图像的深度图。 为了生成高分辨率的深度图,我们的模型以从粗到精的方式工作。 它由三个不同尺度的阶段组成,从最粗糙的阶段开始。 在每个阶段,我们的方法首先为所有输入的 360° 图像提取特征(第 3.1 节)。 然后,它使用建议的 360° 球面扫描算法(第 3.2 节)将源特征映射到以参考视图为中心的多个虚拟球体上,并构建成本量(第 3.3 节)。 最后,将成本量回归到预测的深度图中(第 3.4 节)。

3.1 Feature Extraction

我们的第一步是提取 N + 1 N+1 N+1 个输入图像的特征图 { F i } i = 0 N \{F_{i}\}^{N}_{i=0} {Fi}i=0N,其中 I 0 I_{0} I0 是参考图像,其余的是源图像。 为了捕获不同分辨率的信息,我们采用具有跳跃连接的 U-Net 结构来形成多尺度特征提取器。 具体来说,编码器包含一组卷积层,每个卷积层后跟一个批量归一化和一个 ReLU 激活层。 步幅为 2 的卷积用于逐步下采样特征图的空间维度。 解码器层对特征进行上采样并与来自skip connection的特征连接。 然后应用转置卷积逐渐恢复图像信息。 对于第 i i i 个源图像 I i I_{i} Ii,特征提取器在三个不同的尺度上提取其特征图 F i = ( F i 1 , F i 2 , F i 3 ) F_{i} = (F^{1}_{i}, F^{2}_{i}, F^{3}_{i}) Fi=(Fi1,Fi2,Fi3)。 三个特征图的分辨率分别为 W 4 × H 4 \frac{W}{4} \times \frac{H}{4} 4W×4H W 2 × W 2 \frac{W}{2} \times \frac{W}{2} 2W×2W W × H W \times H W×H,其中 ( W , H ) (W,H) (W,H)是输入 360° 图像的宽度和高度。

3.2 360 Spherical Sweeping

我们提出了一种 360 度球形扫描模块,该模块考虑了来自 360° 图像的几何信息。 我们的模块受到平面扫描和鱼眼球面扫描算法的启发。 它将等距柱状图像的特征图变形到具有不同半径的参考视图的虚拟球体上,以形成cost volume。 该模块是完全可微分的。 因此,我们可以将其无缝集成到我们的训练过程中。 我们的方法与以前的球形扫描算法之间的主要区别是两个。 首先,我们的网络使用 360° 图像作为输入。 其次,以前的方法旨在从单个视点估计全向深度图,而我们遵循大多数 MVS 方法的惯例,并使用从多个不同视点捕获的图像重建场景几何。 因此,在估计参考视图的深度图时,我们的 360° 球面扫描算法需要推导出两个视点之间的关系,然后基于两个 360° 图像构建cost volume。

3.2.1 Preliminary: Spherical coordinates

在这里插入图片描述
球坐标和相机坐标之间的映射。 图 3 (a) 定义了本文中使用的球形相机模型。 在360°相机的3D相机坐标系中,点 P ( X , Y , Z ) P(X,Y,Z) P(X,Y,Z)可以用归一化球坐标 ( R , Θ , Φ ) (R,Θ,Φ) (R,Θ,Φ)表示,其中 R , Θ , Φ R,Θ,Φ R,Θ,Φ分别为到原点的距离、仰角和方位角。 我们可以通过计算将点从 3D 相机坐标系转换到归一化球坐标系:
在这里插入图片描述
具体来说, Θ ∈ ( − π 2 , + π 2 ) Θ ∈ (−\frac{π}{2} ,+\frac{π}{2} ) Θ(2π,+2π) Φ ∈ ( − π , + π ) Φ ∈ (−π,+π) Φ(π,+π)。 我们还可以通过以下方式将归一化球坐标映射到 3D 相机坐标:
在这里插入图片描述
图像和球面坐标之间的映射。 我们使用具有经纬度投影的等距柱状图像来存储 360° 相机捕获的场景信息。 从分辨率为 W × H W \times H W×H 的等距柱状图像中的像素 ( x , y ) (x,y) (x,y) 到球坐标中对应的单位向量的映射可以写为:
在这里插入图片描述
3D 和图像坐标之间的映射。 相机坐标中的 3D 点 P ( X , Y , Z ) P(X, Y, Z) P(X,Y,Z) 到等距柱状图像坐标中的 2D 像素 p ( x , y ) p(x, y) p(x,y) 的投影 f ( P ) f(P) f(P) 可以通过引入仰角和方位角来获得:
在这里插入图片描述
其中,仰角和方位角可以通过公式 2 和公式 3 计算。

给定 2D 像素 p ( x , y ) p(x, y) p(x,y) 的深度值 d d d,我们还可以使用 f ( P ) f(P) f(P) 的反函数将 p p p 从图像坐标反投影到其对应的 3D 坐标 P ( X , Y , Z ) P(X, Y,Z) P(X,Y,Z)
在这里插入图片描述
其中 Φ Φ Φ Θ Θ Θ 可以通过方程式5、6使用图像分辨率来计算。 注意,我们在球坐标中估计的深度值是点与球体原点之间的距离(即 R R R),而不是传统针孔相机中的深度值。

3.2.3 Feature map warping

为了构建cost volume,我们的 360 度球形扫描将源图像的特征图warp到一系列虚拟球体上,这些虚拟球体基于深度假设具有不同的半径(图 3 (b))。 我们使用外参来连接参考视图和源视图的局部相机坐标。 将一个点从参考视图投影到第 i i i 个源视图的投影 M i M_{i} Mi 可以通过concatenate矩阵 P 0 − 1 P^{−1}_{0} P01 (将一个点从参考视图的相机坐标转换为世界坐标)和矩阵 P i P_{i} Pi(从世界坐标转换为第 i i i 个源视图的相机坐标) 来获得:
在这里插入图片描述
其中 P i P_{i} Pi是第 i i i个视角的满秩的 4 × 4 4 \times 4 4×4矩阵:
在这里插入图片描述

R i R_{i} Ri T i T_{i} Ti分别是旋转矩阵和平移向量。

现在,我们可以使用以下反向warp过程将第 i i i 个源特征变形到以参考视图为中心的半径为 r k r_{k} rk 的第 k k k 个虚拟球体上:对于变形特征图中的每个像素 p ( x , y ) p(x, y) p(x,y),我们首先将其转换为球坐标,并投影到具有深度假设 r k r_{k} rk 的参考视图的 3D 相机空间。 然后使用等式 9 将 3D 点转换为第 i i i 个源摄像机的摄像机坐标。最后,我们将 3D 点投影到第 i i i 个源视图的特征图上并得到源位置 p k i ( x k i , y k i ) p^{i}_{k}(x^{i}_{k},y^{i}_{k}) pki(xki,yki),然后 使用双线性插值对特征图重新采样。 warp特征图的源位置计算可以写成:
在这里插入图片描述
值得注意的是,我们的工作和 OmniMVS 处理不同的场景。 OmniMVS 的目标是从“单一视点”估计全向深度图。 他们使用从四个鱼眼相机的装备收集的信息来预测 360° 深度图。 相比之下,按照大多数 MVS 方法的惯例,我们旨在通过使用从“多个不同视点”捕获的多个 360° 图像来重建整个场景的几何形状。 因此,在估计参考视图的深度图时,我们的 360° 球面扫描算法需要导出两个视点之间的关系,然后基于这两个 360° 图像构建cost volume。 对于 OnmiMVS 和 SweepNet 提出的方法,情况并非如此。

3.3 Multi-scale Cost Volume

在使用 360 球面扫描将源视图的特征图变形到参考视图的虚拟球体后,我们聚合变形的特征图以构建具有基于方差的成本度量的cost volume。 受最近的多尺度 MVS 工作的启发,成本量以从粗到细的方式构建,用于存储深度假设的自适应信息。 如图 2 所示,这三个阶段使用预定义数量的深度假设构建成本量: D 1 D_{1} D1 D 2 D_{2} D2 D 3 D_{3} D3。 在第一阶段(最粗糙的阶段),我们在预定义的深度区间 [ d m i n , d m a x ] [dmin, dmax] [dmin,dmax] 内均匀采样 D 1 D_{1} D1 深度假设,因为此时我们没有任何关于场景深度的信息。

在第二和第三阶段,对于warped feature map中的每个像素,我们根据从前一阶段正则化的深度概率体积(在第 3.4 节中讨论)的不确定性设置其球体半径范围以进行深度假设。 假设深度值服从高斯分布,我们可以通过计算阶段 s s s中像素 x x x处的标准差 σ σ σ来估计深度概率体积的逐像素不确定度:
在这里插入图片描述
其中 P s j P^{j}_{s} Psj d s j ( x ) d^{j}_{s}(x) dsj(x) d ˆ s ( x ) \^d_{s}(x) dˆs(x) 分别表示第 j j j 个深度假设球体的概率体、第 j j j 个假设球体的预测深度和第 j j j 个深度假设。 D s D_{s} Ds 表示假设球体的数量。

利用前一阶段估计的深度值分布,基于confidence interval的思想,我们逐步缩小下一个阶段的假设范围。 我们在阶段 s s s 中为深度图中的像素 x x x 设置假设范围 R s ( x ) R_{s}(x) Rs(x)
在这里插入图片描述
对于本文中的所有结果, λ λ λ 的值都设置为 1.5 1.5 1.5。 我们观察到结果对 λ λ λ 的值不敏感,因为模型会通过训练学习调整不确定性区间。 通过空间变化的不确定性估计,我们可以有效地缩小深度间隔并减少深度样本的数量。

3.4 Depth Regression and Loss Function

我们应用 3D CNN 来规范cost volume并生成probability volume。 具体来说,正则化网络是一个 3D U-Net,由一系列考虑不同分辨率特征的下采样和上采样层组成。 在卷积层之后,沿深度方向对概率体积应用 softmax 操作。 最后,我们的网络输出估计的深度值作为根据所有深度假设计算的预期值: D = Σ d = d m i n d m a x d × P ( d ) D=\Sigma^{d_{max}}_{d=d_{min}} d \times P(d) D=Σd=dmindmaxd×P(d),其中 d m i n d_{min} dmin d m a x d_{max} dmax 分别表示最小和最大深度样本。

继之前的工作之后,我们将深度估计视为一个多类回归问题,我们的损失函数使用 L 1 L1 L1 范数来衡量地面真实深度与估计深度之间的差异。 因为三个阶段的代价量是分别正则化的,所以总损失是三个阶段的 L 1 L1 L1损失的加权和:
在这里插入图片描述
其中 D = { D s } s = 1 N D = \{D^{s}\}^{N}_{s=1} D={Ds}s=1N, D G T = { D G T s } s = 1 N D_{GT} = \{D^{s}_{GT}\}^{N}_{s =1} DGT={DGTs}s=1N, P v a l i d P_{valid} Pvalid 是真实深度中有效像素的集合, λ s λ_{s} λs 是第 s s s 阶段的权重。

4. Synthetic Dataset: EQMVS

要通过监督学习训练我们的 360MVSNet,具有等距柱状投影的多视图立体数据集是必不可少的。 然而,现有的多视图立体数据集(如 DTU)仅包含具有透视图像的以对象为中心的场景。 为了解决这个问题,我们提出了等距柱状格式的室内场景图像的大规模合成数据集 EQMVS。

4.1 Data Acquisition

描述了数据集是如何制作的。

5. Experiments and Results

5.1 Implementation Details

训练。使用单块Quadro RTX8000的GPU。 按照 MVSNet,输入图像的数量设置为 N = 3 N = 3 N=3,其中 1 个参考图像和 2 个源图像。 我们采用三尺度cost volume,每个阶段的深度假设数分别为 160、32 和 8。我们将 EQMVS 中的场景分成包含 825 个场景的训练集和包含其余 189 个场景的测试集。

后处理。与之前基于深度图的 MVS 方法类似,我们的方法需要一个后处理步骤来将预测的深度图转换为点云。 因为 360° 图像没有现有的深度融合方法,所以我们在合并深度图时应用简单的过滤规则来去除异常值。 我们考虑预测深度图之间的光度和几何一致性:为了光度一致性,我们过滤掉概率低于 0.3 的像素。 为了几何一致性,我们相互投影视图之间的像素以确保深度值一致。

5.2 Performance

Equal-effort quantitative evaluation。 我们遵循 DTU 数据集提出的标准评估指标来计算重建点云的准确性和完整性。 精度度量测量从估计点云到地面实况点云的距离。 完整性度量测量从地面实况点云到估计点云的距离。 我们还评估了 MVSNet 引入的总体得分,该得分取准确性和完整性的平均值。 我们在 EQMVS 测试集上将我们的方法与传统的基于几何的方法和基于学习的方法 MVSNet 进行了比较。 我们不与后来建立在 MVSNet 上的方法进行比较,因为它们专注于减少内存消耗。 我们不将我们的方法与 OmniMVS 和 SweepNet 进行比较,因为目标不同。 在这个实验中,我们对所有方法都使用在相同位置捕获的输入图像,这意味着收集输入数据需要类似的努力。 因为我们的方法是第一个使用 360° 图像作为输入的基于学习的方法,为了进行公平比较,输入测试图像从等矩形投影扭曲到立方体贴图投影用于以前的方法以避免失真,因为以前的工作都是正常的 FoV 图像。 我们选择立方体贴图投影是因为它是计算机图形学中最常用的表示法,用于用透视图像表示球面数据。 如表 1 所示,我们的方法在完整性和总体得分方面优于所有其他方法。 我们在图 4 中展示了定性结果。由于篇幅限制,我们只能从一个角度展示重建结果。与其他方法相比,我们的方法由于其广泛的 FoV 和单个 360° 图像中的连续信息而对视觉重叠区域的区域不太敏感。 相比之下,其他方法很难重建整个环境,而且通常只能恢复场景的一小部分区域。
在这里插入图片描述
对摄像头数量的评估。 图 5 中的实验表明,以前的方法需要大约 500 张图像才能实现与我们的方法相似的完整性和整体质量得分,后者仅使用 25 张图像。 这表明用户必须花费大约 20 倍的努力来收集以前方法的数据。 我们的方法在准确性得分方面不那么令人印象深刻。 原因是由于缺乏 360° 图像的深度融合算法,我们在合并深度图时仅应用简单的过滤规则。 因此,我们不能像其他方法那样以稳健的方式剔除异常值。 我们把它留作未来的工作。 然而,值得注意的是,以前的方法无法重建只有 25 张图像的场景。

真实世界 360° 图像的定性结果。 为了证明我们提出的模型的泛化能力,我们用等矩形格式的真实世界图像测试我们的模型。 图像的相机位置由 OpenMVG 恢复。 图 6 显示了与场景中其他方法的比较。 我们的方法可以仅使用 11 张 360° 图像重建大部分场景,而其他方法使用 66 张图像但只能重建场景的一小部分。 虽然我们的模型是在合成图像上训练的,没有对真实世界的数据进行任何微调,但它在真实世界的场景中显示出很高的鲁棒性。

6. Conclusions and Future Works

在本文中,我们提出了 360MVSNet,这是一种基于深度学习的多视图立体方法,可以从 360° 图像重建室内场景的 3D 结构。 我们提出了一种新颖的 360 度球形扫描模块,并用它来构建多尺度cost volume。 可以通过对cost volume进行回归来获得高分辨率深度图。 然后我们将所有视图的深度图合并在一起以重建最终的场景点云。 我们还展示了一个用于训练 360MVSNet 的大规模合成数据集 EQMVS。 我们证明了我们的方法在所有比较方法中实现了最好的重建结果。

有许多限制值得进一步研究。 首先,我们的方法需要为输入的 360° 图像估计相机参数,而 360° 图像的运动结构 (SfM) 方法不如正常 FoV 图像的稳健性。 同样,目前还没有用于 360° 图像的深度图融合算法。 我们想探索 360° 图像的 SfM 和深度融合算法。 另一个问题是缺乏用于多视角立体的具有 360° 图像的真实室内环境数据库。 将来,我们很乐意使用多个 360° 图像捕捉更多真实世界的场景。

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

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

相关文章

【经典笔试题2】

test1 test2 test3 test4 test5 test1 int main() {int a[5] { 1, 2, 3, 4, 5 };int *ptr (int *)(&a 1);printf( "%d,%d", *(a 1), *(ptr - 1));return 0; } 程序的结果是什么?首先分析代码,a是数组名,是数组首元素…

详解Web服务器与http https协议工作过程

Web服务器 URL URI URL是URI的一个子集 www www所用的协议 http请求报文分析 状态码(空行:最后一 个响应头部之后是一个空行,发送回车符和换行符,通知服务器以下不再有响应头部。) 网址解析 网址注释实例 HTT…

从工厂方法到注解的小例子

目录一、背景介绍二、思路&方案三、过程过程图一过程图二过程图三过程图四(运行时的图)代码四、总结五、升华一、背景介绍 上篇"自定义注解和注解解析器",通过小例子介绍了自定义注解的运用;本篇继续基于小例子来实现工厂方法,以及注解实…

linux Regmap API

1.针对 I2C 和 SPI 设备寄存器的操作都是通过相关的 API 函数进行操作的。这样 Linux 内核中就会充斥着大量的重复、冗余代码,但是这些本质上都是对寄存器的操作,所以为了方便内核开发人员统一访问I2C/SPI 设备的时候,为此引入了 Regmap 子系…

如何用智能地教狗狗上厕所

背景 22年养了一只很可爱的小狗狗,我其实就一个问题:为啥这么可爱的狗狗会拉屎撒尿呀? 自从崽崽来了我们家之后,最让我们头疼的就是它乱拉、乱尿的问题了,以前会在家里到处乱来,最近一段时间好了很多&…

机器学习(整体结构)

国科大《机器学习》内容,周晓飞老师讲的挺不错的,浅显易懂。 本来是想整理下课程内容的,然而动手后才发现内容过多(很想吐槽,为啥这么多模型?不能相互替代么?)简略画个思维导图算啦…

探索SpringMVC-HandlerAdapter之RequestMappingHandlerAdapter-返回值处理

前言 上回我们回答了ReqeustMappingHandlerAdapter调用目标方法的参数解析问题,今天我们再来回答第二个问题:怎么处理方法调用的返回值。 深入分析返回值处理需求 RequestMapping处理器的返回值类型 相信很多同学对于这个返回值的第一个反应就是返回一…

图解JDK1.7中HashMap头插法扩容造成的死循环问题

JDK1.7中HashMap头插法扩容造成的死循环问题 文章目录JDK1.7中HashMap头插法扩容造成的死循环问题一、背景二、源码解读三、图解单线程环境中扩容多线程环境中扩容四.总结一、背景 HashMap是线程不安全的,在并发使用HashMap时很容易出现一些问题,其中最…

ArcGIS基础实验操作100例--实验66符号图层的保存与加载

本实验专栏参考自汤国安教授《地理信息系统基础实验操作100例》一书 实验平台:ArcGIS 10.6 实验数据:请访问实验1(传送门) 高级编辑篇--实验66 符号图层的保存与加载 目录 一、实验背景 二、实验数据 三、实验步骤 &#xff0…

【OpenGL】基础光照

介绍 现实世界中的光照是极其复杂,难以计算的,因此OpenGL的光照使用的是简化的模型,其中一个模型被称为冯氏光照模型(Phong Lighting Model)。 冯氏光照模型的主要结构由三个分量组成: 环境(Ambient)光照漫反射(Diffuse)光照镜…

blender学习笔记2023.01.05

文章目录why基操why 想画条大黄鱼 想画一下渔网 网箱 写笔记预防忘记 基操 1.语言改为中文 不过后续可能改回英文去 2.顶部导航栏—编辑—偏好设置—界面—翻译—(关掉)新建数据 目的是预防插件导致奇奇怪怪的报错 这里左下角位置处点击 保存修改 3…

初识LCD1602及编程实现字符显示

一、LCD1602基础知识及接线方法LCD1602是一种工业字符型液晶,能够同时显示16x02即32字符(16列两行)引脚说明第 1 脚: VSS 为电源地 第 2 脚: VDD 接 5V 正电源 第 3 脚: VL 为液晶显示器对比度调整端,接正电源时对比度最弱,接地时…

【Neo4j构建知识图谱】:官方服务图谱大型数据集下载与可视化方法【数据集包括:食谱数据、足球、权力的游戏、美国宇航局、英国公司注册、财产所有权、政治捐款】

目录 1、服务端口免费查看知识图谱2、关于 Neo4j 示例数据集的实现3、下载离线数据集4、项目概览与实现案例还可以看到解析python源码还可以看到解析cypher源码各种数据集实现案例参考1、服务端口免费查看知识图谱 此服务器托管许多具有只读访问权限的数据集,供公众使用。 该…

2022尚硅谷SSM框架跟学(三)MyBatis基础三

2022尚硅谷SSM框架跟学 三 MyBatis基础三9.动态SQL9.1if9.2where方法一:加入恒成立的条件方法二:使用where标签9.3trim9.4choose、when、otherwise9.5foreach9.51批量添加9.52批量删除批量删除方式1批量删除方式2批量删除方式39.6SQL片段10.MyBatis的缓存10.1MyBatis的一级缓存…

JS基础(一)——认识JS及其基础语法

网页的三个组成部分 HTML:用于控制网页的内容CSS:用于控制网页的样式JavaScript:用于控制网页的行为 网页的行为指用户与浏览器的行为交互、浏览器与浏览器与服务器的数据交互。 ECMAScriptS(ES) ECMAScriptS是Java…

OpenCV入门

OpenCV入门图像金字塔高斯金字塔(cv2.pyrUp、cv.pyrDown)拉普拉斯金字塔边缘检测图像轮廓 (cv2.findContours)轮廓特征(cv2.contourArea、cv2.arcLength)轮廓近似(cv2.approxPolyDP)边界矩形、外接圆(cv2.boundingRect、cv2.minEnclosingCircle)模板匹配…

C库函数:time.h

time.h C 标准库 – <time.h> | 菜鸟教程 (runoob.com) 库变量 下面是头文件 time.h 中定义的变量类型&#xff1a; 序号变量 & 描述1size_t 是无符号整数类型&#xff0c;它是 sizeof 关键字的结果。2clock_t 这是一个适合存储处理器时间的类型。3time_t is 这是一…

C库函数:math.h

math.h C 标准库 – <math.h> | 菜鸟教程 (runoob.com) 16double pow(double x, double y) 返回 x 的 y 次幂。17double sqrt(double x) 返回 x 的平方根。18double ceil(double x) 返回大于或等于 x 的最小的整数值。19double fabs(double x) 返回 x 的绝对值。20doubl…

矩阵分析:QR分解

Householder变换 Householder变换是一种简洁而有意思的线性变换&#xff0c;也可称为镜面反射变换&#xff0c;Householder变换矩阵为HI−wTwHI-w^TwHI−wTw 考虑向量α\alphaα和一个单位向量w:wTw1w:w^{T}w1w:wTw1 α\alphaα在www 方向上的分量是 αw//(wTα)wwwTα\alpha _…

Python快速制作自动填写脚本:100%准确率

嗨害大家好鸭&#xff01;我是小熊猫~ 环境使用 Python 3.8Pycharm 模块使用 import requests —> 数据请求模块 pip install requestsimport parsel —> 数据解析模块 pip install parselfrom selenium import webdriver —> 自动测试模块 pip install selenium3.…