计算机视觉中的坐标系之间的转换原理,以及OpenCV坐标原点的确定

作为一个正在做计算机视觉项目的体育学在读硕士,面对完全不熟悉的领域,跟看天书没什么两样。这个时候关于计算机和工科的一些概念能帮助我很好地了解进入这个领域。所以我写的博客都是以理解概念为主,希望对大家有所帮助。

在计算机视觉中,坐标系的转换尤为重要,但也是非常难弄懂的一个概念,什么物体(模型)坐标系、世界坐标系、照相机坐标系、标准化设备坐标系等等,非常复杂。
其中模型坐标系是每个模型在制作时特有的,如果把模型放入世界,就需要将所有模型坐标系转化成世界坐标系。
世界中的场景需要通过相机被人眼观察,需要将世界坐标系转化成为相机坐标系。从模型坐标系到世界坐标系,再到相机坐标系的转换,通常称为model-view transformation,通过model-view matrix来实现。这些坐标系都需要用户指定。
世界坐标系是world坐标系,可以任意指定,其坐标系都有明确的定义

好,下面为了能理解这些概念,我们需要从最基本的单目摄像机标定参数讲起。
1.*模型:
*的原理。投影平面到小孔的距离为焦距f,物体到小孔的距离为z。如图所示:
计算机视觉中的坐标系之间的转换原理,以及OpenCV坐标原点的确定
如果按照实际的投影关系建立坐标系,那么投影坐标和物体坐标的符号总是相反的,考虑起来不太方便,于是数学上把投影平面平移到其关于小孔对称的位置,这样投影坐标和物体坐标符号就相同了,示意图如下:
计算机视觉中的坐标系之间的转换原理,以及OpenCV坐标原点的确定

根据三角形相似的原理,可以列出如下等式:
计算机视觉中的坐标系之间的转换原理,以及OpenCV坐标原点的确定
2. 摄像机中的坐标系:
摄像机中的坐标系有4个,均为右手坐标,分别为世界、照相机、图片坐标系、像素坐标系。
下图列出了照相机(camera)、图片(picture)和像素(pixel)坐标系。

计算机视觉中的坐标系之间的转换原理,以及OpenCV坐标原点的确定
世界坐标系是world坐标系,可以任意指定,其坐标系都有明确的定义
camera坐标系是摄像机坐标系,原点在小孔的位置,z轴与光轴重合,Xc轴和Yc轴分别和投影面平行。
picture坐标系为图像坐标系,光轴和投影面的交点为原点,Xp轴和Yp轴分别和投影面两边平行。
pixel坐标系为像素坐标系,从小孔向投影面方向看,投影左上角为原点Opix,Xpix轴和Ypix轴和投影面两边重合。

3.坐标转换原理:
本文针对的三维坐标,所以讨论的空间是R3空间。在标准三维坐标系中,我们通常用一个向量v=[x, y, z]来表示一个点的位置。这里的x,y,z分别对应x轴、y轴以及z轴三个方向的偏移,而标准三维坐标空间的基采用的是三个互相垂直的向量e1=[1, 0, 0], e2=[0, 1, 0], e3=[0, 0, 1]。但根据线性无关等知识,我们完全可以找出另外三个向量作为三维空间的基,只要这三个向量线性无关,同样能够张成R3空间。
现在假设坐标系A采用的基向量是{v1,v2, v3},坐标B采用的是{u1,u2,u3}。那么根据线性无关性,我们可以得到
u1 = γ11v1+γ12v2+γ13v3
u2 = γ21v1+γ22v2+γ23v3
u3 = γ31v1+γ32v2+γ33v3
用矩阵方程的形式表示为:
u = Mv
所以,坐标系之间的转换都是通过矩阵变换。
介绍完坐标系转换原理后,来具体了解一下关于各个坐标系的坐标转换过程。,具体过程见https://blog.csdn.net/xuelabizp/article/details/50314633
这篇博客写的非常详细。

关于OpenCV图像原点:
很多人,包括我,在一开始接触计算机视觉的时候,对OpenCV中窗口显示的图像坐标原点在哪不太清楚。
我参考了很多文章,得知OpenCV中的图像结构有个很重要的成员origin,它指明了图像的原点位置,可以有两种取值:IPL_ORIGIN_TL和IPL_ORIGIN_BL,其中TL意思是:TopLeft,即左上;BL意思是:BottomLeft,即左下。其实这两个都是整形常量,IPL_ORIGIN_TL就是0,IPL_ORIGIN_BL就是1。

参考博客:https://blog.csdn.net/xuelabizp/article/details/50314633
https://blog.csdn.net/masibuaa/article/details/7821950
https://blog.csdn.net/masibuaa/article/details/7821950