文章目录

  • How to Compute Intrinsics from Vanishing Points
    • 三角形五心定律
    • 三个正交消失点可以计算焦距和图像中心!
  • 相机标定
    • 投影矩阵
    • 理想情况
      • P 这个3乘4的矩阵
    • 径向畸变
    • 校准时我们需要计算内参,外参
  • 综上,四个坐标系的变换关系
    • 相关专利搜索
  • 实验一:全景照片
  • 实验二:相机标定
  • How to Compute Camera Orientation相机方向
    • Case 1: Using a single vanishing point
    • Case 2: Using two vanishing points
    • 利用灭点恢复相机姿态,至少需要找到两个互相垂直方向上的灭点。
    • Exercise II
    • Case 3: Homography 平面情况下的单应变换
      • 四点求解单应性矩阵
      • Absolute Orientation Quaternion Horn 的 《Closed-form solution of absolute orientation using unit quaternions》
    • 言归正传
    • 相机到世界坐标系

课程《Robotics_Perception》:
地址:https://www.coursera.org/learn/robotics-perception/lecture/flqF4/vanishing-points-how-to-compute-camera-orientation

How to Compute Intrinsics from Vanishing Points


一个图像中有三组正交的平行线,形成 了三个灭点


上图黄线——地平线为提供了相对于相机的地平面方向


如果水平线AB向我们提供了有关地平面的信息,并且C对应于垂直方向,那么AB是否应确定C为?

答案是否定的,因为我们省略了焦距和图像中心的影响。

让我们将ABC看作是四面体OABC,包括投影中心

三角形五心定律





欧氏几何定理:如果H是ABC的正交中心,并且所有三个角度AOB,BOC和COA均为直角,则OH垂直于ABC平面!

OH是光轴,ABC是像平面,因此,H是像心

三个正交消失点可以计算焦距和图像中心!

相机标定

如何描绘相机的特性 获得它的参数 不管是焦距 图像中心 图像畸变 甚至是相机在某个固定参考系中的位置

投影矩阵

理想情况

投影矩阵 是3乘4的矩阵 如果我用它乘一个世界坐标 我们得到 λ∗[uv1]Tλ*[u v 1]^Tλ∗[uv1]T 其中[uv][u v][uv]是像素坐标

我们必须考虑以下问题:
如果P是已知的 某人给了我们某点的世界坐标:we would immediately get u and v.

如果P是已知的 ,somebody gives us u and v,:we will not be able to immediately get Xw Yw Zw(世界坐标) because there is one unknown there, the lambda(λ), the unknown depth.但换一种 我们将通过中心投影和像素获得一个范围空间

P 这个3乘4的矩阵

而这个3乘4的矩阵取决于相机参数 f U0 和 V0以及与 空间变换相关(外参)的一些参数

径向畸变

像GoPro这样的相机中观察到了 世界中的直线在其中将不再是直线 你将看到被弯曲的线条 但这些弯曲的线有一些特别的特性 他们都是被关于中心扭曲的 我们称这种畸变为径向畸变 这意味着像素点是沿着从中心 放射的径向成比例扭曲的


在以前人们没有计算机的时候 他们只能试着通过查阅相机规格表 来计算这些参数 。例如 焦距会以毫米的形式给出 有些人可能知道电影镜头是35mm的 人们就只能用这个值去计算投影 图像中心可以通过一些调整过程获得 而k1 k2等等就通过直接测量胶片相机样片获得

现在有了计算机和一大堆处理几何变换 及最优化问题的软件 我们可以在电脑上完成 所以我们再也不依赖于读相机规格表了 而是进行一种称为标定的过程

  • 估计焦距 f 它将被在像素空间测量
  • 图像中心也直接在像素空间获得
  • k1k2等等这些描述径向畸变 的无量纲的参数

这些内参与外参不同 外参取决于相机相对于固定坐标系 的位置

校准时我们需要计算内参,外参

To perform this calibration, we need to compute the intrinsic and extrinsic parameters given world coordinates of some points in the world and the corresponding coordinates in images.


当我们获得坐标变换RT和 内参K后 我们除去了径向畸变 然后我们可以获得世界中光学的投影 做任何我们想要的计算 例如 计算相机的移动 或调节一个点

点击calibrate 这是软件将在给定的世界坐标和 像素坐标条件下计算相机参数 你将看到这些参数是向量形式的 包含焦距 图像中心c 径向畸变 齐次变换矩阵

我们实际上看到两个焦距 x和y的焦距是不同的 这还是由像素不是方的导致的 在老式电视中 像素是长方形 这就导致了x和y有不同的缩放因子

综上,四个坐标系的变换关系

https://blog.csdn.net/lyl771857509/article/details/79633412



