我正在使用Matlab 2014a的'extrinsics'功能。此功能返回相机相对于世界坐标系的平移和旋转。根据我的理解,这个函数返回的平移向量,比如C,是从摄像机坐标到世界坐标的平移。换句话说,该矢量可以被解释为摄像机中心在世界坐标中的位置。现在,我很困惑。
如果C是从相机到世界的平移,那么从世界到相机的平移应该是T = -transp(R)* C,其中R是由'extrinsics'函数返回的旋转矩阵。但在Matlab示例http://www.mathworks.com/com/help/vision/examples/sparse-3-d-reconstruction-from-multiple-views.html中,C而不是T用作从世界坐标到相机坐标的转换。为什么呢?
答案 0 :(得分:2)
我宁愿使用Hartley和Zisserman事实上的方式更准确地定义/理解这一点。这样的定义是Matlab库的基础(实际上,请参阅Matlab参考URL末尾的参考文献!)。
因此,定义图像点x和场景点X,使得:
x = P X
其中P是包含相机校准矩阵K(内在函数)和外部变换矩阵(外在函数)的投影矩阵[R | t],这样:
P = K [R | t]
free tutorial paper中的情况相同。请注意前几张幻灯片。
我希望有所帮助!
答案 1 :(得分:2)
@timlukins是对的。 extrinsics
函数返回的 R 和 t 表示从世界坐标到基于摄像机的坐标的转换。公式如下:
s*[x y 1] = [X Y Z 1]*[R; t]*K
其中[X Y Z]是世界坐标,[x y]是像素的图像坐标,K是内在矩阵,s是任意比例因子。请注意,此等式与Hartley和Zisserman中的等式不同,因为MATLAB使用预乘法约定。因此所有向量都是行向量,所有矩阵都被转置,并且乘法的顺序相反。
中给出答案 2 :(得分:0)
我们将C定义为世界坐标中的摄像机位置,T作为从世界坐标到摄像机坐标的平移向量。事实上,Matlab在相机坐标中绘制棋盘,这意味着需要重新计算相机坐标中的棋盘位置,结果恰好是T.所以Matlab直接用T绘制棋盘。