计算两张图片的结构相似性指数SSIM

2024-03-17 21:52

本文主要是介绍计算两张图片的结构相似性指数SSIM,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

结构相似性指数(SSIM)

主要考虑了人眼的感知特性,比较两幅图像的亮度、对比度和结构等特征。SSIM 取值范围在 [-1, 1] 之间,越接近 1 表示两幅图像越相似。比较一个文件中哪些图像存在相似的代码示例:
安装skimage:

pip install scikit-image -i https://mirrors.aliyun.com/pypi/simple/

完整如下:


import os
import sys
import cv2
import shutil
import numpy as np
from tqdm import tqdm
from skimage.metrics import structural_similarity as compare_ssimcurrent_dir = os.path.dirname(os.path.abspath(__file__))
base_dir = current_dir
sys.path.append(base_dir)# 读取一个文件夹的的图片路径列表
def list_files(src_dir, exts, is_dirpath=True):assert exts is not Noneif not isinstance(exts, (str, list, tuple)):raise TypeError('The type of exts must be str or a tuple/list of str, not' % type(exts))exts = [exts] if isinstance(exts, str) else extsfile_list = []for root, dirs, files in os.walk(src_dir):for file in files:if file.lower().endswith(tuple(exts)):if is_dirpath:file_list.append(os.path.normpath(os.path.join(root, file)))else:file_list.append(os.path.normpath(file))return file_list# 读取图片,转为灰度图,缩放为同一个尺寸
def read_ssim_im(fpath):img = np.fromfile(fpath, dtype=np.uint8)img = cv2.imdecode(img, cv2.IMREAD_GRAYSCALE)img = cv2.resize(img, (320, 240))return imgif __name__ == "__main__":src_dir = "D:\\001-数据集\\images"dst_dir = "D:\\001-数据集\\dst_images"os.makedirs(dst_dir, exist_ok=True)# 读取一个images文件夹的图像路径file_paths = list_files(src_dir=src_dir, exts=[".jpg", ".png"])l = len(file_paths)# 读取图像images_data = []for file_path in tqdm(file_paths):images_data.append(read_ssim_im(file_path))# 两两计算,如果相似移动到一个dst_images文件夹中for i in tqdm(range(l)):for j in range(l-i-1):ssim = compare_ssim(images_data[i], images_data[i+j+1], multichannel=True)# print('SSIM:', ssim)if ssim > 0.8:print('=== SSIM:', ssim)shutil.move(src=file_paths[i], dst=os.path.join(dst_dir, os.path.basename(file_paths[i])))shutil.move(src=file_paths[i+j+1], dst=os.path.join(dst_dir, os.path.basename(file_paths[i+j+1])))

如果有用,请 点赞、关注、收藏、分享
你的鼓励是我最大的动力

这篇关于计算两张图片的结构相似性指数SSIM的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/820284

相关文章

Python FastAPI+Celery+RabbitMQ实现分布式图片水印处理系统

《PythonFastAPI+Celery+RabbitMQ实现分布式图片水印处理系统》这篇文章主要为大家详细介绍了PythonFastAPI如何结合Celery以及RabbitMQ实现简单的分布式... 实现思路FastAPI 服务器Celery 任务队列RabbitMQ 作为消息代理定时任务处理完整

使用C#代码在PDF文档中添加、删除和替换图片

《使用C#代码在PDF文档中添加、删除和替换图片》在当今数字化文档处理场景中,动态操作PDF文档中的图像已成为企业级应用开发的核心需求之一,本文将介绍如何在.NET平台使用C#代码在PDF文档中添加、... 目录引言用C#添加图片到PDF文档用C#删除PDF文档中的图片用C#替换PDF文档中的图片引言在当

详解C#如何提取PDF文档中的图片

《详解C#如何提取PDF文档中的图片》提取图片可以将这些图像资源进行单独保存,方便后续在不同的项目中使用,下面我们就来看看如何使用C#通过代码从PDF文档中提取图片吧... 当 PDF 文件中包含有价值的图片,如艺术画作、设计素材、报告图表等,提取图片可以将这些图像资源进行单独保存,方便后续在不同的项目中使

Java实现文件图片的预览和下载功能

《Java实现文件图片的预览和下载功能》这篇文章主要为大家详细介绍了如何使用Java实现文件图片的预览和下载功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... Java实现文件(图片)的预览和下载 @ApiOperation("访问文件") @GetMapping("

使用Java实现通用树形结构构建工具类

《使用Java实现通用树形结构构建工具类》这篇文章主要为大家详细介绍了如何使用Java实现通用树形结构构建工具类,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录完整代码一、设计思想与核心功能二、核心实现原理1. 数据结构准备阶段2. 循环依赖检测算法3. 树形结构构建4. 搜索子

利用Python开发Markdown表格结构转换为Excel工具

《利用Python开发Markdown表格结构转换为Excel工具》在数据管理和文档编写过程中,我们经常使用Markdown来记录表格数据,但它没有Excel使用方便,所以本文将使用Python编写一... 目录1.完整代码2. 项目概述3. 代码解析3.1 依赖库3.2 GUI 设计3.3 解析 Mark

基于Python开发批量提取Excel图片的小工具

《基于Python开发批量提取Excel图片的小工具》这篇文章主要为大家详细介绍了如何使用Python中的openpyxl库开发一个小工具,可以实现批量提取Excel图片,有需要的小伙伴可以参考一下... 目前有一个需求,就是批量读取当前目录下所有文件夹里的Excel文件,去获取出Excel文件中的图片,并

Java实现数据库图片上传与存储功能

《Java实现数据库图片上传与存储功能》在现代的Web开发中,上传图片并将其存储在数据库中是常见的需求之一,本文将介绍如何通过Java实现图片上传,存储到数据库的完整过程,希望对大家有所帮助... 目录1. 项目结构2. 数据库表设计3. 实现图片上传功能3.1 文件上传控制器3.2 图片上传服务4. 实现

Java实现数据库图片上传功能详解

《Java实现数据库图片上传功能详解》这篇文章主要为大家详细介绍了如何使用Java实现数据库图片上传功能,包含从数据库拿图片传递前端渲染,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1、前言2、数据库搭建&nbsChina编程p; 3、后端实现将图片存储进数据库4、后端实现从数据库取出图片给前端5、前端拿到

Python使用PIL库将PNG图片转换为ICO图标的示例代码

《Python使用PIL库将PNG图片转换为ICO图标的示例代码》在软件开发和网站设计中,ICO图标是一种常用的图像格式,特别适用于应用程序图标、网页收藏夹图标等场景,本文将介绍如何使用Python的... 目录引言准备工作代码解析实践操作结果展示结语引言在软件开发和网站设计中,ICO图标是一种常用的图像