python计算机视觉学习———照相机模型与增强现实

4.1针孔照相机模型

针孔照相机模型(有时称为射影照相机模型)是计算机视觉中广泛使用的照相机模
型。对于大多数应用来说,针孔照相机模型简单,并且具有足够的精确度。这个名
字来源于一种类似暗箱机的照相机。该照相机从一个小孔采集射到暗箱内部的光线。
在针孔照相机模型中,在光线投影到图像平面之前,从唯一一个点经过,也就是
照相机中心 C。图 4-1 为从照相机中心前画出图像平面的图解。事实上,在真实的
照相机中,图像平面位于照相机中心之后,但是照相机的模型和图 4-1 的模型是一
样的。
在这里插入图片描述
由图像坐标轴和三维坐标系中的 x 轴和 y 轴对齐平行的假设,我们可以得出针孔照
相机的投影性质。照相机的光学坐标轴和 z 轴一致,该投影几何可以简化成相似三
角形。在投影之前通过旋转和平移变换,对该坐标系加入三维点,会出现完整的投
影变换。
在针孔照相机中,三维点 X 投影为图像点 x(两个点都是用齐次坐标表示的),如下
所示:
在这里插入图片描述
这里,3×4 的矩阵 P 为照相机矩阵(或投影矩阵)。注意,在齐次坐标系中,三维
点 X 的坐标由 4 个元素组成,X=[X, Y, Z, W]。这里的标量 λ 是三维点的逆深度。如
果我们打算在齐次坐标中将最后一个数值归一化为 1,那么就会使用到它。

4.1.1 照相机矩阵

照相机矩阵可以分解为:
在这里插入图片描述
其中,R 是描述照相机方向的旋转矩阵,t 是描述照相机中心位置的三维平移向量,内标定矩阵 K 描述照相机的投影性质。

标定矩阵仅和照相机自身的情况相关,通常情况下可以写成:
在这里插入图片描述
图像平面和照相机中心间的距离为焦距 f。当像素数组在传感器上偏斜的时候,需要用到倾斜参数 s。在大多数情况下,s 可以设置成 0。α通常为1。

除焦距之外,标定矩阵中剩余的唯一参数为光心(有时称主点)的坐标 c=[cx,cy],也就是光线坐标轴和图像平面的交点。因为光心通常在图像的中心,并且图像的坐标是从左上角开始计算的,所以光心的坐标常接近于图像宽度和高度的一半。特别强调一点,在这个例子中,唯一未知的变量是焦距 f。

4.1.2三维点的投影

# -*- coding: utf-8 -*-

from PCV.geometry import camera
from pylab import *
import random
import os
from numpy import *


# 载入点
points = loadtxt('house.p3d').T
points = vstack((points,ones(points.shape[1])))
# 设置照相机参数
P = hstack((eye(3),array([[0],[0],[-10]])))
cam = camera.Camera(P)
x = cam.project(points)
# 绘制投影
figure()
subplot(121)
plot(x[0],x[1],'k.')

# 创建变换
r = 0.05*random.rand(3)
rot = camera.rotation_matrix(r)
# 旋转矩阵和投影
figure()
for t in range(20):
 cam.P = dot(cam.P,rot)
 x = cam.project(points)
 plot(x[0],x[1],'k.')
 show()

在这里插入图片描述
使用齐次坐标来表示这些点。然后我们使用一个投影矩阵来创建 Camera对象将这些三维点投影到图像平面并执行绘制操作。

4.1.3照相机矩阵的分解

如果给定照相机矩阵 P,我们需要恢复内参数 K 以及照相机的位置 t 和姿势 R。矩阵分块操作称为因子分解。这里,我们将使用一种矩阵因子分解的方法,称为 RQ 因子分解。

齐次坐标下,物体的物理坐标是 [x,y,z,1]′的形式,图像上对应点的坐标是 [u,v,1]′的形式,所以相机矩阵 P作为把物体映射成像的矩阵,应该是一个 3×4 的矩阵。
因此,照相机矩阵可以表示为如下形式:
在这里插入图片描述
| 代表的是增广矩阵
M 代表的是可逆的 3×3 的矩阵
C 是列向量,代表世界坐标系中相机的位置

要想求得 C, 只需要 P 的前三列组成的M, 求出来 −M−1 再乘以最后一列,就得到了 C矩阵的确可以把 3D的点投影到 2D 空间,但是,这种形式下表达的信息是很粗糙的,比如:没有提供相机的摆放姿态,没有相机内部的几何特征。
为了挖掘这些信息,对矩阵进一步分解为一个内参矩阵和外参矩阵的乘积:
在这里插入图片描述
1,矩阵R是rotation矩阵,因此是正交的;K是上三角矩阵. 对P的前三列进行RQ分解就可得到KR

2,T=−RC, 是摄像机坐标系下世界坐标系原点的位置, tx,ty,tz分别代表世界坐标原点在相机的 左右,上下,前后 位置关系。在三维重建中,一组标定好了的图片序列,它们各自的相机矩阵中的T应该是相同的。

3,其中 K 就是内参,R,T 为外参。

RQ 因子分解的结果并不是唯一的。在该因子分解中,分解的结果存在符号二义性。由于我们需要限制旋转矩阵 R 为正定的(否则,旋转坐标轴即可),所以如果需要,我们可以在求解到的结果中加入变换 T 来改变符号。

import camera

K = array([[1000,0,500],[0,1000,300],[0,0,1]])
tmp = camera.rotation_matrix([0,0,1])[:3,:3]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值