上一篇,只要主要搞清楚透视的坐标变换。

这一篇,要搞清楚两个概念,Planar Homography (共面点成像)& Epipolar Geometry(对极几何)

Now,Start!

先补充Homography的概念,简单来说Homography(单应性),说的是投影的时候可以逆过来找,比如,一个物体可以通过旋转相机镜头获取两张不同的照片(这两张照片的内容不一定要完全对应,部分对应即可),我们可以把单应性设为一个二维矩阵M,那么照片1乘以M就是照片2. 这有着很多实际应用,比如图像校正、图像对齐或两幅图像之间的相机运动计算(旋转和平移)等。一旦旋转和平移从所估计的单应性矩阵中提取出来,那么该信息将可被用来导航或是把3D物体模型插入到图像或视频中,使其可根据正确的透视来渲染,并且成为原始场景的一部分(请见增强现实)。

具体的解释可以戳wiki。

一、共面点成像

思路:同一物理点,不同成像面之间的关系。

在前面已经讨论了三维物体成像过程,相比之下,还有一种稍简单的情况——平面成像,即所有的物点都处在同一个平面上,我们有理由相信,这种情况下的成像关系是一般立体成像的一种特例。

先回顾一下一般的单体成像过程

 

对于共面的物点,在恰当的世界坐标系中,可以令其中一个坐标值为0,不妨设第三维坐标为0,图示如下:

由于物点的第三维坐标为0,整个成像过程的矩阵表示会得到简化。

可以简化为一个3X3的矩阵,称之为Homography矩阵,该矩阵是可逆的!!

对于正前方的物体平面(垂直于光轴),成像关系将更进一步简化。

将共面物点经成像之后,再变换为数字图像(u,v)

研究共面点成像有什么意义呢?

原来是为了研究两幅图之间的关系!共面点成像过程总结如下:

应用之一:消除透视投影的失真

应用之二:图像拼接

在这些应用中,需要解决两个关键问题:

1. 如何确定两幅图像之间的变换关系(需要多少个已知点?如何计算?)

2. 如何生成新的像素点,即在拉伸或拼接之后,需要生成新的像素点。

选择第一种约束关系

可以写在线性方程组或矩阵的形式

在实际求解变换矩阵时,需要考虑数值计算的问题。

R.Hartley: “In Defense of the Eight Point Algorithm”
Observation: Linear estimation of projective transformation parameters from point correspondences often suffer from poor “conditioning” of the matrices involves. This means the solution is sensitive to noise in the points (even if there are no outliers).
To get better answers, precondition the matrices by performing a normalization of each point set by:
• translating center of mass to the origin
• scaling so that average distance of points from origin is sqrt(2).
• do this normalization to each point set independently

采用第二种约束关系

二、对极几何

  先思考一个问题:用两个相机在不同的位置拍摄同一物体,如果两张照片中的景物有重叠的部分,我们有理由相信,这两张照片之间存在一定的对应关系,本节的任务就是如何描述它们之间的对应关系,描述工具是对极几何 ,它是研究立体视觉的重要数学方法。

  要寻找两幅图像之间的对应关系,最直接的方法就是逐点匹配,如果加以一定的约束条件对极约束(epipolar constraint),搜索的范围可以大大减小。

  先回顾简单的立体成像系统

对极约束的图示

更一般的立体成像关系:两个相机的坐标无任何约束关系,相机的内部参数可能不同,甚至是未知的。要刻画这种情况下的两幅图像之间的对应关系,需要引入两个重要的概念——对极矩阵(Epipolar Matrix)和基本矩阵(Fundamental Matrix)。

对极几何中的重要概念(参考下图):

极点:极点 el :右相机坐标原点在左像平面上的像;极点 er :左相机坐标原点在右像平面上的像

极平面:由两个相机坐标原点 Ol 、 Or 和物点P组成的平面

级线:极平面与两个像平面的交线,即 plel 和 prer

级线约束:两极线上点的对应关系

有点烦人,先转移一下话题:What would Pinhead’s eye look like close up?

 

如果两个人同时看这一景物,将是什么样的呢?

 

再回到对极几何图上来,通过上面几幅图示,利用对极几何的约束关系,我们可以:

1. 找到物点P在左像平面上的像点 pl ;

2. 画出极线 plel ;

3. 找到极平面 Olplel 与右像平面的交线,即得极线 prer ;

4. 像点 pl 的对应点一定在极一 prer 上。

两个相机坐标系之间的关系为

由于R是正交矩阵,因此可写为

三向量共面,它们的混合积为零(混合积对应于有向体积)

将向量乘(叉乘)写成矩阵的形式

通过进一步的改写,可以得到左像点和右像点之间约束关系(非常简单、漂亮)

显然,左像点 pl 和右像点 pr 是通过矩阵 E=RS 来约束的,我们称矩阵 E 为本质矩阵(Essential Matrix),它的基本性质有:

• has rank 2(秩为2)

• depends only on the EXTRINSIC Parameters (R & T)(仅依赖于外部参数R和T)

