从仿射相机矩阵

时间:2015-07-27 11:51:09

标签: opengl computer-vision rendering camera-calibration

我有一组2D到3D点对应关系,我从这些对应关系估计仿射相机矩阵(基本上,假设是正交投影)[1]。相机估计的输出是3x4矩阵,其中第三行是[0, 0, 0, 1](“仿射约束”)。

现在从这个相机矩阵,我想用OpenGL渲染我的模型。所以从本质上讲,从我的相机矩阵中创建一个ModelView和一个(正交)Projection矩阵。

我已经阅读了关于相机矩阵解剖/分解的材料数小时,但所有这些都是关于透视相机,而且由于我的矩阵中缺少“z”信息,我无法申请这些技巧。

我尝试了很多尝试,其中大部分都是在很早的阶段就失败了。我试过的一件事是取矩阵的第一行和第二行的点积(当然没有最后一列)来创建一个转换z的新行,但它只是[0, 0, 1],其中一个当然有道理。 我尝试的另一件事是在估计相机矩阵之前将我的2D点转换为剪辑坐标空间(即“反转”窗口变换),因此我可以进行窗口变换并翻转y(在我的屏幕空间中,原点位于上部(左)出图片。

我坦率地谈到如何从根本上解决这个问题。

[1]:用于估计从世界到图像对应的仿射相机矩阵的黄金标准算法,多视图几何中的算法7.2,Hartley& Zisserman,第2版,2003年。

1 个答案:

答案 0 :(得分:0)

仿射相机(参见例如here)仅进行正投影,然后进行仿射变形。

鉴于人们总是可以使用OpenGL正交相机作为任意图像转换的光栅化设备,仿制相机可以仿真如下:

  1. 为场景创建正交相机。渲染场景 使用它,回读生成的图像。
  2. 通过将所述仿射变换作为纹理变换矩阵,将相机模型引起的仿射变换应用于该图像。
  3. 在正射相机前面("卡")渲染一个矩形,覆盖其视野,并用步骤1中生成的图像纹理所述矩形。它将使用仿射变换作为扭曲变形请求。
  4. 如果性能问题,可以优化此序列。继续阅读"渲染到纹理"如何。