图像处理、立体视觉等方向常常涉及到四个坐标系:世界坐标系、相机坐标系、图像坐标系、像素坐标系。例如下图:

根据像素坐标求解三维世界坐标转换的Python代码 坐标和像素的转换_计算机视觉


构建世界坐标系只是为了更好的描述相机的位置在哪里,在双目视觉中一般将世界坐标系原点定在左相机或者右相机或者二者X轴方向的中点。

1.1 世界坐标系与相机坐标系

根据像素坐标求解三维世界坐标转换的Python代码 坐标和像素的转换_计算机视觉_02


于是,从世界坐标系到相机坐标系,涉及到旋转和平移(其实所有的运动也可以用旋转矩阵和平移向量来描述)。绕着不同的坐标轴旋转不同的角度,得到相应的旋转矩阵,如下图所示:

根据像素坐标求解三维世界坐标转换的Python代码 坐标和像素的转换_像素点_03


那么从世界坐标系到相机坐标系的转换关系如下所示:

根据像素坐标求解三维世界坐标转换的Python代码 坐标和像素的转换_旋转矩阵_04

1.2 相机坐标系与图像坐标系

根据像素坐标求解三维世界坐标转换的Python代码 坐标和像素的转换_旋转矩阵_05


此时投影点p的单位还是mm,并不是pixel,需要进一步转换到像素坐标系。

1.3 图像坐标系与像素坐标系

像素坐标系和图像坐标系都在成像平面上,只是各自的原点和度量单位不一样。图像坐标系的原点为相机光轴与成像平面的交点,通常情况下是成像平面的中点或者叫principal point。图像坐标系的单位是mm,属于物理单位,而像素坐标系的单位是pixel,我们平常描述一个像素点都是几行几列。所以这二者之间的转换如下:其中dx和dy表示每一列和每一行分别代表多少mm,即1pixel=dx mm。

根据像素坐标求解三维世界坐标转换的Python代码 坐标和像素的转换_图像处理_06


那么通过上面四个坐标系的转换就可以得到一个点从世界坐标系如何转换到像素坐标系的。

根据像素坐标求解三维世界坐标转换的Python代码 坐标和像素的转换_图像处理_07


其中相机的内参和外参可以通过张正友标定获取(戳这里查看张正友标定的资料)。通过最终的转换关系来看,一个三维中的坐标点,的确可以在图像中找到一个对应的像素点,但是反过来,通过图像中的一个点找到它在三维中对应的点就很成了一个问题,因为我们并不知道等式左边的Zc的值。

关于三维重建不是我的方向,但是深度值的获取是我项目中的一个需要解决的问题,这将涉及到后面的立体视觉知识。