对比两张图片的相似度

👨‍💻个人简介: 深度学习图像领域工作者
🎉总结链接:
             链接中主要是个人工作的总结,每个链接都是一些常用demo,代码直接复制运行即可。包括:
                    📌1.工作中常用深度学习脚本
                    📌2.torch、numpy等常用函数详解
                    📌3.opencv 图片、视频等操作
                    📌4.个人工作中的项目总结(纯干活)
              链接: https://blog.csdn.net/qq_28949847/article/details/128552785
🎉视频讲解: 以上记录,通过B站等平台进行了视频讲解使用,可搜索 ‘Python图像识别’ 进行观看
              B站:Python图像识别
              抖音:Python图像识别
              西瓜视频:Python图像识别


1.cosin相似度(余弦相似度)

from PIL import Image
from numpy import average, linalg, dotdef get_thumbnail(image, size=(30, 30), greyscale=False):image = image.resize(size, Image.ANTIALIAS)if greyscale:image = image.convert('L')return imagedef image_similarity_vectors_via_numpy(image1, image2):image1 = get_thumbnail(image1)image2 = get_thumbnail(image2)images = [image1, image2]vectors = []norms = []for image in images:vector = []for pixel_tuple in image.getdata():vector.append(average(pixel_tuple))vectors.append(vector)norms.append(linalg.norm(vector, 2))a, b = vectorsa_norm, b_norm = normsres = dot(a / a_norm, b / b_norm)return resimport os
path = './duibi/凭证/'
path2 = './duibi/印泥/'
files2 = os.listdir(path2)
# print(files2)
lst_data = []
for root, dirs, files in os.walk(path):for file in files:image1 = Image.open(os.path.join(root, file))for f in files2:image2 = Image.open(os.path.join(path2, f))cosin = image_similarity_vectors_via_numpy(image1, image2)lst_data.append(cosin)# print(cosin)
print(lst_data)
print(min(lst_data))
print(max(lst_data))

图片1:请添加图片描述
shape:(26, 86)
图片2:请添加图片描述
shape:(25, 85)
两张图片大小差一个像素,对比结果为 0.9991

2. SSIM(结构相似性度量)

这是一种全参考的图像质量评价指标,分别从亮度、对比度、结构三个方面度量图像相似性。

SSIM取值范围[0, 1],值越大,表示图像失真越小。

在实际应用中,可以利用滑动窗将图像分块,令分块总数为N,考虑到窗口形状对分块的影响,采用高斯加权计算每一窗口的均值、方差以及协方差,然后计算对应块的结构相似度SSIM,最后将平均值作为两图像的结构相似性度量,即平均结构相似性SSIM。

from skimage.measure import compare_ssim
from scipy.misc import imread
import numpy as npimg1 = imread('1.jpg')
img2 = imread('2.jpg')img2 = np.resize(img2, (img1.shape[0], img1.shape[1], img1.shape[2]))print(img2.shape)
print(img1.shape)
ssim = compare_ssim(img1, img2, multichannel=True)print(ssim)

如果skimage版本比较高的话,用下面代码,

import cv2from skimage.metrics import structural_similarity
import time# 读取图像
img1 = cv2.imread(r'C:\Users\86182\Desktop\11\182.jpg')  
img2 = cv2.imread(r'C:\Users\86182\Desktop\11\1000.jpg')img1 = img1[265:299, 866:909]
img2 = img2[265:299, 866:909]
img1 = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY)
img2 = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY)ssim = structural_similarity(img1, img2)
print(ssim)

使用上面两张图片:结果为:0.146
看似结果比上面结果差很多

3. 基于直方图

直方图能够描述一幅图像中颜色的全局分布,是一种入门级的图像相似度计算方法。

from PIL import Imagedef make_regalur_image(img, size = (256, 256)):return img.resize(size).convert('RGB')def hist_similar(lh, rh):assert len(lh) == len(rh)return sum(1 - (0 if l == r else float(abs(l - r))/max(l, r)) for l, r in zip(lh, rh))/len(lh)def calc_similar(li, ri):return hist_similar(li.histogram(), ri.histogram())if __name__ == '__main__':img1 = Image.open('1.jpg')img1 = make_regalur_image(img1)img2 = Image.open('2.jpg')img2 = make_regalur_image(img2)print(calc_similar(img1, img2))

