6 三维计算机视觉

目录

  1. 立体视觉
  2. 双目系统&视差
  3. SIFT

1 立体视觉

立体视觉是一种计算机视觉技术,其目的是从两幅或两幅以上的图像中推理出图像中每个像素点的深度信息。

单目系统

O点为相机的光心,π是摄像头的成像平面。

6 三维计算机视觉

2 双目系统&视差

2.1 双目系统

6 三维计算机视觉

2.2 对极几何约束

  • 极平面:O1, O2, P三个点确定的平面;
  • 极点:O1O2连线与像平面I1、I2的交点e1、e2;
  • 基线(baseline):O1O2
  • 极线:极平面与两个像平面之间的交线l1、l2。
    6 三维计算机视觉

给定一幅图像上的一个特征,它在另一幅图像上的匹配视图一定在对应的极线上

6 三维计算机视觉

6 三维计算机视觉

6 三维计算机视觉

6 三维计算机视觉

  • B:2个摄像头的距离固定
  • f:焦距固定(相机内参)
  • D:需要两个摄像头分别先成像,然后再知道每一个点的坐标,再经过相减得到
  • D与视差成反比:D越小,Z越大

  • 物体距离立体视觉系统越远

  • 当我们观察离我们比较近的物体时,视差会很大,可以获取到的信息比较多;当物体离我们远时,视差会小,获得的信息会比较少

[注]

有了 视差的计算方式 + 目标检测 + 特征点匹配 =>> 自动驾驶

2.3 总结

  • 何为立体视觉
    • 立体视觉是一种计算机视觉技术,其目的是从两幅或两幅以上的图像中推理出图像中每个像素点的深度信息。
  • 立体视觉的应用领域
    • 机器人、辅助驾驶/无人驾驶、无人机等等。
  • 立体视觉的原理
    • 立体视觉借鉴了人类双眼的“视差”原理,即左、右眼对于真实世界中某一物体的观测是存在差异的,我们的大脑正是利用了左、右眼的差异,使得我们能够辨识物体的远近。(视差)

[问题]

对于双目系统,有两个摄像头在做同样的事情,两个摄像头要在同一个场景中检测出车,而且由于有视差,两个图片中相同的物体可能错位。

=> 如何把同样的车关联起来?

故先要将两个车匹配起来(两个图片都同一物体的匹配),故要学习特征点匹配sift

3 SIFT

3.1 SIFT 概念

  • Sift(尺度不变特征变换),全称是 Scale Invariant Feature Transform

    • Sift提取图像的局部特征,在尺度空间寻找极值点,并提取出其位置、尺度、方向信息。
  • Sfit的应用范围包括:

    • 物体辨别
    • 机器人地图感知与导航
    • 影像拼接
    • 3D模型建立
    • 手势识别
    • 影像追踪等
    1. 从两个图像上的车的相同特征提取出来,从而可以匹配上相同的物体,通过它们所在的坐标求出视差

    2. 图像拼接:把两张原始图像的特征点提取出来,把相同的内容合并到一起

  • Sift特征的特点:

    1. 对旋转、尺度缩放、亮度变化保持不变性,对视角变化、噪声等也存在一定程度的稳定性
    2. 独特性信息量丰富,适用于在海量特征数据中进行快速,准确的匹配;
    3. 多量性,即使少数几个物体也可以产生大量的Sfit特征向量;
    4. 可扩展性,可以很方便的与其他形式的特征向量进行联合;

3.2 Sfit 算法实质

  • Sfit算法的实质是在不同的尺度空间上查找关键点(特征点),计算关键点的大小、方向、尺度信息,利用这些信息组成关键点对特征点进行描述的问题。

  • Sift所查找的关键点都是一些十分突出,不会因光照,仿射变换和噪声等因素而变换的**“稳定”特征点**,如角点、边缘点、暗区的亮点以及亮区的暗点等。

3.3 SIFT特征提取和匹配具体步骤

  1. 生成高斯差分金字塔(DOG金字塔),尺度空间构建

    [注]

    σ又称为尺度空间因子:

    • 值越小,表示图像被平滑的越少,相应的尺度也越小;
    • 大尺度表示图像的概貌特征,如树的轮廓;小尺度对应细节特征,如树叶。
  2. 空间极值点检测(关键点的初步查探)

  3. 稳定关键点的精确定位

  4. 稳定关键点方向信息分配

  5. 关键点描述

  6. 特征点匹配

具体参看大佬文章,我再写也是超不过的……

  • https://blog.csdn.net/dcrmg/article/details/52577555
  • https://blog.csdn.net/lingyunxianhe/article/details/79063547

[注]

归一化:

  1. 把数据变成(0,1)或者(-1,1)之间的小数。主要是为了数据处理方便提出来的,把数据映射到0~1范围之内处理,更加便捷快速。

  2. 把有量纲表达式变成无量纲表达式,便于不同单位或量级的指标能够进行比较和加权。归一化是一种简化计算的方式,即将有量纲的表达式,经过变换,化为无量纲的表达式,成为纯量。

[我认为]

这里的归一化是指,根据权重变换图像像素值

3.4 Python中的SIFT函数

  • SIFT函数注册了专利,在商业用途上是收费的。将在opencv > 3.4.3中,不再提供。
  • 解决办法
    • 安装opencv-python 3.4.2.16
    • 以及opencv-contrib-python 3.4.2.16
    • 使用conda和pip安装
      • pip install opencv-python==3.4.2.16
      • pip install opencv-contrib-python==3.4.2.16