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

3d 从3个已知点确定摄像机位置,3d,equations,3dcamera,3d,Equations,3dcamera,我是新来的,所以如果我失礼,请容忍我 我的问题是,有没有一个好的算法可以根据从摄像机上看到的图像上的3个(或更多)已知3d点的位置来确定摄像机的3d位置和方向 在我的计算中,问题归结为6个方程,其中有6个未知数,尽管我在寻找一个通解,而且方程是复杂的三角方程 感谢您的任何意见 干杯 迈克总的来说,我认为不会有唯一的解决方案 你可以把它分成两个问题,每个问题有三个未知数:位置和方向。首先假设相机不会引入未知的失真(通过将球体投影到平片胶片上的f'rinstance)。忽略方向一分钟,你测量的是物体

我是新来的,所以如果我失礼,请容忍我

我的问题是,有没有一个好的算法可以根据从摄像机上看到的图像上的3个(或更多)已知3d点的位置来确定摄像机的3d位置和方向

在我的计算中,问题归结为6个方程,其中有6个未知数,尽管我在寻找一个通解,而且方程是复杂的三角方程

感谢您的任何意见

干杯


迈克

总的来说,我认为不会有唯一的解决方案

你可以把它分成两个问题,每个问题有三个未知数:位置和方向。首先假设相机不会引入未知的失真(通过将球体投影到平片胶片上的f'rinstance)。忽略方向一分钟,你测量的是物体之间的角度分离。从这里开始,我假设只有三个点,你可以区分它们——它们是不同的颜色或者其他什么。测量两个已知点之间的角度会将你放在空间中的二维表面上(我无法轻松绘制图形,但它们看起来有点像电场线)。添加另一个点将使您位于另一个相交曲面上;存在大量的简并性,不明显的是方程有一个干净的精确解

值得注意的是,您所看到的每一对都会施加体积约束,因此,首先查看最钝角可能会很有用,并为相机的位置设置一些边界


如果你能确定位置,那么定位就很容易了,只需要两个(非日食)点。

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

看看OPENCV,它像立体声

摄像机标定一样。

这是虚拟相机还是真相机?您还需要查看f/stop和焦距,甚至可能还有光学元件的形状。这实际上取决于你需要对位置的精确程度,以及拍摄对象之间的距离。如果您使用的是焦点只有几英尺的200毫米变焦,您的视野可能只有几英寸宽。然而,如果你使用一个4.5毫米的全圆形鱼眼,你有直接的圆形投影,你可能有180度的视野

如果你仔细想想。。。这其实是一个有点简单的想法。。。以下是我的思路:

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

  • 有三点以上,这当然是可能的


    这是控制航天器姿态的方法。

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

    他如何从相机的中心轴开始,如果他试图找到的是相机的位置和方向?你从Posite算法开始,应该很明显,对于3个(非共线)点,一个针孔相机模型,相机只能在一个地方。我还没有找到一个关于Posite的简明陈述,但我可以勾勒出一些反例。很抱歉,但这个起点也不起作用。我看过OpenCV,对它有点不了解!我不是一个真正的程序员;我涉猎了POV射线,这是我得到的最接近-实际上,这个问题来自哪里!如果你熟悉3d数学(基本矩阵、投影等),那么书中的解释就相当不错了。即使你不使用openCV,我也不确定。。。我认为应该有一个(合理的-即可能有2个)独特的解决方案-除非所有的点都位于通过相机的平面上。。。这是一个例子,我可以避免选择我的点好!我曾尝试过你的想法,只是检查角度(使用点积),但这给我留下了三维四次方程!我想也许我遗漏了什么——但我不能指出是什么!我一定错过了什么。在第一步中,你怎么知道空间中的三个点在一个平行于投影平面的平面上?你不知道。因为作者没有提到需求,所以这是最简单的方法。我相信您可以尝试定义点的边界框,并尝试构造一个最佳包围边界框的平截头体。。。但是假设平面平行于投影平面要容易得多。你能扩展一下吗?如果你指的是随机样本共识算法,我想你可能是对的。但是这需要更多的解释。你应该有一张参考照片,你知道它在xyz中的位置,然后你应该通过ransac将新图像与参考图像进行比较。然后你可以找到两者之间的偏移量