增强现实

增强现实(Augmented Reality,AR)是将物体和相应信息放置在图像数据上的一 系列操作的总称。最经典的例子是放置一个三维计算机图形学模型,使其看起来属 于该场景;如果在视频中,该模型会随着照相机的运动很自然地移动。如上一节所 示,给定一幅带有标记平面的图像,我们能够计算出照相机的位置和姿态,使用这 些信息来放置计算机图形学模型,能够正确表示它们。

1 PyGame 和 PyOpenGL

PyGame 是非常流行的游戏开发工具包,它可以非常简单地处理显示窗口、输入设 备、事件,以及其他内容。PyGame 是开源的,可以从 http://www.pygame.org/ 下 载。事实上,它是一个 Python 绑定的 SDL 游戏引擎。

PyOpenGL 是 OpenGL 图形编程的 Python 绑定接口。OpenGL 可以安装在几乎所 有的系统上,并且具有很好的图形性能。OpenGL 具有跨平台性,能够在不同的操 作系统之间工作。

from OpenGL.GL import *
from OpenGL.GLU import *
import pygame, pygame.image
from pygame.locals import *

这样可以引入这两个工具包。

2 从照相机矩阵到 OpenGL 格式

OpenGL 使用 4×4 的矩阵来表示变换(包括三维变换和投影)。这和我们使用 的 3×4 照相机矩阵略有差别。但是,照相机与场景的变换分成了两个矩阵,

GL_PROJECTION 矩阵和 GL_MODELVIEW 矩阵。GL_PROJECTION 矩阵处理图 像成像的性质,等价于我们的内标定矩阵 K。GL_MODELVIEW 矩阵处理物体和照 相机之间的三维变换关系,对应于我们照相机矩阵中的 R 和 t 部分。一个不同之处 是,假设照相机为坐标系的中心,GL_MODELVIEW 矩阵实际上包含了将物体放置 在照相机前面的变换

模拟视图矩阵能够表示相对的旋转和平移,该变换将该物体放置在照相机前(效果 是照相机在原点上)。模拟视图矩阵是个典型的 4×4 矩阵,如下所示:

其中,R 是旋转矩阵,列向量表示 3 个坐标轴的方向,t 是平移向量。当创建模拟视 图矩阵时,旋转矩阵需要包括所有的旋转(物体和坐标系的旋转),可以将单个旋转 分量相乘来获得旋转矩阵。

3 在图像中放置虚拟物体

我们需要做的第一件事是将图像(打算放置虚拟物体的图像)作为背景添加进来。 在 OpenGL 中,该操作可以通过创建一个四边形的方式来完成,该四边形为整个视 图。完成该操作最简单的方式是绘制出四边形,同时将投影和模拟试图矩阵重置, 使得每一维的坐标范围在 -1 到 1 之间