3D重构基础四--Planar Homography Epipolar Geometry相关推荐

  1. 计算机视觉基础——对极几何(Epipolar Geometry)

    先思考一个问题:用两个相机在不同的位置拍摄同一物体,如果两张照片中的景物有重叠的部分,我们有理由相信,这两张照片之间存在一定的对应关系,本节的任务就是如何描述它们之间的对应关系,描述工具是对极几何 , ...

  2. Planar Homography (共面点成像) Epipolar Geometry(对极几何)

    转载:http://blog.csdn.NET/yvonnezju/article/details/40982192 这一篇,要搞清楚两个概念,Planar Homography (共面点成像)&am ...

  3. [OpenCV-Python] OpenCV 中摄像机标定和 3D 重构 部分 VII

    部分 VII 摄像机标定和 3D 重构 OpenCV-Python 中文教程(搬运)目录 42 摄像机标定 目标 • 学习摄像机畸变以及摄像机的内部参数和外部参数 • 学习找到这些参数,对畸变图像进行 ...

  4. 视觉SLAM14讲笔记04:ch7对极几何(epipolar geometry)

    2D-2D:对极几何(epipolar geometry) 对极约束 现在,假设我们从两张图像中,得到了一对配对好的特征点,像图7-7里显示的那样.如果我们有若干对这样的匹配点,就可以通过这些二维图像 ...

  5. OpenCV-Python] OpenCV 中摄像机标定和 3D 重构 部分 VII

    https://www.cnblogs.com/Undo-self-blog/p/8448500.html 42 摄像机标定 目标 • 学习摄像机畸变以及摄像机的内部参数和外部参数 • 学习找到这些参 ...

  6. 【三维重建】三维重构基础知识、三维数据、重建流程

    文章目录 1.在计算机内生成三维信息 三维图像重构: 四个坐标系 坐标系转换 内参矩阵 外参矩阵 图像采集设备的标定方法: 2.相关概念 (1)彩色图像和深度图像 (2)PCL (3)点云数据(PCD ...

  7. 智能车竞赛技术报告 | 基础四轮组 - 哈尔滨工程大学 - 济海追风5队

    简 介: 本文详细介绍了哈尔滨工程大学"济海追风5队"在第十六届全国大学生智能汽车竞赛基础四轮组中的系统方案.本次比赛采用大赛组委会指定的B3型车模,以英飞凌半导体公司生产的32位 ...

  8. Python+OpenCV:对极几何(Epipolar Geometry)

    Python+OpenCV:对极几何(Epipolar Geometry) 理论 When we take an image using pin-hole camera, we loose an im ...

  9. [GO语言基础] 四.算术运算、逻辑运算、赋值运算、位运算及编程练习

    作为网络安全初学者,会遇到采用Go语言开发的恶意样本.因此从今天开始从零讲解Golang编程语言,一方面是督促自己不断前行且学习新知识:另一方面是分享与读者,希望大家一起进步.前文介绍了Golang的 ...

最新文章

  1. R语言构建决策树(decision trees)模型并进行调优和解释
  2. android fersco 框架,Android Fresco框架的简单使用
  3. c++ override final关键字
  4. 二维矩阵与二维矩阵之间的卷积
  5. Webbench网站压力测试
  6. http://www.mamicode.com/info-detail-1208112.html
  7. 美国支付巨头Verifone遭遇网络攻击
  8. 是否应该频繁升级小米的系统?
  9. 计算机课中初中一年级学生特点分析,初中信息技术说课稿:计算机的组成
  10. php 字符串的比较大小,php怎么比较两个字符串的大小
  11. Linux FTP安装问题
  12. 手把手教你如何加入到github的开源世界!
  13. 《C语言及程序设计》实践参考——找数字
  14. 利用rsyslog 对Linux用户进行审计
  15. Trapcode Particular 5 - Particle
  16. 中缀/后缀/前缀表达式及相互转换的手算详细步骤及C代码实现
  17. 估计四川长虹的beta系数
  18. 遗传算法优化BP神经网络,bp神经网络的优化算法
  19. yolov3/yolov4/yolov5/yolov6/yolov7/lite/fastdet/efficientdet各系列模型开发、项目交付、组合改造创新之—桥梁基建隧道裂痕裂缝检测实战
  20. C++快速讲解(九):I/O操作、模板编程、容器、函数对象

热门文章

  1. 利用Golang可选参数实现可选模式
  2. 通用预约小程序,可广泛应用于医疗、政务、教育、培训、体育、金融、生活服务等行业领域,基于腾讯小程序云开发,无须服务器和域名
  3. C++基于优先队列建立链式哈夫曼树并求哈夫曼编码及WPL
  4. 分享 | OpenCV4.5.4 语音识别使用测试(含详细步骤)
  5. 苹果资讯|iOS 14.2 Beta为Control Center添加了新的Shazam音乐识别功能
  6. 【BZOJ3925】[ZJOI2015]地震后的幻想乡(动态规划)
  7. 计算机argument,编程中argument什么意思?一定要准确..
  8. ADS1292检测原理及其驱动
  9. 视频聊天室如何成功赚钱分享攻略一
  10. openSUSE----openSUSE常用的软件包管理命令