图像检索,亦称以图搜图。输入一张图像,算法或程序高效、快速地返回图像库中与输入图像相似的图像。如果以一个向量来表示一张图像,在检索的过程中,需要依据这些向量做图像间(输入图像与图像库中的每张图像)的相似性检索/匹配。
对于人脸图像,其处理过程如下:第一步,检测每张图像中的人脸,即人脸检测;第二步,对每张图像中的人脸区域进行特征提取并用这些特征组成的向量表示该图像;第三步,对输入的查询图像(Query Image)做与第二步相同的处理;第四步,用第三步中得到的输入图像的人脸特征向量,与图像库中每一个人脸的特征向量进行相似性计算。最终,返回图像库中与输入图像相似的所有图像。
在第一步中,我们可以使用多种人脸检测算法,如 Viola&Jones人脸检测等算法,在本书第3章中已经讲述过这类算法。
在第二步和第三步中,可以使用SIFT、HOG(Histogram of Oriented Gradient)、Gabor、Deep Learning等多种不同的算法,也可以使用PCA降维、感知哈希(PHash)算法、DHash等算法。
在第四步中,主要使用两种算法,一种是向量之间直接比对的Naïve查询处理算法,另一种是基于KD-Tree结构的高效查询处理算法,尤其是FLANN(Fast Approximate Nearest Neighbor Search Library)中实现的KD-Tree算法/数据结构。
对于图像库中的每张图像,都需要经过第一步和第二步的处理。而对于用户查询的每张图像,都需要经过第三步和第四步的处理。也就是说,不管是图像库中的每张图像,还是输入的查询图像,都需要经过图像特征提取的步骤,这里需要使用上面提到的SIFT、HOG、Gabor、Deep Learning等算法。
特征提取和输入图像的查询处理算法,是相对独立的两个步骤。在本章中,PHash、DHash、PCA、SIFT、Gabor、HOG、Deep Learning都属于特征提取/降维的算法;而Naïve查询处理算法和KD-Tree查询处理算法是特征提取之后,进行查询处理的算法。
下面我们将分别介绍各种特征提取的算法及查询处理算法,每个算法都将分别介绍其使用、原理、算法实现、实验数据、实验结果及分析。