首页 > 其他分享 >[转]基于图像的三维模型重建4——增量SFM

[转]基于图像的三维模型重建4——增量SFM

时间:2023-05-28 22:46:40浏览次数:45  
标签:视角 匹配 三维 相机 SFM 参数 图像

内容

  • 几种BA的形式
    • 同时优化相机和三维点
    • 优化相机
    • 只优化三维点
    • 单目相机
  • 增量运动恢复结构(Incremental SFM)
  • 运动恢复结构的几个问题

几种BA的形式

数学模型

n个三维点和m个相机,一些三维点在相机上的投影点。i表示三维点的索引,j表示相机的索引。 u 表示观测点, u^ 表示理想点

根据当前相机参数和三维点的坐标计算投影点的位置,然后计算观察点和投影点之间的误差,之后通过优化的方法使这个误差最小,从而得到一个比较好的相机参数和三维点的坐标。

该模型是一个非线性的最小二乘。通常采用LM算法~LM算法是一种基于信頼域的算法,通过调整信頼域半径的大小,在最速下降法(使用一阶梯度)和牛顿法(使用二阶梯度,考虑全局)之间切换,更加鲁棒。LM算法的核心是构造增量正规方程,通过方程可以求出增量,然后根据增量对当前的方程进行更新。

如果当前误差比较大,减小信頼域,使方法趋近于牛顿法。如果当前误差比较小,增大信頼域,使方法趋近于最速下降法。

增量正规方程

将 J(θ) 进行排序,P1~P3对应三个相机,X1~X4对应四个三维点。x11是第1个点在第1个相机中的投影。如果4个点在三个相机里都有投影,那么可以得到12个观察点。每个点有x和y坐标,24行;列数为总参数的个数(3个相机x9+4个三维点x3=39)。

JT(θ)J(θ) 是很明显的分块矩阵(方阵)。方阵的行数和列数就是参数的个数。

同时优化相机参数和三维点

将信頼域加入其中,只对包含对角线的分块矩阵有影响。

解方程:

得到两个方程,解第一个方程可以得到相机参数的增量 δc ,将δc代入第二个方程可以得到三维点的增量δX。

求解这个方程可以使用共轭梯度法,因为这个方程是比较大的稀疏矩阵。

  • 固定三维点坐标,优化相机参数(特殊场景1)

对于三维点的梯度均为0,δX=0。只计算δc。更新相机参数

  • 固定相机参数(特殊场景2)

只计算三维点的坐标增量δX。在对三维点进行更新。

单目相机——内参数共享(特殊场景3)

使用同一个相机在不同角度拍摄同一物体。这种场景下,相机的内参一致。

在该模型中,所有的内参(f, k1, k2)一致,将内参从Cj中独立出来。因此这里的 Cj 只表示相机的外参(R, t)。

由于所有相机的内参数固定,所以总的参数个数为(3+6m+3n)。

对之前的Jacobian矩阵进行改变,加入对f, k1, k2的偏导数。

之前使用的 J(θ) 是一个稀疏矩阵。但是由于加入了对于内参数(f, k1, k2)的偏导数,内参数与每个观察点都有关联,因此其对每个观察点都有值。J(θ)的形式发生改变。

使用的求解方法与之前的求解方法类似。

运动恢复结构(SFM)

通过相机运动同时恢复相机参数(内外参数)和场景结构(三维点坐标)。

这里介绍的场景针对无序图像。有序图像的匹配复杂度会减少很多。无序图像经过SFM得到稀疏点云。之后还可以对其进行稠密的点云重建,对图像进行径向畸变的校正。

主要流程

  1. 输入图像
  2. 特征提取与匹配
  3. 图像连接图构建
  4. 捆绑调整优化相机姿态和场景结构
  5. 得到稀疏点云

将两两对应关系对齐到同一的坐标系。

通过特征检测得到特征点,对不同视角的特征点进行匹配。通过对极几何,筛选出外点,保留内点,通过内点拟合出模型,得到相机相对的姿态。

对极几何模型选择:

单应矩阵需要场景是平面,场景的深度很深,例如航拍。

图像连接图

连接图的顶点:每张图像

连接图的边界:两幅图像之间存在共同的可见区域(足够多的匹配内点)

