



本章将开发图像中的人脸检测应用程序,所以这里讲的图像处理不是使用Adobe Photoshop之类的软件所做的事情。在人工智能的背景下,为了提取有关该图像的视觉内容信息而处理图像的操作称为图像处理(image processing)。
图像处理是一个新兴领域,这要归功于更好的人工智能相机、基于医学图像的机器学习、自动驾驶汽车、从图像中分析人们的情绪以及许多其他应用的数量激增。
考虑一下自动驾驶汽车对图像处理的需求。车辆需要尽可能接近实时地做出决策,以确保最佳的无事故驾驶。正在运行中的汽车的AI模型的响应延迟可能会导致灾难性后果。目前已经开发了多种技术和算法来进行快速准确的图像处理。
图像处理领域最著名的算法之一是卷积神经网络(CNN)。本书在第1章“移动设备深度学习简介”中已经简要介绍了CNN。本章不会开发一个完整的CNN,但是,稍后我们将使用设备内置的预训练模型构建一个人脸检测应用程序。
在深入研究图像处理技术之前,我们以图2-1为例,从计算机软件的角度对图像进行剖析。
图2-1
图2-1是一副10×10像素的图像(已放大);前两行像素是紫色的,接下来的6行像素是红色的,最后两行像素是黄色的。
但是,计算机看不到该图像中的颜色。计算机以像素密度矩阵的格式查看此图像。在这里我们处理的是RGB图像。RGB图像由3个颜色层组成,即红色(R)、绿色(G)和蓝色(B)。这些层中的每一个都由图像中的矩阵表示。每个矩阵的元素对应该矩阵在图像的每个像素中表示的颜色强度。
让我们在一个程序中检查图2-1中的图像。紫色的两行像素之一由以下数组表示。
[[255, 0, 255], [255, 0, 255], [255, 0, 255], [255, 0, 255], [255, 0, 255], [255, 0, 255], [255, 0, 255], [255, 0, 255], [255, 0, 255], [255, 0, 255]]
在上面的矩阵中,第一列的255代表红色,第二列代表绿色,第三列代表蓝色。图像左上角的第一个像素是红色、绿色和蓝色的组合。红色和蓝色都处于其最大强度,而绿色则完全缺失。因此,正如预期的那样,产生的组合颜色是紫色,它基本上是按等比例混合的红色和蓝色。如果从图像的红色区域观察任何像素,则可得到以下数组。
[ 255, 0, 0 ]
同理,从黄色区域来看,由于黄色是红色和绿色的等比例组合,因此像素表示如下。
[ 255, 255, 0 ]
现在,如果我们关闭图像的红色和绿色分量,只保持蓝色通道打开,则会得到如图2-2所示的图像。
图2-2
注意:
彩色图像在黑白印刷的纸版图书上不容易辨识效果(图2-2前2行是蓝色的,后8行是黑色的),本书还提供了一个PDF文件,其中包含本书使用的屏幕截图/图表的彩色图像。可以通过以下地址下载。
http://static.packt-cdn.com/downloads/9781789611212_ColorImages.pdf
这完全符合我们之前的观察结果,只有前两行像素包含蓝色分量,而图像的其余部分没有蓝色分量,因此用黑色表示,表示没有强度,或蓝色强度为0。
本节将讨论如何对图像执行一些常见操作以进行图像处理。一般来说,对图像进行一些简单的操作即可带来更快更好的预测。
假设我们希望将上述示例中的图像旋转90°。如果在旋转后再检查从顶部开始的第一行像素,则应该会看到该行的前两个像素为紫色,中间的6个像素为红色,最后两个像素为黄色。在矩阵旋转的类比中,这可以被视为转置(transpose)操作,其中的行转换为列,反之亦然。然后该图像看起来应如图2-3所示。
图2-3
现在,第一行像素由以下矩阵表示。
[[255, 0, 255], [255, 0, 255], [255, 0, 0], [255, 0, 0], [255, 0, 0], [255, 0, 0], [255, 0, 0], [255, 0, 0], [255, 255, 0], [255, 255, 0]]
在该矩阵中,前两个元素代表紫色,然后是6个红色,最后两个是黄色。
在对图像执行机器学习前,从图像中完全删除颜色信息通常很有用。原因是,有时颜色对预测的结果没有影响。例如,在检测图像中的数字的系统中,数字的形状很重要,而数字的颜色则对解决方案没有影响。
简单来说,灰度图像是对图像区域中可见光量的度量。通常而言,最明显的浅色元素会被完全去除,以显示与相对不可见区域的对比度。
RGB转灰度的公式如下。
其中, Y 是转换为灰度的像素将保持的最终值。 R 、 G 和 B 分别是该特定像素的红色值、绿色值和蓝色值。产生的输出如图2-4所示。
图2-4
接下来,我们将介绍如何开发一个人脸检测应用程序。