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

把图片表示成一个向量,通过计算向量之间的余弦距离来表征两张图片的相似度

# -*- coding: utf-8 -*-
# !/usr/bin/env python
# @Time    : 2018/11/17 14:52
# @Author  : xhh
# @Desc    : 余弦相似度计算
# @File    : difference_image_consin.py
# @Software: PyCharm
from PIL import Image
from numpy import average, dot, linalg# 对图片进行统一化处理
def get_thum(image, size=(64,64), greyscale=False):# 利用image对图像大小重新设置, Image.ANTIALIAS为高质量的image = image.resize(size, Image.ANTIALIAS)if greyscale:# 将图片转换为L模式,其为灰度图,其每个像素用8个bit表示image = image.convert('L')return image# 计算图片的余弦距离
def image_similarity_vectors_via_numpy(image1, image2):image1 = get_thum(image1)image2 = get_thum(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)# linalg=linear(线性)+algebra(代数),norm则表示范数# 求图片的范数??norms.append(linalg.norm(vector, 2))a, b = vectorsa_norm, b_norm = norms# dot返回的是点积,对二维数组(矩阵)进行计算res = dot(a / a_norm, b / b_norm)return resimage1 = Image.open('../dataset/100002.png')
image2 = Image.open('../dataset/100001.png')
cosin = image_similarity_vectors_via_numpy(image1, image2)
print('图片余弦相似度',cosin)

运行结果:

该方法运算量较大,速度明显比ssim方法慢,但如果不计较快慢的话感受结果比ssim靠谱

2.利用SSIM(结构相似度度量)计算图片的相似度

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

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

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

# -*- coding: utf-8 -*-
# !/usr/bin/env python
# @Time    : 2018/11/17 14:26
# @Author  : xhh
# @Desc    : 结构相似度量,计算图片之间的相似度
# @File    : difference_image_ssim.py
# @Software: PyCharm
from skimage.measure import compare_ssim
from scipy.misc import imread
import numpy as np# 读取图片
img1 = imread('../dataset/100002.png')
img2 = imread('../dataset/100001.png')
img2 = np.resize(img2, (img1.shape[0], img1.shape[1], img1.shape[2]))
print(img1.shape)
print(img2.shape)
ssim =  compare_ssim(img1, img2, multichannel = True)
print(ssim)

本来是打算使用opencv的imread来读取图片的,但是没想到报错了,但是随后改为

scipy.misc import imread成功了,最后又改成了opencv又好了,有点懵逼了

结果:

该方法通常用来衡量一张图片压缩后的失真度,很少用来计算两图的相似度。

3.通过直方图计算

# -*- coding: utf-8 -*-
# !/usr/bin/env python
# @Time    : 2018/11/17 16:04
# @Author  : xhh
# @Desc    : 通过直方图计算图片的相似度
# @File    : difference_image_hist.py
# @Software: PyCharm
from PIL import Image# 将图片转化为RGB
def make_regalur_image(img, size=(64, 64)):gray_image = img.resize(size).convert('RGB')return gray_image# 计算直方图
def hist_similar(lh, rh):assert len(lh) == len(rh)hist = sum(1 - (0 if l == r else float(abs(l-r))/max(l,r))for l, r in zip(lh, rh))/len(lh)return hist# 计算相似度
def calc_similar(li, ri):calc_sim = hist_similar(li.histogram(), ri.histogram())return calc_simif __name__ == '__main__':image1 = Image.open('../dataset/100002.png')image1 = make_regalur_image(image1)image2 = Image.open('../dataset/100001.png')image2 = make_regalur_image(image2)print("图片间的相似度为",calc_similar(image1, image2))

运行结果:

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

所以本菜鸟利用之前做验证码时的用灰度图和彩色图进行了对比:

运行的结果为:

结果为0.54,有点差强人意了。。

4.还有通过感知哈希算法(或者也称为图片指纹的形式的,嗯,我是这样子理解的)

具体的代码看之前的文章:https://blog.csdn.net/weixin_39121325/article/details/84174876

。。。。占时就这些了,还有的遇到了在更新吧

大家可以关注我和我小伙伴的公众号~~~这里有我和我的小伙伴不定时的更新一些python技术资料哦!!大家也可以留言,讨论一下技术问题,希望大家多多支持,关注一下啦,谢谢大家啦~~