将一个三维点转换到像素的过程有两个关键因素:一是相机拍摄时的R和t(外参),二是相机的内参矩阵K。

相关专利搜索

https://blog.csdn.net/jishijian7408/article/details/93715876
一种基于二消失点的相机自标定方法(专利)https://patents.google.com/patent/CN105389808A/zh

本发明公开了一种基于二消失点的相机自标定方法。以场景中两组正交的平行线为自标定图案,获取不同视点的四幅及以上序列图像,用基于Harris亚像素角点检测方法提取每幅图像中自标定图案的四个交点,并求出两个消失点的图像坐标。

求灭点:
(1)角点检测:采用基于Harris像素角点检测方法检测序列图像,提取每幅图像的两组相互正交的平行直线的四个交点的图像坐标
(2)根据四个交点的坐标和灭点的定义,求出两灭点的图像坐标

计算相机内参(主点坐标 + 焦距):
需要四张以上的图像,因为未知数的个数

实验一:全景照片

实验二:相机标定

How to Compute Camera Orientation相机方向

我们如何 得出我们在空间中的位置。也就是第一人称坐 标系是一个相对简单的坐标系 在其中x轴指向右 y轴向下 z轴指向空间内部

红色表示X轴 绿色表示Y轴 蓝色表示Z轴

Case 1: Using a single vanishing point





如图像面上z方向的灭点在真实世界中的坐标可以记为(0,0,1),为了表示这个点在无限远处,在最后加个0,变为(0,0,1,0)。而将这个点带入成像方程里,3×4的相机变换矩阵(外参矩阵)与4×1的点坐标相乘,只剩下3×1的r3。所以K逆乘以z·Vz(将像素坐标转换到光学世界)即可以得到r3,这里的已知量是Vz和K,待求量是r3,但式子中还有一个尺度因子z。但其实有没有z对最终结果没有任何影响。因为r3是旋转矩阵中的一列,所以它的模应该为1,也就是说最后要对其进行归一化,这就等于是消除了z的影响。举个简单的例子向量(1,2,3)和向量(2,4,6)最终归一化后的向量是一样的。

旋转矩阵列向量所代表的物理意义:

PAN是相机/摄像机云台的上下运动
TILT是相机/摄像机云台的左右运动

在这里表示世界坐标系的z轴在相机坐标系下的旋转角度,对应实际的pan和tilt角度。需要注意的是只使用一个z方向上的灭点只能恢复出pan和tilt,对于roll无法恢复。因为绕z轴旋转z轴灭点在图像上的位置是不会改变的。后面会说到,给定两个互相垂直方向上的灭点,即可以完整恢复相机的相对姿态。

Case 2: Using two vanishing points

http://zhaoxuhui.top/blog/2019/10/27/robotics-perception-note-2.html


与z方向类似,x方向上的灭点在真实世界中的坐标可记为(1,0,0),为了表示无限远,在最后加个0,变为(1,0,0,0)。r1解法与r3一样,在求得r3和r1后(别忘了归一化),r2可以由r3叉乘r1得到(因为旋转矩阵的正交性,各分量间互相垂直)。得到r1、r2、r3以后,将它们组成矩阵即为旋转矩阵R,表示相机相对于世界的旋转。

这里需要注意的一点是r2的叉乘顺序问题,是r3×r1还是r1×r3,它们的差别在于最后得到的结果方向相反。顺序准则是最后叉乘得到的方向和现有方向要满足右手定则。如下图所示坐标系中:

根据右手定则可以很容易地得到:r3=r1×r2、r2=r3×r1、r1=r2×r3。再补充一点:两个单位正交向量叉乘,结果还是单位向量。

因此也可以看出来,要想利用灭点恢复相机姿态,至少需要找到两个互相垂直方向上的灭点。

利用灭点恢复相机姿态,至少需要找到两个互相垂直方向上的灭点。

Exercise II






由以上例子可以看出,要想用灭点求姿态,需要在图片中找到两组现实世界中互相垂直方向上的平行线,然后利用齐次坐标(坐标增加一维1)随意表示线上两点,利用叉乘求得直线方程,再将两个直线做叉乘,即可得到它们的交点(要把向量同除以z,使z分量化为1才表示在像面上的交点坐标)。这样两组平行线就可以得到两个交点如Vx和Vy,这样再结合内参矩阵K,就可以求得r1、r2,进而r3=r1×r2,得到r1、r2、r3以后别忘了分别对它们归一化,最终可获得相对于那个物体的旋转矩阵R。

Case 3: Homography 平面情况下的单应变换

上面介绍的利用真实世界中两个垂直方向上灭点计算相机相对旋转的办法无法恢复平移t。要想同时恢复旋转和平移,应该使用单应变换(Homography transformation),从一个3D坐标中的平面到2D坐标下的平面。


