Vision 3D
传感器和测量方法
Mesures absolues
- 深度信息得到物体的位置和转向
- 体视法 和 摄影测量术
- temps de vol
- 成焦或散焦的形状 结构光:结构光投影和激光三角测量
卷信息 断层摄影术
Mesures relatives
对象表面的[局部]几何形状,但不是其位置
- 阴影(shading)形状 纹理(textures)形状
3D重建方法
选配 (自上而下)
- 搜索已知对象类型的出现,并在场景空间中进行替换。
高级原语:预定义的对象
建设 (自下而上)
无需事先使用已知对象即可进行重建
使用低级重建原语,原语的程序集构造一个较高级的实体。
3D重建的视觉部分
Vision Active
Image + source (图像和源)
Laser (激光)
Tomographie 断层摄影术
Shape from shading 阴影形状
Vision Passive
利用图像之间的差异
- 多眼视觉(立体视觉)
- 运动中的单眼视觉
Shape from Shading 阴影形状
原理1:光度法
- a: 恒定且已知的反照率
- 已知光源
原理2: 扩散照明模型(朗伯型) Lambertien
原理3: 伪尺度照明模型
Shape / Depth from focus / defocus
问题:通过更改传感器的焦距或位置获得的2张或更多图像得到场景的3D估算
Depth from focus (actif) 聚焦深度
离焦深度(passif)
Reconstruction stéréo 立体重建
Principe : Triangulation 三角测量
需要校准
Shape from structured light 结构光图形
激光投影:半径→点,平面→线,网格
激光平面 plan laser:
- 柱面镜或旋转镜
- 已知方程
- 校准好的相机
一个或多个模式的投影
模式:
- 干扰(光相干)
- 投影
模式编码
两种模式之间只有1位的变化
Range Imaging : Time of Flight 距离成像:飞行时间
principe:lidar 激光雷达
- 在持续时间d的t0处发出一个光脉冲
- 测量脉冲t0 + Dt(i,j)的反射光的每个像素(i,j):Dt表示距离
技术
- TOF:反射信号的Dt的脉冲测量
- 相位:在频率f处的连续调制,反射信号的相移测量
Méthodes de reconstruction 重建方法
Méthodes Globales : 处理所有图像。
- shape from XXX
- 立体技术: 关联 / 弹性匹配
应用: 深度图
Méthodes basées sur des primitives : 基于原语的方法:
仅处理从图像中提取的图元。
- 特别点 Points particuliers
- 等高线 Contours
地区 Régions
条件重建
Primitives 2D / 3D 原语
Points d’intérêts 特别点
Sommet 顶点
缺点: 相似度低的标准1 , 可以使用其邻域来描述
优点: 点视差 及时差异
Les contours 等高线
Arête (segment, courbe) 棱边(段,曲线)
优点: 强大的形态学标准 ; 轮廓上的差异
Les régions 地区
Face (facette, carreau) 面
- 优点:区域邻接图
- 缺点: 毛点差 差异不明显
Calibration 校准
相机参数的估计
- 确定空间点经过的变换以获得图像的点
- 型号: Pin Hole1ou sténopé
- 场景参考系=》照相机参考系 外在参数
- 照相机参考系=》图像参考系 内在参数
Calibration : Paramètres intrinsèques 校准:内在参数
Distorsions 扭曲
发生在投影线性模型和与图像相关的点之间
来源:
- 镜片瑕疵
- 镜头/矩阵未对准
形式:
- 在径向变形中>>切向变形
如果考虑到径向和切向变形,(Du,Dv)可能是高度非线性的
考虑到 :
K1拒绝相机模型的参数并破坏模型的线性
独立于模型的失真估计和图像校正
- 我们将处理校正后的像素(u’,v’):
Paramètres extrinsèques 外部参数
- 场景标记和相机标记之间的刚性移动
- 由包含已知3D点的校准图案表示的场景标记
- 通过记录图像中的特定点来估计瞄准器和摄像机之间的刚性位移
Calibration avec OpenCV
Calibration stéréo
…
Feature points
目的:检测同一对象的其他图像中易于识别的兴趣点(特征点)
点检测:
例子:SIFT:标度空间中的高斯差(DoG)的最小值和最大值
点上的特征映射:
描述符向量之间的欧式距离(通常为32、64或128个分量)
不变性 :
位移:位置不干预匹配
- 旋转:特征点沿渐变方向定向
- 尺度: 使用比例空间(ScaleSpace)可为检测到的特征点提供比例因子
局部不变性:
- 光照
- 仿射变换或投影
Descripteurs et Matching 描述符和匹配
Descripteurs
根据检测点的方向在附近的尺度上对邻域中的梯度方向描绘局部直方图
Matching
Entre points (点之间):
- 描述符之间的欧式距离
在k-d tree中寻找最优点
Entre ensembles de points (点集之间):
在mmc的意义上进行调整
- de l’homographiecorrespondante (si nb pts >= 4
de la matrice essentielle (si nb pts >= 8)
分解为奇异值(SVD)
Etude de cas : Recalage / cible pour augmentation
TP1
SLAM
SLAM定义
主要任务:
跟踪:估计摄像机的姿势
- 特征匹配
- Optical Flow 光流
制图:环境重建
- 三角测量
- 深度参数化
其他任务
重新定位 ( 失去追踪后 )
闭环
地图初始化 : 深度参数化 & 延迟初始化/特定运动
定位:
- 同义词: 视觉里程表 Visual Odometry
根据…确定姿势
- 2D / 3D映射:图像点 <-->3D点 =》 透视点(PnP) -->
- 3D(或2.5D)/ 3D匹配 : 深度点↔3D点 =》 ICP:迭代最近点
制图 /映射:
确定环境图
同义词: Reconstruction, Structure fromMotion (SfM) 重构,运动构造(SfM)
- Mapping Local局部映射:
- 2D相机:了解两个图像之间的相对姿势 =》三角剖分=》3D点
- Cameras2D : 了解相机之间的bases=》三角剖分=》3D点
- Camera 3D : carte de profondeur (深度图)⟹points 3D
- Mapping Global
- Pose + carte locale ⟹carte globale 姿势+本地地图⟹全球地图
SLAM:架构
Graph-BasedSLAM
…
Feature-Base vs Direct
…
Visual SLAM : Méthodes sparses 稀疏的
基于特征
- 优势:
- 基本要素加大要素(特征描述的容忍度和光照强度)
- 通过捆绑调整同时优化姿势和贴图
- 计算更轻
- 劣势:
- 缺少纹理⇒没有points
- 例子:
- PTAM
- ORB-SLAM
VisualSLAM : Méthodes denses 密集的
基于像素
- 优势:
- 没有特征提取(在处理时间上花费更多)
- 毛状体,无纹理,或纹理重复(沥青质)
- 重建密集
- 劣势:
- 光度一致性限制了视点/特征匹配之间的基线:对需要大量“基线”的重建精度的影响
- 对卷帘快门,自动增益和自动曝光敏感,因为它们对图像的影响需要光度学校准(在DSO中执行)
- 计算较重
- 例子:
- DTAM
- LSD-SLAM
- DSO
Visual SLAM : Autres méthodes
- 优势:
- 混合方法(深度图像)+特征点(RGB图像)
- 重建(非常)密集
- 劣势:
- 3D地图尺寸
- 传感器(Kinect)在大空间中的局限性
- 例子:
- RGB-D SLAM
Ajustement de faisceaux (Bundle Adjustment) 捆绑调整
…
ORB-SLAM:功能
- 所有阶段的ORB点和ORB描述符
- 跟踪,映射,重定位和闭环。
- 大型环境中的实时跟踪和映射
- 可测图:跟踪和地图绘制的唯一关于“可测区域”独立和“全球地图”的地图
- Loop closinget relocalisatonen Temps Réel
- Essential Graph
- 生成树“按权重链接“可见性图”的节点(nb映射公共点)
- 和与基本图的关键帧相关的词袋。
- Essential Graph
- 基于两个平行假设的评估进行稳健的初始化
- 平面摄影场景
- 或用于非平面场景的基本矩阵
- 用于点映射(3D)和关键帧选择的“适者生存”方法
- Suppression des keyframes redondantes 删除冗余的关键帧
- 删除冗余映射点
ORB-SLAM : Architecture
ORB-SLAM:数据
Map Points : pi
- Position : Xw,i
- 视角方向 Viewing direction :ni
- 最佳影像描述符 Best image descriptor :Di
- Viewing distance range [dmin..dmax]/ Best Descriptor
Keyframes
- Camera parameters
- Tiw:Camera extrinsics(Pose)
- [Camera intrinsics]
- Featurepoints (2D points + descriptors )
- 是否与Mappoint相关联(3D点)
- Bag of Wordsdes features
- 用于在失去跟踪器的情况下进行重定位和闭环
- Camera parameters
Organisation des Keyframes 关键帧的组织
图:邻居关键帧图 Graphe : Graphe des Keyframesvoisines
- Covisibility graph可视图:通过观察到的map points将关键帧链接在一起。
- Essential graph 基本图: 关键帧通过它们共同观察到的映射点数链接在一起
- Spanning tree 生成树
ORB-SLAM : Tracking 追踪
- ORB提取
- Tracking OK : Initial pose estimation from previous frame 追踪成功代表成功通过前一帧初始化相机位置预测
- Match Mappoints from previous frame 通过比对前一帧的map points
- Pose optimisation from correspondences 通过对应关系优化pose
- Tracking Lost: Convert frame to Bow and query Keyframes 追踪丢失,把当前帧转换为bow并查询关键帧
- Match map points from Keyframes Loop candidates 通过比对可能构成环路的关键帧和map points
- If enough inliers: Pose optimisation 如果是正常值,优化pose
- Track Local Map from Init. Pose Est. & Feature Matches 从初始化位置和匹配特征追踪local map
- Project local map points into frame 将本地map points映射到frame
- k1:Keyframes sharing map points with current frame
- k2: Neighbors of k1 in visibility graph
- kref ∈ k1: Keyframe sharing most map points with current frame
- Match map {K1,K2} points with current frame keypoints 上面三步获取map points,比较k1,k2点和当前帧关键点
- Pose optimisation 优化姿势
- Project local map points into frame 将本地map points映射到frame
- New Keyframe decision 新的关键帧的选择:
- Spawn new Keyframe if: More than 20 frames have passed and local mapping is idle and current frames tracks at least 50 points and current frame tracks less than 90% point of kref 当超过20帧已经通过且local mapping是闲置状态且当前帧已经追踪到至少50个点且当前帧追踪少于kref中90%的点,则产生新的关键帧
ORB-SLAM : Local Mapping
- Keyframe insertion Ki 插入关键帧Ki
- Update visibility graph and spanning tree 更新可见图和生成树
- Compute BoW for keyframe 为关键帧计算Bow
- Recent map points culling 最近map points删减
- ~ Prune map points not visible in more than 3 connected keyframes in visibility graph 删除可见图中3个以上相连的关键帧中不可见的map points
- New map points creation 生成新的map points
- Triangulate Ki matched ORBs from connected Keyframes (Kc) in visibility graph 从可见图中相连的关键帧中对应上ORB的点做三角化处理
- Match ki unmatched ORBs in kc with epipolar constraint and triangulate them
- Local Bundle Adjustment 本地捆绑包调整
- Optimize ki,kc all map points seen in these frames =》all keyframes containing these points 优化ki,kc所有帧中可见map points=》确保所有关键帧都包含这些点
- Local Keyframes culling 关键帧删减
- Discard keyframes in Kc whose 90% points are seen in 3 other keyframes 丢弃掉在其他三个关键帧中90%的点都可见的关键帧
ORB-SLAM: Loop Closing
- Loop candidates detection 闭环可能性检测
- Query DBoW for loop candidates keyframes withKi(except Kc):{kl}
- Compute Similarity transformations between Ki and {kl}: Sil=[dx,dy,dz,rx,ry,rz,s]计算相似度转化
- Retain loop closure candidate with most inliers in 3D/3D correspondences : Kl
- Loop fusion 闭环融合
- Correct Tiw with Sil and propagate to all neighbors of ki -> Align both sides of the loop 用Sil矫正Tiw并应用与所有临近点
- Fuse map points of kl and ki +kc合并点
- Update keyframes edges of the loop in the visibility graph 更新可见性图表中循环的关键帧边缘
- Essential graph optimization 基本图优化
- Pose graph optimization on the Essential graph to distribute the loop closing error along the graph 对基本图进行位姿图优化,使闭环误差沿图分布