复现手机文件管理系统中删除重复图像功能点

简介: 复现手机文件管理系统中删除重复图像功能点

思路构建


  分析上述功能需求可以用以下两种思路进行构建删除重复图像功能:


  1. 使用聚类,对所有图像进行聚类,根据聚类结果进行剔重(类别数不易算,整体耗时长);


  1. 使用基准图像进行对全部图像进行查找相似性。

  在这里简单实现一下根据原图像进行查找相似的图像(这个里面的相似还有一层含义就是相同,道理同   相似三角形也是全等三角形)



示意图:

image.png

项目搭建


  在这里我例举4类常见的比较相似图像的方法:


  • 计算图像的欧几里得距离进行判断;


  • 使用结构相似性度量(SSIM)进行判断;


  • 计算两张图像的哈希值进行计算判断


  • 图像的余弦相似性


欧几里得距离


import numpy as np
from scipy.spatial import distance
from PIL import Image
image1 = Image.open("1.jpg")
image2 = Image.open("2.jpg")
value_image1 = np.array(image1).flatten()
value_image2 = np.array(image2).flatten()
value_euclidean = distance.euclidean(value_image1, value_image2)
image1_value = np.array(image1)
image2_value = np.array(image2)
value_linalg = np.linalg.norm(image1_value - image2_value)
复制代码


SSIM


  在2004年的一篇论文中指出使用SSIM计算给定的两图像之间的相似性是界定在 0-1之间的值


from SSIM_PIL import compare_ssim
from PIL import Image
image1 = Image.open("1.jpg")
image2 = Image.open("2.jpg")
value = compare_ssim(image1, image2, GPU=False) 
复制代码


计算哈希值


  哈希是大家的老朋友了,网上关于哈希值的计算也很多,在github上关于图像哈希值的计算例子和讲解也很多,大家可以参考网上其他大神关于图像哈希值的计算讲解,在这里我就只举例子平均哈希的计算。 比较两幅图像的步骤如下:


  1. 构造每个图像的哈希


  1. 计算汉明距离。零距离表示相同的图像。


import imagehash
from PIL import Image
image1 = Image.open("1.jpg")
image2 = Image.open("2.jpg")
hash1 = imagehash.average_hash(image1)
hash2 = imagehash.average_hash(image2)
value = hash1-hash2
复制代码


计算图像的余弦相似性


from torch import nn
from PIL import Image
from torchvision import transforms
image1 = Image.open("1.jpg")
image2 = Image.open("2.jpg")
image1_tensor = transforms.ToTensor()(image1).reshape(1, -1).squeeze() 
image2_tensor = transforms.ToTensor()(image2).reshape(1, -1).squeeze()
cos = nn.CosineSimilarity(dim=0) 
value = float(cos(image1_tensor, image2_tensor))



相关文章
|
2月前
|
移动开发 Android开发 数据安全/隐私保护
移动应用与系统的技术演进:从开发到操作系统的全景解析随着智能手机和平板电脑的普及,移动应用(App)已成为人们日常生活中不可或缺的一部分。无论是社交、娱乐、购物还是办公,移动应用都扮演着重要的角色。而支撑这些应用运行的,正是功能强大且复杂的移动操作系统。本文将深入探讨移动应用的开发过程及其背后的操作系统机制,揭示这一领域的技术演进。
本文旨在提供关于移动应用与系统技术的全面概述,涵盖移动应用的开发生命周期、主要移动操作系统的特点以及它们之间的竞争关系。我们将探讨如何高效地开发移动应用,并分析iOS和Android两大主流操作系统的技术优势与局限。同时,本文还将讨论跨平台解决方案的兴起及其对移动开发领域的影响。通过这篇技术性文章,读者将获得对移动应用开发及操作系统深层理解的钥匙。
|
3月前
|
存储 NoSQL Java
使用redis进行手机验证码的验证、每天只能发送三次验证码 (redis安装在虚拟机linux系统中)
该博客文章展示了如何在Linux虚拟机上使用Redis和Jedis客户端实现手机验证码的验证功能,包括验证码的生成、存储、验证以及限制每天发送次数的逻辑,并提供了测试结果截图。
使用redis进行手机验证码的验证、每天只能发送三次验证码 (redis安装在虚拟机linux系统中)
|
3月前
|
存储 数据可视化 C语言
【C语言】C语言 手机通讯录系统的设计 (源码+数据+论文)【独一无二】
【C语言】C语言 手机通讯录系统的设计 (源码+数据+论文)【独一无二】
|
4月前
|
JavaScript Java 测试技术
基于SpringBoot+Vue+uniapp的多功能智能手机阅读APP的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue+uniapp的多功能智能手机阅读APP的详细设计和实现(源码+lw+部署文档+讲解等)
|
4月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的多功能智能手机阅读APP附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的多功能智能手机阅读APP附带文章源码部署视频讲解等
79 1
|
4月前
|
关系型数据库 MySQL 测试技术
基于SpringBoot+Vue华强北商城二手手机管理系统(源码+部署说明+演示视频+源码介绍+lw)(4)
基于SpringBoot+Vue华强北商城二手手机管理系统(源码+部署说明+演示视频+源码介绍+lw)
50 2
|
4月前
|
数据库
基于SpringBoot+Vue华强北商城二手手机管理系统(源码+部署说明+演示视频+源码介绍+lw)(3)
基于SpringBoot+Vue华强北商城二手手机管理系统(源码+部署说明+演示视频+源码介绍+lw)
71 2
|
4月前
|
存储 安全 Java
基于SpringBoot+Vue华强北商城二手手机管理系统(源码+部署说明+演示视频+源码介绍+lw)(2)
基于SpringBoot+Vue华强北商城二手手机管理系统(源码+部署说明+演示视频+源码介绍+lw)
86 1
|
4月前
|
JavaScript Java 关系型数据库
基于SpringBoot+Vue华强北商城二手手机管理系统(源码+部署说明+演示视频+源码介绍+lw)(1)
基于SpringBoot+Vue华强北商城二手手机管理系统(源码+部署说明+演示视频+源码介绍+lw)
95 1
|
4月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的网上手机销售系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的网上手机销售系统附带文章源码部署视频讲解等
48 0
下一篇
无影云桌面