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

课程《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的矩阵 如果我用它乘一个世界坐标 我们得到 λ ∗ [ u v 1 ] T λ*[u v 1]^T λ[uv1]T 其中 [ u v ] [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转换到世界坐标系的度量下。
在这里插入图片描述

  • 28
    点赞
  • 133
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 11
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hali_Botebie

文中错误请不吝指正!!!!!!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值