第二节图像的数据表示和相似性
人脸识别首先需要获取识别对象的人脸照片。这些照片在计算机中存储的常见格式是以“。jpg”结尾的jpg格式文件,下面以此文件格式为例进行讲解。一张彩色照片在计算机中通过RGB三原色显示色彩,其中,
R表示红色(Red);
G表示绿色(Green);
B表示蓝色(Blue)。
人眼能够分辨的颜色都可以通过这三类颜色生成,这是三原色的名称来源。也就是说,通过调整这三种原色的比例,计算机可以存储和显示世界上千变万化的颜色。
这三种颜色的变化范围一般取为[0,255]。0表示这种原色不存在,而255表示这种原色最强。之所以采用这个范围,是因为255恰好可以用一个字节来表示,也就是可以用8位的二进制数11111111来表示。按照第二章讲的方法可以很方便地使用Python观察这种对应关系。
In[5]:0b11111111
Out[5]:255
还有一些软件用“三原色强度255”这种“比例”来定义颜色。例如,(166,17B的强度,这表示了图像上一个点的颜色;如果换作用小数表示的方式,就变成了(0。6509803921568628,0。6666666666666666,0。058823529411764705)。这两种表示方法给出的点的颜色是一样的。
一张彩色图片使用上述表示方式就转换成了三个表格,这些表格叫作图片的通道,分别是R通道、G通道、B通道。如果有一个4×4(长×宽)大小的图片,就一共有16个像素(4×4),每个像素都有三个分量(R,G,B),它们对应的表格如表8-2所示。从表中可以看出,第(1,1)个像素RGB的强度分别是(187,187,187),第(3,3)个像素RGB的强度分别是(205,167,187)等。
表8-2三通道示例
没有彩色信息的黑白图像称为灰度图像。存储这种形式的图片无须RGB通道这样的三个表格,只需要一个表示黑白强度的表(矩阵)就可以把它表示出来。这时候0表示纯黑,而255表示纯白,中间的数值表示该点的灰度介于纯黑和纯白之间。
彩色图片也可以转换成灰度图片,这种转换可以通过一个通用的函数来进行。
Gray(x,y)=f(r(x,y),g(x,y),b(x,y))
这里Gray(x,y)表示坐标为(x,y)的点的灰度;r(x,y)表示坐标为(x,y)的点的R通道强度(比例);g(x,y)表示坐标为(x,y)的点的G通道强度(比例);b(x,y)表示坐标为(x,y)的点的B通道强度(比例)。
在Python中有现成的模块可以用来显示或转换图片。本教材使用PIL模块,如果没有安装,需要先在命令行模式下使用pipinstall进行安装。
pipinstallPIL
通过以下命令调用PIL的Image组件,其中用到的图片文件可以在教材资源平台下载。
In[6]:fromPILimpe
In[7]:im=Image。open('Bin。jpg')
#打开图片
In[8]:im。show()
#显示图像
In[9]:grayim=im。vert('L')
#将图像转化为灰度图
In[10]:grayim。show()
#显示灰度图