计算两张图片的结构相似性指数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

相关文章

MySQL中的索引结构和分类实战案例详解

《MySQL中的索引结构和分类实战案例详解》本文详解MySQL索引结构与分类,涵盖B树、B+树、哈希及全文索引,分析其原理与优劣势,并结合实战案例探讨创建、管理及优化技巧,助力提升查询性能,感兴趣的朋... 目录一、索引概述1.1 索引的定义与作用1.2 索引的基本原理二、索引结构详解2.1 B树索引2.2

利用Python脚本实现批量将图片转换为WebP格式

《利用Python脚本实现批量将图片转换为WebP格式》Python语言的简洁语法和库支持使其成为图像处理的理想选择,本文将介绍如何利用Python实现批量将图片转换为WebP格式的脚本,WebP作为... 目录简介1. python在图像处理中的应用2. WebP格式的原理和优势2.1 WebP格式与传统

如何使用Maven创建web目录结构

《如何使用Maven创建web目录结构》:本文主要介绍如何使用Maven创建web目录结构的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录创建web工程第一步第二步第三步第四步第五步第六步第七步总结创建web工程第一步js通过Maven骨架创pytho

Python循环结构全面解析

《Python循环结构全面解析》循环中的代码会执行特定的次数,或者是执行到特定条件成立时结束循环,或者是针对某一集合中的所有项目都执行一次,这篇文章给大家介绍Python循环结构解析,感兴趣的朋友跟随... 目录for-in循环while循环循环控制语句break语句continue语句else子句嵌套的循

基于 HTML5 Canvas 实现图片旋转与下载功能(完整代码展示)

《基于HTML5Canvas实现图片旋转与下载功能(完整代码展示)》本文将深入剖析一段基于HTML5Canvas的代码,该代码实现了图片的旋转(90度和180度)以及旋转后图片的下载... 目录一、引言二、html 结构分析三、css 样式分析四、JavaScript 功能实现一、引言在 Web 开发中,

Python如何去除图片干扰代码示例

《Python如何去除图片干扰代码示例》图片降噪是一个广泛应用于图像处理的技术,可以提高图像质量和相关应用的效果,:本文主要介绍Python如何去除图片干扰的相关资料,文中通过代码介绍的非常详细,... 目录一、噪声去除1. 高斯噪声(像素值正态分布扰动)2. 椒盐噪声(随机黑白像素点)3. 复杂噪声(如伪

Python中图片与PDF识别文本(OCR)的全面指南

《Python中图片与PDF识别文本(OCR)的全面指南》在数据爆炸时代,80%的企业数据以非结构化形式存在,其中PDF和图像是最主要的载体,本文将深入探索Python中OCR技术如何将这些数字纸张转... 目录一、OCR技术核心原理二、python图像识别四大工具库1. Pytesseract - 经典O

Python并行处理实战之如何使用ProcessPoolExecutor加速计算

《Python并行处理实战之如何使用ProcessPoolExecutor加速计算》Python提供了多种并行处理的方式,其中concurrent.futures模块的ProcessPoolExecu... 目录简介完整代码示例代码解释1. 导入必要的模块2. 定义处理函数3. 主函数4. 生成数字列表5.

Python实现精准提取 PDF中的文本,表格与图片

《Python实现精准提取PDF中的文本,表格与图片》在实际的系统开发中,处理PDF文件不仅限于读取整页文本,还有提取文档中的表格数据,图片或特定区域的内容,下面我们来看看如何使用Python实... 目录安装 python 库提取 PDF 文本内容:获取整页文本与指定区域内容获取页面上的所有文本内容获取

Python基于微信OCR引擎实现高效图片文字识别

《Python基于微信OCR引擎实现高效图片文字识别》这篇文章主要为大家详细介绍了一款基于微信OCR引擎的图片文字识别桌面应用开发全过程,可以实现从图片拖拽识别到文字提取,感兴趣的小伙伴可以跟随小编一... 目录一、项目概述1.1 开发背景1.2 技术选型1.3 核心优势二、功能详解2.1 核心功能模块2.