首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >3D建模问题--重温

3D建模问题--重温
EN

Stack Overflow用户
提问于 2009-09-07 17:48:26
回答 2查看 162关注 0票数 1

这是我之前发布的一个问题的后续,希望这一次有更好的描述。

我做了一副眼镜,上面有一个针孔摄像头,可以记录人的眼睛运动。相机位于眼睛下方,因此正抬头看着眼睛。还有围绕Y轴(即相机向左或向右轻微倾斜)和Z轴(即相机沿顺时针方向或逆时针方向轻微扭曲)的轻微旋转。

从视频中,我提取了图像中的一组点,这些点应该看起来大致是线性的,但不是因为相机的方向不是直视人的眼睛。

如果我知道一个单位向量U,它描述了相机的方向以及相机正在观察的图像点IP1(x,y),如果相机位于(0,0,-z),我如何计算这些图像点的坐标?

EN

回答 2

Stack Overflow用户

发布于 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方程被定义为:

代码语言:javascript
运行
复制
     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,您就可以对第二个图像执行相同的操作,该图像的方向与第一个图像不同。因此:

代码语言:javascript
运行
复制
      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
EN

Stack Overflow用户

发布于 2009-09-07 18:20:34

我猜你在试着弄清楚眼睛在看什么。我想我会这么做:

使用眼镜的尺寸计算从相机到眼睛的向量。

猜猜眼睛内部的几何中心(你的点在眼睛的表面,而不是中心)。

然后计算从眼睛中心到该点的向量,得到“注视向量”。

这真的有帮助吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1390367

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档