这是我发布的上一个问题的后续内容,这次有更好的描述,我希望。
我制作了一副眼镜,上面贴着针孔相机,记录了人的眼球运动。相机位于眼睛下方,因此俯视着眼睛。 Y轴周围也有轻微的旋转(即摄像机有轻微的左侧或右侧倾斜)和Z轴(即摄像机略微扭转时钟或逆时针)。
从视频中,我提取了图像中的一组点,这些点看起来应该是大致线性的但不是因为相机不是直视人的眼睛。
如果我知道描述相机方向的单位矢量U以及相机正在观看的图像点IP1(x,y),如果相机坐着,我该如何计算这些图像点的坐标在(0,0,-z)?
答案 0 :(得分:1)
这显然是摄影测量问题,并不简单。摄影测量学在技术大学的一,二或三个班级(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方程。
作为最后一个想法,你可以使用控制曲线而不是控制点,但这是一个积极研究的领域。
答案 1 :(得分:0)
我假设你正在试图弄清楚眼睛在看什么。我想我会这样做:
使用眼镜的尺寸计算从相机到眼睛的矢量。
猜测眼睛内部的几何中心(您的点位于眼睛表面,而不是中心)。
然后计算从眼睛中心到该点的矢量以获得'看向量'
这有帮助吗?