每张图像看多一个节点,对所有图像进行两两匹配,如果两张图像存在足够多的匹配点,那么将两个图像连接起来,其连接线作为一条边界。最终可以得到一个很大的无向图。无向图的顶点是每张图像,边界是两张图像间的匹配关系。该无向图称为图像连接图。

  • 顶点的大小与连接个数有关:一个顶点的邻域越多,顶点越大;
  • 比较好的视角(相似的、正面光照条件好)集中在中央,偏一些的图像位于集中在边界;
  • 白天成像和夜晚成像出现分块的情况。

Tracks

  • 多个视角对应的匹配点连接起来
  • 一个三维点(匹配点)对应着一个Track

计算Tracks(三维点+匹配关系)

已知图像中各特征点的位置和当前的相机姿态。如果我们知道两个以上特征点的位置,就可以计算三维点的坐标。

Track也可以用来计算相机姿态。

捆绑调整(BA)

相对的相机参数生成全局一致的相机参数和场景结构。

算法流程

图像连接图,去除末梢的图像,使用视角好的图像进行重建。

要先选择一个视角(一对相机)进行重建。

在这个视角之上,要不断添加新的视角。如何选择新视角是有标准的。

选择新视角后,要对当前的视角进行重建,得到相机参数,对单视角进行优化。这一步只对当前相机进行优化。优化后,track上多了匹配点,再进行滤波。

重建后,进行全局的捆绑调整。为了效率,几张图像调整一次。

增量的运动恢复结构

初始相机对的选取

选择一对图像

  • 匹配点足够多(>=50)
  • 基线足够长,三角量测的角足够大(>=5deg),$\alpha$为三角量测角
    匹配对很多,如何对所有角进行衡量?使用所有夹角的平均值或找中值
  • 满足homography尽量少(<60%)
  • 成功三角化的匹配对>50%

保证匹配对足够可靠,匹配足够好。

RANSAC三角量测

目前一直相机的两个姿态。

  • 使用三角量测,将tracks重建出三维点;
  • 由于存在匹配外点,重建出错误的tracks,用RANSAC的方法排除外点

Tracks滤波

  • 三维空间中太远的点:将三维点投影到像平面上;
  • 重投影误差比较大的点:

Tracks滤波

全局的捆绑调整

目前具有三维点和相机姿态的初始值。

重建新的视角

  • 选择新的视角

条件:可见的tracks数目最多。

将视角按照tracks由多到少进行排序。

  • 恢复新建相机的姿态

1 找到3D-2D对应关系;

2 用RANSAC-PnP算法求解相机姿态。

目前,已知三维点坐标以及这些点在新的像平面上的坐标,求解新的相机外参,这是一个PnP的问题。

每次采样三个点,得到相机姿态。把其他的点通过刚求出的相机姿态投影到像平面,计算重投影误差。通过误差找到内点,统计内点个数,不断采样,直到内点个数最多。最后使用这些内点求出相机姿态。

  • 单个相机的捆绑调整

相机姿态的非线性优化

  • Tracks重建

增加视角后,会产生新的tracks(有超过两个视角的匹配点)

  • Tracks滤波

重建后一定要进行滤波

  • 全局的捆绑调整

增量捆绑调整的优缺点

优点:

  1. 对特征匹配外点鲁棒
  2. 重建精度高
  3. 捆绑调整不断优化场景结构

常用来做算法比较的基准

缺点:

  1. 对初始相机对的选取以及相机的添加顺序敏感
  2. 大场景产生累计误差导致场景漂移
  3. 重复进行捆绑调整,效率低

重建结果

开源工具:

Bundler:增量的捆绑调整

VisualSFM:加速版本的增量SFM

Theia

Colmap

焦距的获取

径向畸变系数一般直接设置为0。

  • 自标定的方法获取初始值,如VisualSFM
  • 从可交换图像文件中读取EXIF初始值,如Bundler

尺度不确定性

没有实际的距离。点云中1mm不是实际中的1mm。点云的单位需要使用GPS进行地理标注,相机使用GPS得到真实的地理坐标。

动态物体

标准的SFM只能重建场景中的动态物体,对物体进行运动补偿。

重复结构

由于描述子都是局部的,有很多的重复结构,会出现错误的匹配。

非朗伯面

朗伯面上的点朝每个方向的反射都是一样的。

而镜面或水面是非朗伯面,只在一个方向上的反射特别强,难以得到匹配点。

使用NCC的方法对局部的纹理进行匹配。

 

参考链接:基于图像的三维模型重建4——增量SFM

