这是我之前发布的一个问题的后续,希望这一次有更好的描述。
我做了一副眼镜,上面有一个针孔摄像头,可以记录人的眼睛运动。相机位于眼睛下方,因此正抬头看着眼睛。还有围绕Y轴(即相机向左或向右轻微倾斜)和Z轴(即相机沿顺时针方向或逆时针方向轻微扭曲)的轻微旋转。
从视频中,我提取了图像中的一组点,这些点应该看起来大致是线性的,但不是因为相机的方向不是直视人的眼睛。
如果我知道一个单位向量U,它描述了相机的方向以及相机正在观察的图像点IP1(x,y),如果相机位于(0,0,-z),我如何计算这些图像点的坐标?
发布于 2009-09-07 20:09:40
这显然是一个摄影测量问题,并不简单。摄影测量学在工科大学分1、2、3个班(1-3个学期)授课。
首先,在相机拍摄的图像中,三维空间中的一条直线被投影为(2维)直线(这与相机的方向无关)。如果3D线确实是直的,而2D线不是,那么相机就不是“公制”的,这意味着它扭曲了图像。幸运的是,在大多数静态相机中,失真的主要原因可以通过直接线性变换方法(DLT)进行补偿。摄像机应该也是如此,尽管我还没有验证过。
其次,如果您有图像上某个点的x,y坐标(2个已知),则不可能计算同一个点的X,Y,Z空间坐标(3个已知)。为了做到这一点,你必须有第二个图像,不同的方向,其中相同的点有x',y‘坐标(2知道更多)。然后你就可以计算X,Y,Z坐标了--理论上。在实际应用中,由于涉及到非线性最小二乘法(LSM),计算较为困难。
您可能知道兴趣点位于一个表面(可能是眼睛的表面),而不是第二个图像。在这种情况下,这些点应该满足形式为f(X,Y,Z)=0的曲面方程。通过这个方程与一幅图像的x,y坐标相结合,您就能够计算出X,Y,Z坐标。再说一次,计算并不简单。
第三,DLT方程被定义为:
L1 X + L2 Y + L3 Z + L4
x = --------------------------
L9 X + L10 Y + L11 Z + 1
L5 X + L6 Y + L7 Z + L8
y = --------------------------
L9 X + L10 Y + L11 Z + 1
如果至少有6个控制点,则Li系数是未知的,并且可以计算。控制点是图像上具有已知X,Y,Z (3D)坐标和已知x,Y (2D)坐标的点。
一旦计算了Li,您就可以对第二个图像执行相同的操作,该图像的方向与第一个图像不同。因此:
L1' X + L2' Y + L3' Z + L4'
x' = -----------------------------
L9' X + L10' Y + L11' Z + 1
L5' X + L6' Y + L7' Z + L8'
y' = -----------------------------
L9' X + L10' Y + L11' Z + 1
第四,现在你有了Li和Li‘系数,你终于可以计算任意点的X,Y,Z坐标了,这个点到第一个图像的投影是x,y,到第二个图像的投影是x',y’。您可以求解X、Y、Z的4个DLT方程。
作为最后的想法,您可以使用控制曲线代替控制点,但这是一个活跃的研究领域。
发布于 2009-09-07 18:20:34
我猜你在试着弄清楚眼睛在看什么。我想我会这么做:
使用眼镜的尺寸计算从相机到眼睛的向量。
猜猜眼睛内部的几何中心(你的点在眼睛的表面,而不是中心)。
然后计算从眼睛中心到该点的向量,得到“注视向量”。
这真的有帮助吗?
https://stackoverflow.com/questions/1390367
复制相似问题