【python 图像相似度】OpenCV图像相似度ORB算法--相似图像去重

无意中发现了一个巨牛的人工智能教程,忍不住分享一下给大家。教程不仅是零基础,通俗易懂,而且非常风趣幽默,像看小说一样!觉得太牛了,所以分享给大家。点这里可以跳转到教程人工智能教程

计算图片相似度的应用很广泛,如google、baidu、360等搜索引擎以图搜图的功能就是其典型应用

相似图像去重一般分为如下两个步骤
1、图像特征表达的提取
2、图像之间相似度计算两个主要步骤。

对于图像特征表达的提取,常见的手工设计特征有颜色、纹理、HOG、SIFT 和 SURF 等;此外基于深度学习的深层特征表达也经常被使用。对于图像之间相似度计算,常见的无监督距离度量方法有欧式距离、曼哈顿距离和余弦距离等;常见的有监督距离度量方法有 LMNN、KISSME、LFDA 和 MFA 等。然而这些方法基于浮点特征计算相似度,计算速度普遍较慢,因
此通过哈希学习方法将图像特征转换为二元编码,再利用汉明距离进行相似度的快速计算更加符合工业界对图像数据处理速度的要求。对于相同/相似图像,大部分全局特征(比如颜色、纹理和 HOG)不能很好地解决图像裁剪残缺和旋转变化等问题;一些局部特征(比如 SIFT 和 SURF)与基于深度学习的特征虽然表达效果较好,但是由于特征提取复杂,计算速度过于缓慢。针对以上特征提取方法存在的缺陷,我们采用一种快速特征点提取和描述算法 ORB 作为图像的特征表达,并使用汉明距离完成相似度计算。

ORB 特征具有以下优点:
1、特征提取速度快;
2、在大多数情况下,去重效果能够与 SIFT/SURF 持平;
3、提取的特征直接是二元编码形式,无需使用哈希学习方法就可以直接利用汉明距离快速计算相似度。

# -*- encoding=utf-8 -*-

import cv2


# 自定义计算两个图片相似度函数
def img_similarity(img1_path,img2_path):
    """
    :param img1_path: 图片1路径
    :param img2_path: 图片2路径
    :return: 图片相似度
    """
    try:
        # 读取图片
        img1 = cv2.imread(img1_path, cv2.IMREAD_GRAYSCALE)
        img2 = cv2.imread(img2_path, cv2.IMREAD_GRAYSCALE)

        # 初始化ORB检测器
        orb = cv2.ORB_create()
        kp1, des1 = orb.detectAndCompute(img1, None)
        kp2, des2 = orb.detectAndCompute(img2, None)

        # 提取并计算特征点
        bf = cv2.BFMatcher(cv2.NORM_HAMMING)

        # knn筛选结果
        matches = bf.knnMatch(des1, trainDescriptors=des2, k=2)

        # 查看最大匹配点数目
        good = [m for (m, n) in matches if m.distance < 0.75 * n.distance]
        print(len(good))
        print(len(matches))
        similary = len(good) / len(matches)
        print("两张图片相似度为:%s" % similary)
        return similary

    except:
        print('无法计算两张图片相似度')
        return '0'


if __name__ == '__main__':

    img1_path=r'F:\img_spam\test\7ba.jpg'
    img2_path=r'F:\img_spam\test\ba.jpg'
    similary=img_similarity(img1_path,img2_path)




7ba.jpg
在这里插入图片描述

ba.jpg
在这里插入图片描述

E:\laidefa\python.exe F:/文本标签/图片反垃圾/ORB算法计算图片相似度.py
466
478
两张图片相似度为:0.9748953974895398

Process finished with exit code 0

参考文档:https://blog.csdn.net/EDS95/article/details/70146689

发布了650 篇原创文章 · 获赞 778 · 访问量 184万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览