假设地面(x-y平面)上有一个点,那么它用齐次坐标表示就是(X,Y,0,1),通过变换得到在像面上的像素坐标为m(u,v,1)。在将坐标与变换矩阵相乘时,很明显r3就会被消掉。这样,把K以及r1、r2、t相乘组成的矩阵叫做H,即为单应矩阵,它可以由至少4个点利用数值算法求出。注意这里的r1、r2模长为1。

四点求解单应性矩阵

https://www.zhihu.com/question/23310855


Absolute Orientation Quaternion Horn 的 《Closed-form solution of absolute orientation using unit quaternions》

Paper大致逻辑是:

  1. 两组中各取3个点, 建立两组新坐标系 (3个点: 一个原点。 另两个和原点可以定义一个面。 两个中的一个和原点构成一个轴。 垂直于面并过原点的方向为另一个轴。 垂直于两个轴为第三个轴。三个相互垂直的轴就是一个新坐标系啦~)
  2. 原目的是寻找两组3D点之间的Rotation(R)和Translation(T). 现在则是寻找新定义的两个坐标系间的R,T。 因为我们有第四个点, 第四个点可以通过三个坐标系表示:原有的Global Coordinate, 以及1中新定义的两个坐标系。
    链接:https://www.zhihu.com/question/23310855/answer/24390330

注意: 虽然四个点就能解出来R,T. 但这是在对应点无误差的假设下。 这个方法是至少提供4组对应点,实际使用中通常要提供远多于四个点来降低误差对结果的影响。

========================
% Computes the orientation and position (and optionally the uniform scale
% factor) for the transformation between two corresponding 3D point sets Ai
% and Bi such as they are related by:
%
% Bi = sR*Ai+T
%
% Implementation is based on the paper by Berthold K.P. Horn:
% "Closed-from solution of absolute orientation using unit quaternions"
% The paper can be downloaded here:
% http://people.csail.mit.edu/bkph/papers/Absolute_Orientation.pdf
%
% Authors: Dr. Christian Wengert, Dr. Gerald Bianchi
% Copyright: ETH Zurich, Computer Vision Laboratory, Switzerland
%
% Parameters: A 3xN matrix representing the N 3D points
% B 3xN matrix representing the N 3D points
% doScale Flag indicating whether to estimate the
% uniform scale factor as well [default=0]
%
% Return: s The scale factor
% R The 3x3 rotation matrix
% T The 3x1 translation vector
% err Residual error
%
% Notes: Minimum 3D point number is N > 4
========================

言归正传

而同时,根据H的定义,如果已经知道了K,那么也可以反求出旋转矩阵R和平移t。因为H乘以K逆以后,得到的是r1、r2、t组成的矩阵,平移t就可以直接得到,而旋转矩阵已经得到了两个,根据正交性质,r3可由叉乘得到r3=r1×r2。需要注意的是数值求解得到的H中的r1、r2并不一定满足模长等于1的性质,因此还需要将其归一化。如上图所示可以使用第一列的模长a对三列都归一化,归一化后才对应旋转矩阵的第一列、第二列。

相机到世界坐标系

上面估计出了相机的旋转与平移,它在第三人视角(世界)坐标系的需要转换。

在这里t表示一个在相机坐标系下的从相机坐标系原点指向世界坐标系原点的向量。


而从世界坐标系来看,-t表示一个从世界坐标系原点指向相机坐标系原点的向量,方向与t相反。

然后通过旋转矩阵将在相机坐标系下度量的t转换到世界坐标系的度量下。

