图像去重

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_20965753/article/details/89224768

图像去重. 删除重复或相似的图像.

计算图片相似度的应用很广泛, 如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特征.

  1. 首先对图像提取SIFT/SURF特征, 然后使用最近邻的快速匹配算法. 即SIFT/SURF+FLANN.
  2. 使用SIFT或SURF特征时, 在detectAndCompute()阶段, 时间会较长, 因此也可以使用ORB特征. ORB+BF.

3. 使用训练好的ImageNet模型提取图像特征, 然后再计算图像的相似度.

结论:

1) 如果使用Hash算法, 那么基于内容的图像去重的准确率和召回率是很低的. 就算fingerprints长度再大, 也是如此. Hash算法可用于对于同一幅图像做了缩放, 水印, 调整色度的图像的相似度.
2) 采用提取SIFT/SURF/ORB特征, 然后在做特征点匹配的方法, 对于同一幅图像做了缩放, 水印, 旋转, 裁剪等常规操作后, 是可以判断相似度的.

4. 目前基于内容的图像去重任务已经明确.

即在网上抓取的衣服的图像可能是是有重复的, 这里的重复是指: 图像可能经历了旋转, 裁剪, 水印, 字幕等等比较初级的变换. 在这样的重复基础上进行图像去重, 那么上述两种方法是可以使用这种类型的去重任务的.

1) 数据集可以借助于DeepFashion数据集制作一些, 常见变换的衣物图像.

这些变换可参考https://www.infoq.cn/article/image-similarity-algorithm-on-mobile-client. 具体代码可见.

2) 计算相似度时间比较.

使用SURF特征匹配时间统计:

对于301 x 128(H x W)的图像, 耗时为0.039s, 39ms, 毫秒级.

使用ORB特征匹配时间统计:

对于301 x 128(H x W)的图像, 耗时为0.015, 15ms, 毫秒级.

使用SIFT特征匹配时间统计:

对于301 x 128(H x W)的图像, 耗时为0.31, 310ms, 毫秒级.
SURF特征匹配方法比ORB特征匹配方法效果要好很多, 比SIFT特征匹配方法省时很多!

使用phash时间统计:

对于301 x 128(H x W)的图像, 耗时为0.034s, 34ms, 毫秒级.

综上, 在进行基于内容的图像去重时, 采用基于SURF特征匹配的方法!

猜你喜欢

转载自blog.csdn.net/qq_20965753/article/details/89224768