代码:experiments/多媒体实验/多媒体/3 at main · ShutongLinn/experiments (github.com)
一、实验题目
使用颜色直方图、sift算法或者bof算法来提取图像特征,在corel数据集(10*100张图片)上实现以图搜图,即输入数据集中某一张图,在剩下的999张图里搜索最邻近的10张图。
二、实验原理
SIFT算法提出的目标是建立一个描述图像特征的完整体系,这个问题自然可以分解为寻找图像的特征和描述图像的特征两个部分。
特征是区分不同内容的两幅图像和关联相同内容的两幅图像的量化指标。区分不同内容的图像时,人眼匹配一些图像的关键点。这一点成为SIFT特征的突破口,将图像特征的提取和描述的问题转化为寻找图像关键点和建立基于关键点的图像特征描述子的问题。
三、实验步骤
遍历1000张图片,逐个提取sift特征向量,存入fectures文件夹内。
对全体特征进行K-Means聚类,然后构造聚类中心矩阵centres。(尝试采用过高斯混合模型进行聚类,时间过久就放弃了)
聚类100、500、700类,发现,随着聚类次数增加,准确率也在增加
遍历所有图像,将各图像中的所有特征点映射到与其欧式距离最近的点上,然后根据该图像中各聚类中心出现的频率构造出图像的直方图向量histo_all。
主要计算余弦相似度,超过0.9则认为两者是一样的。
输入一张图片后,同样的步骤,计算特征值、直方图,然后输入图的直方图与1000张的直方图相比较,得到一个相似度矩阵。利用数据corel中的图片进行输入,求得前11张相似图,其中一张是自己。
四、实验结果
我利用循环,对每一张图片进行相似度比较,找到相似度最高的一组照片
其中余弦相似度大于0.9认为相似时:
余弦相似度大于0.95认为相似时: