计算相机光线方向到3d世界像素

问题描述 投票:6回答:1

我想计算从this paper中描述的具有给定高度的相机到像素位置(在世界坐标中)的光线方向。相机图像尺寸为640,480。我校准了固有的相机参数并且不对每个图像进行分类。我测量了相机和背景平面(29厘米)之间的物理距离,如下图所示:

1 cm转换为25像素(假设为二次像素)。我的第一种方法是根据像素和摄像机位置进行计算,如下所示:

float3 pixPos = (float3)(u, v, z);
float3 camPos = (float3)(height/2, width/2, 29*25);
float3 ray = normalize(pixPos-camPos);

其中u,v是从0,0到高度的图像坐标,宽度和z是我(已经估计的)高度值。这似乎不是正确的方法。我已经对SO进行了搜索并找到了this answer,但其中描述的解决方案不包括像素高度(此处为z)。

graphics camera pixel tracing
1个回答
13
投票

几年前,当我写论文时,我正在解决同样的问题。以下是介绍如何为光线追踪创建相机的部分内容。

首先,您需要定义摄像机的坐标系。它是正交坐标系,这意味着所有三个基矢量彼此垂直并且具有相同的大小(不必是“一”)。如果您的相机坐标系是right-handed or left-handed(我将谈论左撇子),你还需要指出。首先,您需要定义up vector(向量显示屏幕上的y轴是什么)和camera direction vector(因此从眼睛位置到投影平面中间的向量)。然后你将通过left vectorcross productup vector计算camera direction vector(或右边的矢量,如果你需要)(它指向屏幕上x轴的确切位置)。现在,因为只有相机方向矢量和左矢量是垂直的,你必须制作one more cross productcamera direction vector(图像上的矢量y)的left vector

所以你会得到像这样的相机协调系统

不,你必须定义,你的投影屏幕在世界坐标中有多大。这可能有时候很棘手,所以你也可以通过两个角度(phitheta)和眼睛位置的距离(让我们称之为d)来定义它。

你会得到的。 (x矢量是在屏幕上定义x轴的矢量,因此它是left vector或右矢量,取决于手性)通过这两个矢量uv的线性组合,您可以计算投影屏幕上的任何位置。系数alpha虽然代表投影屏幕中间的距离the point

所以,并且,srxy坐标计算图像和imageWidthimageHeight是适当的大小。

所以你可以在这张图片上看到

投影平面上任意点的最终位置是。

然后计算所请求的矢量。

© www.soinside.com 2019 - 2024. All rights reserved.