从3个已知点确定摄像机位置

时间:2010-03-02 13:10:27

标签: 3d equations 3dcamera

我是新来的 - 如果我做了一个失礼,请耐心等待我!

我的问题是,是否有一个很好的算法来确定摄像机的三维位置和方向,基于3个(或更多)已知的3d点最终在该摄像机上观看的图像?

问题出现了,在我计算6个方程时,有6个未知数,虽然我正在寻找一个通用的解,方程是复杂的三角函数。

任何想法都感激不尽!

干杯,

麦克

6 个答案:

答案 0 :(得分:2)

总的来说,我认为不会有独特的解决方案。

你可以把它分成两个问题:三个未知数:位置和方向。首先假设相机不会引入未知的扭曲(通过将球投射到平坦的胶片上来实现)。忽略一分钟的方向,你正在测量的是物体之间的角度分离。 从这里开始,我将假设只有三个点,你可以区分它们 - 它们是不同的颜色或其他东西。测量两个已知点之间的角度会使你进入二维表面在太空中(我不能轻易地绘制图形,但它们看起来有点像电场线)。添加另一个点将使您进入另一个相交的表面;有很多简并性,方程式有一个干净的精确解决方案并不明显。

值得注意的是,你看到的每一对都会强加体积约束,因此首先查看最钝的角度并对摄像机的位置进行一些限制可能很有用。

如果你可以确定位置,那么方向很容易,只需要两个(非食指)点。

答案 1 :(得分:0)

这是虚拟相机还是真正的相机?您还需要看起来像f / stop和焦距,甚至可能是光学器件的形状。这实际上取决于您需要对位置的准确程度以及拍摄的物体彼此之间的距离。如果您使用的是200mm变焦,焦距只有几英尺,那么您的视野可能只有几英寸宽。然而,如果你使用一个4.5毫米的圆形鱼眼,并且你有直接的圆形投影你可能有180度的视角。

答案 2 :(得分:0)

如果你想一想......这实际上是一个有点简单的想法......这是我的思路:

  1. 找到3点所在的飞机。此平面将与投影平面平行。
    1. 假设您有A,B和C点。找到从A到B和A到C的向量的叉积
    2. 将其标准化。那是你的飞机正常。
    3. 通过插入Ax + By + Cz + D = 0的值来求解重心方程式,其中A是法线的x,B是法线的y,C是法线的z,你求解D一旦你有了D,你就得到了飞机的代表。
  2. 在该平面上的所有三个点周围找到一个边界矩形,这将是您的渲染几何体,即视锥体的末端(渲染体积)。
  3. 找到我们刚找到的那个边界矩形的中心点。这是您最初的投影中心。
  4. 通过从点添加(或减去)法线,将该中心点移离边界矩形。继续前进,直至到达所需的视野。

答案 3 :(得分:0)

超过三分,肯定是可能的。

这是star trackers控制航天器态度的方式。

答案 4 :(得分:0)

你应该使用ransac算法! 你应该有一张推荐照片,你知道它在xyz中的相机位置然后你应该通过ransac比较新图像和推荐图像。然后你可以找到两张照片之间的偏移,然后将它添加到xyz参考

答案 5 :(得分:-2)

使用经过校准的相机 - 是的 您所需要的只是焦距(将像素映射到角度)摄像机的中心轴(将光线投射到场景中),然后在该光线上投射点很简单。

看一下OpenCV,它就像立体声相机校准

一样

alt text http://img.amazon.ca/images/I/41Ob1y3baeL._BO2,204,203,200_PIsitb-sticker-arrow-click,TopRight,35,-76_AA240_SH20_OU15_.jpg