1.1 计算机视觉坐标系的约定和概念
矩阵使用行、列作为寻址坐标系,读取进入内存的二维图像其实只是一个矩阵,因此计算机视觉领域的图像坐标系使用的就是矩阵坐标系。
⋘ 1.1.1 图像的坐标系约定
解析几何用到的坐标系叫作笛卡儿坐标系。笛卡儿坐标系是由法国数学家勒内·笛卡儿创建的,通常简称直角坐标系。二维的直角坐标系由两个互相垂直的坐标轴设定,通常分别称为x轴和y轴;两个坐标轴的相交点称为原点,通常标记为O,有“零点”的意思。每个轴都指向一个特定的方向。这两个不同向的坐标轴决定了一个平面,这个平面称为xOy平面,又称笛卡儿平面。通常两个坐标轴只要互相垂直,其指向何方对于分析问题就是没有影响的,但习惯性地,x轴被水平摆放,称为横轴,通常指向右方;y轴被竖直摆放,称为纵轴,通常指向上方。两个坐标轴这样的位置关系构成的坐标系称为二维的右手坐标系,或右手系。如果将这个右手坐标系画在一张透明纸片上,那么在平面内无论怎样旋转它,所得到的坐标系都叫作右手坐标系;但如果将纸片翻转,其背面看到的坐标系则称为左手坐标系。笛卡儿坐标系的左手坐标系和右手坐标系如图1-1所示。
图像处理用到的坐标系叫作图像坐标系。假设读取的是一幅彩色图像,那么图像读取函数一般会将这幅图像读取为一个三维矩阵,这个三维矩阵的元素排布呈现出[行,列,深]的三维形态。矩阵的[行,列,深]构成的坐标系称为图像坐标系。在图像坐标系下,矩阵的行数对应图像的高度,矩阵的列数对应图像的宽度,矩阵的深度对应图像的通道数。这样,这个三维矩阵的形状和像素布局,就和图像的像素布局形成直观的一一对应关系。将图像矩阵与图像坐标系进行对比,我们可以发现,图像坐标系也是笛卡儿坐标系的一种,并且是右手坐标系,只是y轴的方向是朝下的,如图1-2所示。
图1-1 笛卡儿坐标系的左手坐标系和右手坐标系
图1-2 图像坐标系与图像矩阵的关系
这样做的好处是,矩阵数值的可视化结果与图像的像素排布在几何上完全一致,但也会带来一定的寻址困扰。由于Python的矩阵寻址一般遵循矩阵名[行,列,深]的寻址格式,所以如果希望得到图像坐标系下(x,y,z)坐标点的数值,那么需要将矩阵寻址方式修改为img[y,x,z]。例如,图像坐标系下坐标为(12,5,3)的“像素点”等价于对矩阵第5行第12列第3通道的元素进行寻址,这里需要格外注意。同时,图像坐标系的坐标值是从0(zero-based)开始的,即图像上第一行第一列的像素点对应矩阵中第0行第0列的元素值。
⋘ 1.1.2 矩形框的描述方法约定
在一幅图像中标注一个矩形框一般有两种描述方法:坐标法和中心法。坐标法可以分为绝对坐标法和归一化坐标法;中心法可以分为绝对中心法和归一化中心法。
对于一个宽度和高度都是28像素的图像,其中有一个矩形框,矩形框的左上角坐标可以用x=4和y=5表示,矩形框的右下角坐标可以用x=23和y=24表示。在不考虑边界宽度的情况下,可以计算得到矩形框的宽度和高度都是19像素,中心点用x=4+19/2=13.5和y=5+19/2=14.5表示,如图1-3所示。
图1-3 矩形框的角点、中心点和宽度、高度信息
坐标法是指使用矩形框的左上角坐标(xmin,ymin)和右下角坐标(xmax,ymax)来唯一地确定一个矩形框在图像中的位置。如果使用的是绝对坐标法,那么使用左上角坐标和右下角坐标的像素序号绝对值来表示一个矩形框;如果使用的是归一化坐标法,那么使用的是像素点的序号绝对值相对于图像宽度和高度的归一化坐标来表示一个矩形框,即将x坐标的绝对值除以图像的宽度w,将y坐标的绝对值除以图像的高度h。
中心法是指使用矩形框的中心点坐标(xcenter,ycenter)、矩形框的宽度(width)和高度(height)来唯一地确定一个矩形框在图像中的位置。如果使用的是绝对中心法,那么使用矩形框中心位置的像素点序号绝对值、宽度和高度方向上的像素序号差的绝对值(可以是非整数)来表示一个矩形框;如果使用的是归一化中心法,那么使用的是中心点相对于图像宽度和高度的归一化坐标来表示中心点,即将中心点的x坐标的绝对值xcenter和矩形框宽度的绝对值除以图像的宽度w,将y坐标的绝对值ycenter和矩形框高度的绝对值除以图像的高度h。
4种矩形框描述方法的数据结构和相互关系如图1-4所示。
对于同一个矩形框,可以通过绝对坐标法表示为[xmin,ymin,xmax,ymax],也可以通过绝对中心法表示为[xc,yc,w,h],它们之间通过转换矩阵M1进行转换,转换矩阵M1的定义如式(1-1)所示。其中,xc和yc分别是xcenter和ycenter的简写。
图1-4 4种矩形框描述方法的数据结构和相互关系
通过简单的初等数学知识可以知道,坐标法的表达方式可以通过中心法乘以一个转换矩阵得到,如式(1-2)和式(1-3)所示。
中心法的表达方式也可以通过坐标法乘以一个转换矩阵得到,此时的转换矩阵M2定义如式(1-4)所示。
同理,通过初等数学知识可以知道,转换方法如式(1-5)和式(1-6)所示。
需要特别注意的是,PASCAL VOC数据集对于矩形框的坐标描述方式为[xmin,ymin,xmax,ymax],它们分别对应矩形框左上角和右下角的坐标,但对于MS COCO数据集来说,矩形框的坐标描述方式为[xmin,ymin,width,height],它们分别对应矩形框的左上角坐标和宽高。限于篇幅原因,以上转换关系不展开讲述。感兴趣的读者可以自己制作矩形框在不同标注方法下的相互转换函数。