图像去重. 删除重复或相似的图像.
计算图片相似度的应用很广泛, 如google, baidu, 360等搜索引擎以图搜图的功能就是其典型应用.
1. 感知哈希算法(Perceptual hash algorithm).
phash算法可以使用Python调用Opencv库实现, 但是运行效率会比较慢. 可以这样处理: 在http://phash.org/官网上安装C版本的phash计算方法, 然后使用Python调用即可. phash只支持在Linux下运行.
Github上有一个imagehash库, 可以支持average hashing (aHash), perception hashing (pHash), difference hashing (dHash), wavelet hashing (wHash).
pip install ImageHash
2. 如果图像发生了旋转, 或者是基于内容的判断相似度, 那么再使用Hash算法判断图像的相似度就不合适了. 可以采用提取图像特征的方法, 如SIFT特征.
- 首先对图像提取SIFT/SURF特征, 然后使用最近邻的快速匹配算法. 即SIFT/SURF+FLANN.
- 使用SIFT或SURF特征时, 在detectAndCompute()阶段, 时间会较长, 因此也可以使用ORB特征. ORB+BF.
3. 使用训练好的ImageNet模型提取图像特征, 然后再计算图像的相似度.
结论:
1) 如果使用Hash算法, 那么基于内容的图像去重的准确率和召回率是很低的. 就算fingerprints长度再大, 也是如此. Hash算法可用于对于同一幅图像做了缩放, 水印, 调整色度的图像的相似度.
2) 采用提取S