3月3日 单灭点、双灭点、单应矩阵求解相机姿态,世界坐标-相机坐标-图像坐标-像素坐标四个坐标系的变换关系,通过Vanishing Points计算焦距和像心相关推荐

  1. 评选 | 2017中国AI英雄风云榜票选即将开启,12月4日在乌镇公布榜单

    本文系网易智能工作室出品, 聚焦AI,读懂下一个大时代! 大型年度AI人物评选--2017中国AI英雄风云榜,自荐提名进行中! 奖项设置:技术创新人物TOP 10,商业创新人物TOP 10 表彰人物: ...

  2. 以人为本的机器学习:谷歌人工智能产品设计概述 By 机器之心2017年7月17日 12:13 取代了手动编程,机器学习(ML)是一种帮助计算机发现数据中的模式和关系的科学。对于创建个人的和动态的经历

    以人为本的机器学习:谷歌人工智能产品设计概述 By 机器之心2017年7月17日 12:13 取代了手动编程,机器学习(ML)是一种帮助计算机发现数据中的模式和关系的科学.对于创建个人的和动态的经历来 ...

  3. AI开发者大会之计算机视觉技术实践与应用:2020年7月3日《如何利用计算机视觉增加便利店连锁每日销售额》、《基于图像 / 视频的人脸和人体分析基础技术及其应用介绍》

    AI开发者大会之计算机视觉技术实践与应用:2020年7月3日<如何利用计算机视觉增加便利店连锁每日销售额>.<基于图像 / 视频的人脸和人体分析基础技术及其应用介绍>.< ...

  4. SPWM调制-单极性-双极性-单极性倍频-simulink仿真对比

    1.单极性-双极性-单极性倍频原理 2.仿真模型 3.仿真结果 电流 电压 FFT分析对比

  5. 淘宝主播榜单丨2月22日-2月28日淘宝直播榜单

    知瓜数据发布2021年2月22日-2月28日淘宝直排行榜,分别从知瓜指数.粉丝数.直播场数.场均观看.增粉数等方面进行数据展示,方便大家直观对比上周的直播数据情况. 1.本期周榜提供: ①全网播主增粉 ...

  6. 11月21日spring mvc的表单校验培训日记

    看到HtmlFilter中的一段代码: StringBuffer result = new StringBuffer(content.length + 50); 顺便问问学员们其中的一些思想和原因,结 ...

  7. 3月9日 笔记:RANSAC随机样本一致性,灭点、对极几何计算、H矩阵、PNP估计相机位置,3D匹配、投影变换、N点定位求解姿态

    [修订]: 2020-03-11:特征匹配 分为:(1)2D-2D : (2)2D-3D : (3)3D-3D https://www.zhihu.com/question/51510464 2D-2 ...

  8. 互联网晚报 | 11月14日 星期日 | 好未来宣布关闭K9学科类业务;京东工业品推出“智能移动仓”;北交所11月15日正式开市...

    ‍ 今日看点 ✦ 好未来:义务教育阶段的学科类校外培训服务将于12月31日截止 ✦ 天猫双11菜鸟物流绿色减碳1.8万吨,120万人参与快递箱回收 ✦ 京东工业品推出"智能移动仓" ...

  9. “滴滴出行” 成长路径分析(2016年01月19日)

    [文章摘要]本文从产品和运营的层面深度分析和还原了 "滴滴出行" 这款现象级的产品在过去 3-4年 里是如何一点点从 0 起步,成长为现在 100 多亿美元级的庞然大物的.对于互联 ...

  10. 李佳琦10月24日美妆节预告,李家琦双十一预告每日更新

    李佳琦10月24日美妆节预告,李家琦双十一预告每日更新 2022年双11预售已经开始了,李家琦将在10月24日20点双11直播,第一天10.24是美妆节,爆款麦庄产品抢先预定,本文小编为姐妹们带来了李 ...

最新文章

  1. keras扁平化 激活函数 避免过拟合技巧
  2. 2018面向对象程序设计(Java)第3周学习指导及要求
  3. 《SolidWorks 2017中文版机械设计从入门到精通)》——2.6 几何关系
  4. python3 的 str bytes 区别
  5. Java中把JSON和List结果集互转的代码片段整理
  6. oracle expdp 39002,expdp 导入数据时ORA-39002、ORA-39070错误排查
  7. /*去hover动画效果*/
  8. oracle索引建立
  9. onvif学习笔记6:onvif的OSD坐标小记
  10. Pyspark 最近使用的一些有趣姿势的梳理
  11. VMware新建虚拟机
  12. 微信h5开发遇到的小问题
  13. 漫步者耳机打开网页媒体自动关机
  14. PDF打印内容缺失问题解决办法
  15. 《SolidWorks 2014中文版机械设计从入门到精通》——2.3 草图编辑
  16. 11.NDP协议分析与实践
  17. 期货量化交易程序CTP入门指南 一
  18. ROG 冰刃 3 枪神 2 Plus 第二时间上手体验
  19. 【论文精读】Perception-based seam cutting for image stitching
  20. 即第一个字母变成第26个字母,第i个字母变成第(26-i+1)个字母,非字母字符不变。要求编程将密码译回原文,并打印出密码和原文。

热门文章

  1. 语言随机效应模型_R语言LME4混合效应模型研究教师的受欢迎程度
  2. 数据结构-----双向链表笔记
  3. 题目:输入两个正整数m和n,求其最大公约数和最小公倍数。
  4. 计算机IP掩码的与运算,计算机IP地址与子网掩码如何进行AND运算
  5. BIGO 使用 Flink 做 OLAP 分析及实时数仓的实践和优化
  6. 你写的代码要被 GitHub 存在北极啦!期限是 1000 年!
  7. 我背着女朋友,用 Python 偷偷抓取了她的行踪(单身狗勿进)
  8. 如何编译并使用x264库
  9. 关于直播,所有的技术细节都在这里了(二)
  10. 密码密文 android,Android开发之密码明文密文切换显示