目前接到一个新的需求,也是一个老的需求,但目前使用传统算法在相似照片识别过程中出现了识别率较低效率不高等质量及性能问题,希望通过调研发现机器学习工程中的一些处理方式来将这一过程简化提高性能和准确率

相似照片

相似照片大致分为3大类:

  1. 连续拍摄的照片(连拍照片)
  2. 因手抖或因取景不满意等原因导致上下左右移到重写拍摄后的照片(平移照片)
  3. 因取景不满意或不同时刻对同一景点进行拍摄等原因导致的在不同角度或不同位置拍同一景点的照片(角度照片)

图像相似匹配算法

关键点匹配(Keypoint Matching)

一张图像的某些部位可能蕴含比其它部位更多的信息,比如边缘、焦点。因此我们可以利用一些算法提取图像的关键点信息进行比较。

SIFT,ORB,SURF,GIST都是此类提取关键点信息算法。这些算法的准确率较高,但同时不可避免的在运算复杂度上较为复杂。

图像特征检测描述 (一):SIFT、SURF、ORB、HOG、LBP 特征的原理概述及 OpenCV 代码实现
特征匹配, sift,surf,orb,brisk,brief
SIFT,SURF,ORB,FAST 特征提取算法比较
比较各种算法的论文
特征匹配之 Brute-Force 匹配和 FLANN 匹配器
python 实现 sift——flann
特征点匹配 + 特征检测方法汇总
图像拼接之特征点匹配–距离筛选,余弦角筛选,相似度和 ransac 筛选
python 官方教程

直方图统计(Histogram method)

关键点 + 决策树(Keypoints + Decision Trees)

哈希算法(Hash)

最简单的方法是直接使用哈希算法(md5、sha-1)算法对整个图片哈希。但缺点明显,只要图片内容有些 许改变,MD5值就不同。因此需要对图片的某种特征进行hash,感知哈希算法(Perceptual Hash Algorithm)就是专门针对此问题的算法。感知哈希算法是这一类算法的总称,包括 aHash、pHash、dHash。感知哈希不是以严格的方式计算Hash值,而是以更加相对的方式计算哈希值,因为”相似”与否,就是一种相对的判定。尽管pHash、dHash对aHash做出来改进,但其实这类算法的适用范围还是局限于不同缩放比例的图像的相似性比较,对于旋转、位移及变化较大,但其实还是同一个物体的相似性比较就比较差。

其在大规模搜索引擎中找到极其相似的图像比较容易,对于语义上的相似比较还是很困难的。

  • aHash:平均值哈希。速度比较快,但常常不太精确。
  • pHash:感知哈希。精确度比较高,但速度方面较差一些。
  • dHash:差异值哈希。精确度较高,且速度也非常快。

相似性︱python+opencv 实现 pHash 算法 + hamming 距离(simhash)(三)
基于感知哈希算法的视觉目标跟踪 - C++ 实现
Google 以图搜图 - 相似图片搜索原理 - Java 实现
相似图片搜索的原理
PHash 作者原文
PHash 开源库
python︱imagehash 中的四种图像哈希方式(phash/ahash/dhash / 小波 hash)
相似图片检测:感知哈希算法之 dHash 的 Python 实现
hash 算法 demo,可以快速测试你的 task 是否符合 hash 算法
工程实践思路:老司机带你检测相似图片
Hash 算法缺点所在

其他:

实例检索︱图像的实例搜索(文献、方法描述、商业案例)

图像检索:基于内容的图像检索技术

img