标签:视角,匹配,三维,相机,SFM,参数,图像
From: https://www.cnblogs.com/rainbow70626/p/17439039.html

相关文章

  • 数字图像处理
    数字图像处理与python实现1.数字图像处理基础知识1.1数字图像简介目的提升图像的视觉感知质量提取图像中感兴趣区域或特征方便图像的存储和运输特点可再现能力强处理精度高适用范围广灵活性高方法图像变换图像压缩编码图像增强和复原图像分割图像描述图像分类(......
  • [转]一篇文章教你学会使用三维重建知名开源系统
    如何把一组图像转换为3D模型,这可能是三维重建初学者们最常遇到的问题。这个过程融合了计算机视觉、计算机图形学、图像处理等多门学科的知识,是一套非常复杂的工程系统,许多同学想要学习却苦于没有资料参考,导致入门难度大大提高。为了帮助想要学习三维重建的同学快速上手实践,本......
  • 图像入门3
    图像识别30.序章​ 从本章起,我们的OpenCV将会插入一段美好而虚空的幻想故事……请各位勇士进入幻境,开始你们的学习之旅。1.大纲1、处理OpenCV中鼠标事件2、学习以鼠标作为画笔,如cv.setMouseCallback()函数2.使用鼠标作为画笔1)鼠标回调函数​ 在遥远的圣彼得堡,住着一......
  • 图像入门2
    图像入门21.大纲1、使用OpenCV绘制不同的几何形状2、学习以下功能:cv.line(),cv.circle(),cv.rectangle(),cv.sllipse(),cv.putText()等2.常见参数img:绘制形状的图像color:形状的颜色,作为元组传递厚度:线或圆等的粗细。对闭合图形传递-1,填充形状,默认厚度为1lineType:线的类......
  • 【计算机视觉】---平滑图像
    简介计算机视觉中平滑图像的原理是通过一系列的图像处理操作,对图像中的噪声进行抑制和去除,以达到平滑图像的效果。平滑图像的主要目的是减少图像中的细节和噪声,以便更好地进行后续的图像分析和处理。均值滤波:平滑图像的一种常见方法是通过邻域操作对每个像素周围的像素进行处理。常......
  • 专业的三维动画制作软件Maya2024最新mac版
    AutodeskMaya2024mac是一款专业的三维动画制作软件,在三维动画制作中,它是一款功能强大、界面友好的软件,它可以轻松创建各种场景类型、材质的动画,并可以将各种元素和模型混合到一起,实现丰富而逼真的效果。→→↓↓载Maya2024mac 一、新的“MayaSoftware”软件套件Maya......
  • 论文解读 | IROS 2022:MV6D:在RGB-D图像上使用深度逐点投票网络进行多视角6D姿态估计
    原创|文BFT机器人01 研究背景在计算机视觉领域,6D姿态估计是一种重要的任务,用于确定物体在3D空间中的位置和方向。它在许多应用领域具有广泛的应用,如机器人操作、虚拟现实、增强现实、物体跟踪等。然而,传统的6D姿态估计方法存在一些限制。这些方法通常只使用单个视角的相机数据......
  • POJ 2251 Dungeon Master(三维BFS)
    题目看起来很厉害,实际上看懂了并不难,开一个三维的数组,这里需要注意的是第一维是高度,然后就是简单的BFS了,还有不同就是三维的时候有六个方向可以走,在前后左右的基础上多了一个向上和向下的走法,还有一个问题就是多个输入样例要注意每次都要初始化,我做的时候就因为这个WA了好几次,最后......
  • 基于Lucas-Kanade算法的双目图像光流提取matlab仿真
    1.算法仿真效果matlab2022a仿真结果如下:      2.算法涉及理论知识概要        1950年,Gibson首先提出了光流的概念,所谓光流就是指图像表现运动的速度。物体在运动的时候之所以能被人眼发现,就是因为当物体运动时,会在人的视网膜上形成一系列的连续变化的......
  • m图像多重分形谱计算matlab仿真
    1.算法仿真效果matlab2022a仿真结果如下:2.算法涉及理论知识概要多重分形(multifractal)一种分为多个区域的复杂分形结构。为了对分形的复杂性和不均匀性进行更细致地刻画,需引进它的概率分布函数及其各阶矩的计算,由此构成了分形维数的一个连续谱,称之为多重分形或多标度分形。由......