一、原理
1.针孔照相机模型
在光线投影到图像平面之前,从唯一一个点经过,也就是照相机中心C,如图:
1.1 照相机矩阵
P = K [ R | t ]
R是描述照相机方向的旋转矩阵,t是描述照相机中心位置的三维平移向量,内标定矩阵K描述照相机的投影性质。常用如下矩阵表示K:
还包括三维点的投影,照相机矩阵的分解,计算照相机中心
2.照相机标定
即计算出该照相机内参数。常拍摄多幅平面棋盘图像,处理计算。
焦距和光心用像素度量,即改变分辨率就会改变这些值。常用如下函数保存相机测量值。
def my_calibration(sz):
row, col = sz
fx = 2555*col/2592
fy = 2586*row/1936
K = diag([fx, fy, 1])
K[0, 2] = 0.5*col
K[1, 2] = 0.5*row
return K
3.以平面和标记物进行姿态估计
如果图像中包含平面状的标记物体,并且已经对照相机进行了标定,那么我们可以利用单应性矩阵计算出照相机的姿态(旋转和平移)。这里的标记物体可以为对任何平坦的物体。
4.增强现实
1.定义
将物体和相应信息放置在图像数据上的一系列操作的总称。例子:放置一个三维计算机图像学模型,使其看起来属于该场景。
2.工具包
要利用到PyGame和OpenGL工具包(需要自行安装),主要用到pygame里面的窗口和事件控制和OpenGL中设置照相机投影的函数。
3.过程
1.如果获得已经标定好的照相机K,可以利用set_projection_from_camera(K)
将照相机参数转换为OpenGL中的投影矩阵
2.在图像中放置虚拟物体,将想放的图像作为背景添加进来
3.综合集成
4.载入模型
二、样例
1.以平面和标记物进行姿态估计(以“立方体”为例)
提取两幅图像的SIFT特征,然后使用RANSAC算法稳健地估计单应性矩阵,并利用立方体检验结果的正确性:
2.增强现实(以“茶壶”为例)
三、代码
1.立方体
from pylab imp