我是新来的——所以如果我失礼了,请多多包涵!
我的问题是,是否有一种好的算法可以根据从该相机查看的图像上的 3 个(或更多)已知 3d 点最终在哪里确定相机的 3d 位置和方向?
问题来了,在我的计算中,有 6 个方程,有 6 个未知数,虽然我正在寻找一个一般的解决方案,而且这些方程是复杂的和三角函数的。
任何想法都感激不尽!
干杯,
麦克风
总的来说,我认为不会有一个独特的解决方案。
你可以把它分成两个问题,每个问题三个未知数:位置和方向。首先假设相机不会引入未知的失真(例如,通过将球体投影到平坦的胶片上)。暂时忽略方向,您正在测量的是对象之间的角度分离。从这里开始,我将假设只有三个点,并且您可以区分它们-它们是不同的颜色或其他东西。测量两个已知点之间的角度会将您置于空间中的二维表面上(我无法轻松绘制图形,但它们看起来有点像电场线)。添加另一个点会将您置于另一个相交的表面上;有很多退化,方程有一个干净的精确解并不明显。
值得注意的是,您查看的每一对都会施加体积约束,因此首先查看最钝的角度并为相机的位置设置一些界限可能会很有用。
如果您可以确定位置,那么定向很容易,并且只需要两个(非食相)点。
如果您考虑一下...这实际上是一个有点简单的想法...这是我的思路:
你应该使用 ransac 算法!您应该有一张参考照片,您知道它在 xyz 中的相机位置,然后您应该将新图像与 ransac 的参考图像进行比较。然后您可以找到两张照片之间的偏移量,然后将其添加到 xyz 参考
这是虚拟相机还是真实相机?您还需要查看 f/stop 和焦距,甚至可能是光学元件的形状。这实际上取决于您需要多准确的位置以及拍摄的物体彼此之间的距离。如果您使用焦距只有几英尺的 200 毫米变焦镜头,您的视野可能只有几英寸宽。然而,如果您使用 4.5 毫米全圆鱼眼并进行直接圆形投影,您可能有 180 度的视角。
超过三点,肯定是可以的。
这就是恒星追踪器控制航天器姿态的方式。
使用校准的相机 - 是的。
您所需要的只是焦距(将像素映射为角度)相机的中心轴(将光线放入场景中),然后在该光线上投影一个点很简单。
看看 OpenCV,它与立体相机校准一样