Python计算图片之间的相似度相关推荐

  1. java 图片相似度_GitHub - java51talk/image-similarity: 计算图片之间的相似度

    ImageSimilarity 计算图片相似度的应用很广泛,如google.baidu.360等搜索引擎以图搜图的功能就是其典型应用.下面介绍介绍两种算法: 感知哈希算法(Perceptual has ...

  2. 一文看懂推荐系统:召回03:基于用户的协同过滤(UserCF),要计算用户之间的相似度

    一文看懂推荐系统:召回03:基于用户的协同过滤(UserCF),要计算用户之间的相似度 提示:最近系统性地学习推荐系统的课程.我们以小红书的场景为例,讲工业界的推荐系统. 我只讲工业界实际有用的技术. ...

  3. 色差计算(颜色之间的相似度计算)

    色彩有多种颜色空间表示方式,如RGB,HSV,HSL,LAB等等, RGB颜色空间: RGB颜色空间相对简单,也最为普遍,就分为三个颜色通道,分别为红色,绿色,蓝色这三种基本色调的值,然后将这三个颜色 ...

  4. python计算两地之间的开车时间,保存到Excel中

    文章目录 一.去[百度地图开发平台](https://lbsyun.baidu.com/apiconsole/key/create#/home)申请API的AK 二.代码 三.效果 四.生成可执行的e ...

  5. Python计算两张图片的相似度

    目录 一.场景需求解读 二.Mean Squared Error (MSE)简介 三.The Structural Similarity Index (SSIM)简介 四.算法代码实现 五.效果展示与 ...

  6. Python计算代码之间运行时间(运行间隔时间、时长)

    Python3.8以下使用time.clock() 通过代码统计 导入time库:import time 代码开始前获取开始时间:time_start = time.clock() 代码结束后获取结束 ...

  7. python数组如果余弦_numpy :: 计算特征之间的余弦距离

    余弦距离在计算相似度的应用中经常使用,比如: 文本相似度检索 人脸识别检索 相似图片检索 原理简述 下面是 但是,余弦相似度和常用的欧式距离的有所区别. 余弦相似度的取值范围在-1到1之间.完全相同时 ...

  8. python 余弦距离_numpy :: 计算特征之间的余弦距离

    余弦距离在计算相似度的应用中经常使用,比如: 文本相似度检索 人脸识别检索 相似图片检索 原理简述 下面是 但是,余弦相似度和常用的欧式距离的有所区别. 余弦相似度的取值范围在-1到1之间.完全相同时 ...

  9. python 图片旋转角度_python 实现图片旋转 上下左右 180度旋转的示例

    如下所示: #首先建好一个数据_ud文件夹 import PIL.Image as img import os path_old = "C:/Users/49691/Desktop/数据/& ...

最新文章

  1. 如果服务器开机显示NObootable,电脑不能开机提示No bootable device怎么办?
  2. Swoole Interview
  3. 【Linux】目录组织结构、文件类型和文件权限
  4. 机器学习(四)决策树
  5. ASP.NET设置数据格式与String.Format和DataFormatString使用总结
  6. mysql 重复数据 distinct_MySQL中distinct语句去查询重复记录及相关的性能讨论
  7. 尝鲜.net core2.1 ——编写一个global tool
  8. 分组框 GroupBox
  9. php 过滤非utf8,PHP如何将不是UTF8的字符过滤掉(代码)
  10. c# mysql datetime 判断为空 dbnull_转:SqlServer中的datetime类型的空值和c#中的DateTime的空值的研究...
  11. 【虹膜识别】基于matlab GUI形态学虹膜检测【含Matlab源码 959期】
  12. 乐高ev3编程 c语言,乐高ev3编程软件下载-乐高EV3机器人编程软件lego mindstorms ev31.0 官方版 - 极光下载站...
  13. [iOS]Mac系统下安装windows共享打印机采坑记
  14. 【数据结构】四、双向链表和双向循环链表
  15. iOS系统字体大全,iOS系统中所有的字体
  16. 湖北为何迷失在中国互联网版图 应“引凤归巢”
  17. 判断一个数n能否同时被3和5整除。
  18. 【计算机体系结构】记分牌调度算法 Python
  19. 2023年房地产地段研究报告
  20. 【数学建模】基于matlab GUI平行停车模拟仿真【含Matlab源码 1877期】

热门文章

  1. 5G NR标准 第13章 重传协议
  2. Win7服务器没及时响应,Win7无法停止服务提示“服务没有及时响应启动或控制请求”怎么办?...
  3. 手把手教你开发galgame 游戏(galgame 游戏引擎开发入门经典教程)
  4. 什么才是真正的双线机房?如何辨别真假双线机房?
  5. 绿坝娘的加速器/绿坝娘的收藏夹
  6. js基础1 输入输出方式 数据类型
  7. 炫舞幸运商城服务器维护,2019年2月21日全服维护完成公告
  8. 代码粘贴到word文档的美化网站
  9. java 304_HTTP 304错误的详细讲解
  10. 从原理到代码:大牛教你如何用 TensorFlow 亲手搭建一套图像识别模块