2

我是新来的——所以如果我失礼了,请多多包涵!

我的问题是,是否有一种好的算法可以根据从该相机查看的图像上的 3 个(或更多)已知 3d 点最终在哪里确定相机的 3d 位置和方向?

问题来了,在我的计算中,有 6 个方程,有 6 个未知数,虽然我正在寻找一个一般的解决方案,而且这些方程是复杂的和三角函数的。

任何想法都感激不尽!

干杯,

麦克风

4

6 回答 6

2

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

你可以把它分成两个问题,每个问题三个未知数:位置和方向。首先假设相机不会引入未知的失真(例如,通过将球体投影到平坦的胶片上)。暂时忽略方向,您正在测量的是对象之间的角度分离。从这里开始,我将假设只有三个点,并且您可以区分它们-它们是不同的颜色或其他东西。测量两个已知点之间的角度会将您置于空间中的二维表面上(我无法轻松绘制图形,但它们看起来有点像电场线)。添加另一个点会将您置于另一个相交的表面上;有很多退化,方程有一个干净的精确解并不明显。

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

如果您可以确定位置,那么定向很容易,并且只需要两个(非食相)点。

于 2010-03-02T15:27:07.743 回答
1

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

  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. 通过从该点添加(或减去)法线,将该中心点从边界矩形移开。继续移动,直到到达所需的视野。
于 2010-03-03T19:42:48.080 回答
1

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

于 2017-06-27T08:11:08.727 回答
0

这是虚拟相机还是真实相机?您还需要查看 f/stop 和焦距,甚至可能是光学元件的形状。这实际上取决于您需要多准确的位置以及拍摄的物体彼此之间的距离。如果您使用焦距只有几英尺的 200 毫米变焦镜头,您的视野可能只有几英寸宽。然而,如果您使用 4.5 毫米全圆鱼眼并进行直接圆形投影,您可能有 180 度的视角。

于 2010-03-02T15:41:49.927 回答
0

超过三点,肯定是可以的。

这就是恒星追踪器控制航天器姿态的方式。

于 2010-05-04T08:17:37.267 回答
-2

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

看看 OpenCV,它与立体相机校准一样

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

于 2010-03-02T15:40:20.647 回答