结果为:0.845
直方图过于简单,只能捕捉颜色信息的相似性,捕捉不到更多的信息。只要颜色分布相似,就会判定二者相似度较高,显然不合理。

4. 基于互信息(Mutual Information)

通过计算两个图片的互信息来表征他们之间的相似度。

from sklearn import metrics as mr
from scipy.misc import imread
import numpy as npimg1 = imread('1.jpg')
img2 = imread('2.jpg')img2 = np.resize(img2, (img1.shape[0], img1.shape[1], img1.shape[2]))img1 = np.reshape(img1, -1)
img2 = np.reshape(img2, -1)
print(img2.shape)
print(img1.shape)
mutual_infor = mr.mutual_info_score(img1, img2)print(mutual_infor)

结果:2.163
如果两张图片尺寸相同,还是能在一定程度上表征两张图片的相似性的。但是,大部分情况下图片的尺寸不相同,如果把两张图片尺寸调成相同的话,又会让原来很多的信息丢失,所以很难把握。经过实际验证,此种方法的确很难把握。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/48486.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[274]用python对比两张图片的不同

from PIL import Image from PIL import ImageChops def compare_images(path_one, path_two, diff_save_location):"""比较图片,如果有不同则生成展示不同的图片参数一: path_one: 第一张图片的路径参数二: path_two: 第二张图片的路径参数三: diff…

怎么判断两张图片是否完全相同,通过读取图片内容进行对比

ep1: ep2: 实现原理: 通过读取图片,把图片转为base64后进行对比即可达到目的。 以下是图片转base64的方法: public string GetBase64StringByImage(Image img){string base64buffer string.Empty;try{if (img ! nul…

Python如何比较两张图片的相似度

前言 本文是该专栏的第21篇,后面会持续分享python的各种干货知识,值得关注。 工作上,可能会需要你对两张图片进行相似度比较。比如现在的图片验证码,需要你对两张图片进行比较,找出图中存在相似特征的地方或动作;再或是在做电商项目的时候,需要你对商品主图进行相似度比…

chatgpt赋能python:Python图片找不同的SEO文章

Python 图片找不同的SEO文章 在网上,图片找不同游戏是一种非常受欢迎的娱乐方式。但是,这些游戏经常需要手动比对两张图片,这是一项费时费力的任务。那么,有没有一种自动化的方法来找到这些不同之处呢? 答案是肯定的…

如何判断两张图片是否类似

如何判断两张图是否相似? 查到了很多算法,流程都是“特征提取”,“特征对比”。以下列出了三个常见算法的浅显的介绍, 平均哈希算法 平均哈希算法是三种Hash算法中最简单的一种,它通过下面几个步骤来获得图片的Hash值…

【图像】搜索相同,或者相似照片

目录 1. 查找完全相同的一对张照片 2. 查找相似照片, 1. 查找完全相同的一对张照片 利用MD5,变换找到两张一模一样的图片。 import cv2 import numpy as np import osimport json import os from hashlib import md5def getmd5(image_path, md5_path):…

go 图片相似 查找两张图片不同的部分 找出两幅图片中的不同处

golang Image similarity comparison 目前网上找了很多的 图片相似 查找两张图片不同的部分,实现图像比较和标记以显示不同 ,很多都是python写的,没有找到go语言写的,所以想自己写一个 图片A 为参照物,去寻找图片B 的…

元宇宙是个什么样的概念?

什么是元宇宙? 百度百科上提到: 元宇宙(Metaverse),是人类运用数字技术构建的,由现实世界映射或超越现实世界,可与现实世界交互的虚拟世界,具备新型社会体系的数字生活空间。 元宇…

最全元宇宙概念分析!元宇宙为何发展于区块链?

元宇宙,Web3 时代最新热词,和 NFT、DAO 等新晋热门概念一起在 2021 年横空出世。这一概念最早诞生于 1992 年的科幻小说《雪崩》,小说中描绘了一个庞大的虚拟现实世界,人们用数字化身来控制,并相互竞争以提高自己的地位…

chatgpt赋能python:Python期末考:如何顺利通过?

Python期末考:如何顺利通过? Python是一门广受欢迎的编程语言,无论是初学者还是有经验的工程师,都会在其职业生涯中使用Python。在学术领域,Python也被广泛应用于数据分析、人工智能和机器学习等方面。但是&#xff0…

【电商系列】shopee的数据获取

在Amazon,Aliexpress之后,又一个海外电商出现在我的视野里——shopee,在东南亚很火的电商平台。 这战略布局都到南美跟欧洲了 这网站有意思的是啊,每个国家的商品虽然大同小异,但是也能凸显各个国家的风格的&#xff0…

分享4点选品思路,电商大牛都在用

Tiktok选品数据分析是很多跨境电商商家都需要解决的首要问题。如何选品才能提高TikTok变现率?商家选品时需要结合实际数据进行分析,不能一概而论。本文将和大家谈论三个问题。 选品思路 选品方法 选品数据哪里找? 一、选品思路 选品是tiktok小…

电商平台OnBuy选品技巧分享一二

OnBuy是这两年发展较快的蓝海电商平台,是跨境电商人可以选择的一个优质电商平台。今天我们小编就给大家分享一下OnBuy选品技巧以及方法,希望对大家有用。 OnBuy热销类目 1、 健康(防护用品) 2、 美妆护肤 3、 多媒体 4、 玩具 5、 宠物 6、 婴儿用品 …

利用Tushare获取A股所有股票代码

Tusahre注册链接 https://tushare.pro/register?reg365850 import os import tushare as ts import pandas import datetimetoken 自己的 #可以登录文章首的链接注册获取 pro ts.pro_api(token) dateToday datetime.datetime.today().strftime(%Y%m%d)def GetList():try:d…

chatgpt赋能python:Python语言中的语句输入方法

Python语言中的语句输入方法 作为一门广泛应用于科学计算和计算机编程领域的编程语言,Python以其易读易写、简洁明了的语法特点,广受程序员和科学家的喜爱。本文将重点介绍Python中的语句输入方法,包括基本输入方法、文件读取、网络输入和交…

10款爆火且实用的AIGC工具大盘点

大家好。我是不知名设计师 l1m0_,今天分享内容为:10款爆火且实用的AIGC工具。文中我会跟大家针对10款不同功能优势的AI工具向各位朋友进行介绍,对AI创作感兴趣的朋友一定不能错过,一起来看看吧。 人工智能(AI&#xff…

欧洲希望WhatsApp和苹果的iMessage能够开放并共同努力

欧洲将很快迫使苹果、Facebook的Meta和谷歌等消息"守门人",以确保在用户需要时,消息可以与小公司合作。 欧盟一夜之间通过其新的《数字市场法》(DMA)使自己成为世界上最严格的美国科技公司监管机构,欧洲政界…

android message to iphone,这款应用可以将苹果的iMessage带到安卓系统

多年来,我们看到一些开发人员尝试使用各种各样的变通方法给Android设备带来iMessage。今天,另一个尝试将iMessage带到Android的方法已经出现。 weMessage是一款新的Android应用程序,它声称通过使用Mac作为iPhone和Android手机之间的中介&…

苹果的Apple GPT要来了?

据外媒消息,苹果正在内部开发类 ChatGPT 的产品,与微软、OpenAI、谷歌、Meta 等科技巨头在生成式 AI 赛道展开竞争。该消息使得苹果股价上涨了 2%。据苹果工程师透露,苹果在内部构建了代号为“Ajax”的大语言模型开发框架,并构建了…

InstructGPT方法简读

InstructGPT方法简读 引言 仅仅通过增大模型规模和数据规模来训练更大的模型并不能使得大模型更好地理解用户意图。由于数据的噪声极大,并且现在的大多数大型语言模型均为基于深度学习的“黑箱模型”,几乎不具有可解释性和可控性,因此&…