Background:
在我们项目中,用到U-net,我们对训练样本图片使用labelme进行标定,对标定生成的json文件labelme_json_to_dataset生成标注图像,由于小伙伴将生成标注图像文件夹(如图1)里的
![d5b7a9585a24e3b509edeb0d1c8bc2a2.png](https://img-blog.csdnimg.cn/img_convert/d5b7a9585a24e3b509edeb0d1c8bc2a2.png)
![a7b7d2260a5fd6ed6ab3bdddcbf2cff3.png](https://img-blog.csdnimg.cn/img_convert/a7b7d2260a5fd6ed6ab3bdddcbf2cff3.png)
蓝框里的图片(看起来和原始图片一模一样,后来发现其每个pixel对应的RGB值相较于原始图片都发生了变化)替换了原始未标注前的图片(图2:红框里图片),导致我们没办法判别蓝框内图片的具体类,由于图片太多,人工去一一比对,耗时耗力(主要是因为懒QAQ),我们就准备用蓝框里的图片和每个类别里的原始图片进行一一比对(如果相似,则原始图片的类别也是蓝色框内图片的类别),但是由于蓝框内图片相较于原始图片像素值有了较大的改变(具体像素值变化很小,所以看起来和原始图片一模一样),没办法通过比较像素值来判断图片是否相似,故我们想尝试其他的方法去识别两张相识的图片,然后我看到了这个
Python+Opencv识别两张相似图片-CDA数据分析师官网cda.pinggu.org![d8434864d6a1aabc9996779ad545f4fd.png](https://img-blog.csdnimg.cn/img_convert/d8434864d6a1aabc9996779ad545f4fd.png)
里面介绍了四种方法识别两张相似图片。
在图像识别中,HOG特征,LBP特征,Haar特征[1],颜色特征,纹理特征,形状特征,空间关系特征等,都可以用来描述图片。
一些概念:
- 图像指纹:就是将图像按照一定的哈希算法,经过运算后得出的一组二进制数字。可以想象成人的指纹。
- 汉明距离[2]:就是一组二进制数据变成另一组二进制数据所需的步骤数。如:101到100的汉明距离就是1
- 平均哈希法(aHash)
此算法基于比较灰度图每个像素与平均值来实现。
具体步骤如下:
- 缩放图片,一般大小为8*8,64个像素值
- 转化为灰度图
- 计算平均值:计算灰度处理后图片所有像素点的平均值(可直接使用numpy中的mean()计算)
- 比较像素灰度值:遍历灰度图每个像素,如果高于平均值记为1,否则为0
- 得到信息指纹:组合64个bit位, 顺序随意保持一致性
2. 感知哈希算法(pHash)
平均哈希算法过于严格,不够精确,更适合搜索缩略图,为了获得更精确的结果可以选择感知哈希算法,它采用的是DCT(离散余弦变换)来降低频率的方法。