当前位置:首页 > 科技  > 软件

在 Python 中探索图像相似性方法

来源: 责编: 时间:2023-12-01 17:13:24 186观看
导读在一个充斥着图像的世界里,衡量和量化图像之间相似性的能力已经成为一项关键任务。无论是用于图像检索、内容推荐还是视觉搜索,图像相似性方法在现代应用中起着至关重要的作用。幸运的是,Python提供了大量工具和库,使得开

在一个充斥着图像的世界里,衡量和量化图像之间相似性的能力已经成为一项关键任务。无论是用于图像检索、内容推荐还是视觉搜索,图像相似性方法在现代应用中起着至关重要的作用。Y5A28资讯网——每日最新资讯28at.com

Y5A28资讯网——每日最新资讯28at.com

幸运的是,Python提供了大量工具和库,使得开发人员和研究人员能够轻松地探索和实现这些方法。在这篇博客中,我们将深入探讨各种图像相似性技术,并演示如何使用Python实现它们。Y5A28资讯网——每日最新资讯28at.com

Y5A28资讯网——每日最新资讯28at.com

Y5A28资讯网——每日最新资讯28at.com

理解图像相似性

Y5A28资讯网——每日最新资讯28at.com

图像相似性可以被看作是两幅图像在视觉内容方面相似程度的数值表示。图像可以在颜色、形状、纹理和构图等多个维度上相似。为了量化这些相似性,采用了各种数学和计算方法,使我们能够高效地比较和分类图像。Y5A28资讯网——每日最新资讯28at.com

Y5A28资讯网——每日最新资讯28at.com

流行的图像相似性方法

  • 基于直方图的方法
  • 基于特征的方法
  • 基于深度学习的方法

Y5A28资讯网——每日最新资讯28at.com

1.基于直方图的方法

直方图捕捉图像中像素值的分布。通过比较两幅图像的直方图,可以衡量它们的相似性。Y5A28资讯网——每日最新资讯28at.com

Y5A28资讯网——每日最新资讯28at.com

直方图交集和直方图相关性是常用于此目的的度量标准。Python的OpenCV库提供了计算和比较直方图的工具。Y5A28资讯网——每日最新资讯28at.com

Y5A28资讯网——每日最新资讯28at.com

Y5A28资讯网——每日最新资讯28at.com

Y5A28资讯网——每日最新资讯28at.com

在这里,我们将演示一个简单的示例,使用基于直方图的方法和opencv-python库:Y5A28资讯网——每日最新资讯28at.com

import cv2# Load imagesimage1 = cv2.imread(image1)image2 = cv2.imread(image2)hist_img1 = cv2.calcHist([image1], [0, 1, 2], None, [256, 256, 256], [0, 256, 0, 256, 0, 256])hist_img1[255, 255, 255] = 0 #ignore all white pixelscv2.normalize(hist_img1, hist_img1, alpha=0, beta=1, norm_type=cv2.NORM_MINMAX)hist_img2 = cv2.calcHist([image2], [0, 1, 2], None, [256, 256, 256], [0, 256, 0, 256, 0, 256])hist_img2[255, 255, 255] = 0  #ignore all white pixelscv2.normalize(hist_img2, hist_img2, alpha=0, beta=1, norm_type=cv2.NORM_MINMAX)# Find the metric valuemetric_val = cv2.compareHist(hist_img1, hist_img2, cv2.HISTCMP_CORREL)print(f"Similarity Score: ", round(metric_val, 2))# Similarity Score: 0.94

Y5A28资讯网——每日最新资讯28at.com

结构相似性指数(SSIM)Y5A28资讯网——每日最新资讯28at.com

Y5A28资讯网——每日最新资讯28at.com

SSIM是一种广泛使用的指标,评估两幅图像之间的结构相似性。它考虑亮度、对比度和结构,给出一个介于-1(不相似)和1(相同)之间的分数。Python中的scikit-image库提供了SSIM的实现。在这里,我们将演示一个简单的示例,使用SSIM和scikit-image库:Y5A28资讯网——每日最新资讯28at.com

import cv2from skimage import metrics# Load imagesimage1 = cv2.imread(image1)image2 = cv2.imread(image2)image2 = cv2.resize(image2, (image1.shape[1], image1.shape[0]), interpolation = cv2.INTER_AREA)print(image1.shape, image2.shape)# Convert images to grayscaleimage1_gray = cv2.cvtColor(image1, cv2.COLOR_BGR2GRAY)image2_gray = cv2.cvtColor(image2, cv2.COLOR_BGR2GRAY)# Calculate SSIMssim_score = metrics.structural_similarity(image1_gray, image2_gray, full=True)print(f"SSIM Score: ", round(ssim_score[0], 2))# SSIM Score: 0.38

