Python计算图片之间的相似度
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计算图片之间的相似度相关推荐
- java 图片相似度_GitHub - java51talk/image-similarity: 计算图片之间的相似度
ImageSimilarity 计算图片相似度的应用很广泛,如google.baidu.360等搜索引擎以图搜图的功能就是其典型应用.下面介绍介绍两种算法: 感知哈希算法(Perceptual has ...
- 一文看懂推荐系统:召回03:基于用户的协同过滤(UserCF),要计算用户之间的相似度
一文看懂推荐系统:召回03:基于用户的协同过滤(UserCF),要计算用户之间的相似度 提示:最近系统性地学习推荐系统的课程.我们以小红书的场景为例,讲工业界的推荐系统. 我只讲工业界实际有用的技术. ...
- 色差计算(颜色之间的相似度计算)
色彩有多种颜色空间表示方式,如RGB,HSV,HSL,LAB等等, RGB颜色空间: RGB颜色空间相对简单,也最为普遍,就分为三个颜色通道,分别为红色,绿色,蓝色这三种基本色调的值,然后将这三个颜色 ...
- python计算两地之间的开车时间,保存到Excel中
文章目录 一.去[百度地图开发平台](https://lbsyun.baidu.com/apiconsole/key/create#/home)申请API的AK 二.代码 三.效果 四.生成可执行的e ...
- Python计算两张图片的相似度
目录 一.场景需求解读 二.Mean Squared Error (MSE)简介 三.The Structural Similarity Index (SSIM)简介 四.算法代码实现 五.效果展示与 ...
- Python计算代码之间运行时间(运行间隔时间、时长)
Python3.8以下使用time.clock() 通过代码统计 导入time库:import time 代码开始前获取开始时间:time_start = time.clock() 代码结束后获取结束 ...
- python数组如果余弦_numpy :: 计算特征之间的余弦距离
余弦距离在计算相似度的应用中经常使用,比如: 文本相似度检索 人脸识别检索 相似图片检索 原理简述 下面是 但是,余弦相似度和常用的欧式距离的有所区别. 余弦相似度的取值范围在-1到1之间.完全相同时 ...
- python 余弦距离_numpy :: 计算特征之间的余弦距离
余弦距离在计算相似度的应用中经常使用,比如: 文本相似度检索 人脸识别检索 相似图片检索 原理简述 下面是 但是,余弦相似度和常用的欧式距离的有所区别. 余弦相似度的取值范围在-1到1之间.完全相同时 ...
- python 图片旋转角度_python 实现图片旋转 上下左右 180度旋转的示例
如下所示: #首先建好一个数据_ud文件夹 import PIL.Image as img import os path_old = "C:/Users/49691/Desktop/数据/& ...
最新文章
- 如果服务器开机显示NObootable,电脑不能开机提示No bootable device怎么办?
- Swoole Interview
- 【Linux】目录组织结构、文件类型和文件权限
- 机器学习(四)决策树
- ASP.NET设置数据格式与String.Format和DataFormatString使用总结
- mysql 重复数据 distinct_MySQL中distinct语句去查询重复记录及相关的性能讨论
- 尝鲜.net core2.1 ——编写一个global tool
- 分组框 GroupBox
- php 过滤非utf8,PHP如何将不是UTF8的字符过滤掉(代码)
- c# mysql datetime 判断为空 dbnull_转:SqlServer中的datetime类型的空值和c#中的DateTime的空值的研究...
- 【虹膜识别】基于matlab GUI形态学虹膜检测【含Matlab源码 959期】
- 乐高ev3编程 c语言,乐高ev3编程软件下载-乐高EV3机器人编程软件lego mindstorms ev31.0 官方版 - 极光下载站...
- [iOS]Mac系统下安装windows共享打印机采坑记
- 【数据结构】四、双向链表和双向循环链表
- iOS系统字体大全,iOS系统中所有的字体
- 湖北为何迷失在中国互联网版图 应“引凤归巢”
- 判断一个数n能否同时被3和5整除。
- 【计算机体系结构】记分牌调度算法 Python
- 2023年房地产地段研究报告
- 【数学建模】基于matlab GUI平行停车模拟仿真【含Matlab源码 1877期】
热门文章
- 5G NR标准 第13章 重传协议
- Win7服务器没及时响应,Win7无法停止服务提示“服务没有及时响应启动或控制请求”怎么办?...
- 手把手教你开发galgame 游戏(galgame 游戏引擎开发入门经典教程)
- 什么才是真正的双线机房?如何辨别真假双线机房?
- 绿坝娘的加速器/绿坝娘的收藏夹
- js基础1 输入输出方式 数据类型
- 炫舞幸运商城服务器维护,2019年2月21日全服维护完成公告
- 代码粘贴到word文档的美化网站
- java 304_HTTP 304错误的详细讲解
- 从原理到代码:大牛教你如何用 TensorFlow 亲手搭建一套图像识别模块