与直方图方法相比,SSIM方法的主要缺点是图像必须具有相同的尺寸。即使相似性分数很低,我们可以从图像中去除背景和透明度,以提高相似性分数。Y5A28资讯网——每日最新资讯28at.com

Y5A28资讯网——每日最新资讯28at.com

2.基于特征的方法

这些方法从图像中提取显著特征,如边缘、角点或关键点。诸如尺度不变特征变换(SIFT)和加速稳健特征(SURF)之类的技术可识别图像中的独特点,然后可以在图像之间进行比较。可以使用opencv-python库进行SIFT和SURF。Y5A28资讯网——每日最新资讯28at.com

Y5A28资讯网——每日最新资讯28at.com

3.基于深度学习的方法

深度学习已经彻底改变了图像相似性任务。使用预训练的卷积神经网络(CNNs)如ResNet、VGG和Inception,可以从图像中提取深层特征。Y5A28资讯网——每日最新资讯28at.com

Y5A28资讯网——每日最新资讯28at.com

openAI的CLIP(对比语言-图像预训练)是一个令人印象深刻的多模态零样本图像分类器,它在多个领域取得了令人印象深刻的结果,而无需微调。它将在大规模transformer(如GPT-3)领域的最新进展应用到视觉领域。Y5A28资讯网——每日最新资讯28at.com

Y5A28资讯网——每日最新资讯28at.com

我们可以使用torch、open_clip和sentence_transformers库对这些模型进行微调,用我们自己的图像和文本数据进行训练。ScrapeHero可以帮助准备自己的图像数据集以训练这些模型。其网络爬虫服务可以爬取复杂的网站并提供高质量的数据。Y5A28资讯网——每日最新资讯28at.com

Y5A28资讯网——每日最新资讯28at.com

在这里,我们将演示一个简单的示例,使用基于CLIP的预训练模型和torch、open_clip和sentence_transformers库:Y5A28资讯网——每日最新资讯28at.com

!pip install git+https://github.com/openai/CLIP.git!pip install open_clip_torch!pip install sentence_transformersimport torchimport open_clipimport cv2from sentence_transformers import utilfrom PIL import Image# image processing modeldevice = "cuda" if torch.cuda.is_available() else "cpu"model, _, preprocess = open_clip.create_model_and_transforms('ViT-B-16-plus-240', pretrained="laion400m_e32")model.to(device)def imageEncoder(img):    img1 = Image.fromarray(img).convert('RGB')    img1 = preprocess(img1).unsqueeze(0).to(device)    img1 = model.encode_image(img1)    return img1def generateScore(image1, image2):    test_img = cv2.imread(image1, cv2.IMREAD_UNCHANGED)    data_img = cv2.imread(image2, cv2.IMREAD_UNCHANGED)    img1 = imageEncoder(test_img)    img2 = imageEncoder(data_img)    cos_scores = util.pytorch_cos_sim(img1, img2)    score = round(float(cos_scores[0][0])*100, 2)    return scoreprint(f"similarity Score: ", round(generateScore(image1, image2), 2))#similarity Score: 76.77

然后,可以基于这些特征向量的余弦相似度或欧氏距离计算图像之间的相似性。为了提高准确性,我们可以预处理图像。Y5A28资讯网——每日最新资讯28at.com

Y5A28资讯网——每日最新资讯28at.com

应用领域

Y5A28资讯网——每日最新资讯28at.com

图像相似性技术的主要应用包括电子商务产品匹配、图像检索、物体识别和人脸识别。例如,在图像检索中,可以使用图像相似性找到与查询图像相似的图像。图像相似性可以在物体识别中使用,将给定对象与已知数据库进行匹配。图像相似性算法可用于通过将人脸与数据库进行比较来识别个人。Y5A28资讯网——每日最新资讯28at.com

Y5A28资讯网——每日最新资讯28at.com

结论

Y5A28资讯网——每日最新资讯28at.com

在今天以视觉为驱动的世界中,衡量图像相似性的能力是许多应用的重要组成部分。本博客向您介绍了从简单的基于直方图的方法到复杂的深度学习技术的各种图像相似性方法。您还可以探索Siamese网络,这是一类专为一次学习和图像相似性任务而设计的神经网络。Y5A28资讯网——每日最新资讯28at.com

Y5A28资讯网——每日最新资讯28at.com

Python凭借其丰富的库生态系统,如scikit-image、opencv-python、TensorFlow和PyTorch,使开发人员和研究人员能够有效地实现这些方法。通过尝试这些技术,将打开创造运用图像相似性的强大力量的创新应用的大门。Y5A28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-35866-0.html在 Python 中探索图像相似性方法

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 七个强大的无代码数据科学工具

下一篇: 14个基于Node.js的开源免费CMS,接单赚钱拿去改一改

标签:
  • 热门焦点
Top