自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

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

開發(fā) 前端
在這篇文章中,我們將深入探討各種圖像相似性技術(shù),并演示如何使用Python實(shí)現(xiàn)它們。

在一個(gè)充斥著圖像的世界里,衡量和量化圖像之間相似性的能力已經(jīng)成為一項(xiàng)關(guān)鍵任務(wù)。無論是用于圖像檢索、內(nèi)容推薦還是視覺搜索,圖像相似性方法在現(xiàn)代應(yīng)用中起著至關(guān)重要的作用。

幸運(yùn)的是,Python提供了大量工具和庫(kù),使得開發(fā)人員和研究人員能夠輕松地探索和實(shí)現(xiàn)這些方法。在這篇博客中,我們將深入探討各種圖像相似性技術(shù),并演示如何使用Python實(shí)現(xiàn)它們。

理解圖像相似性

圖像相似性可以被看作是兩幅圖像在視覺內(nèi)容方面相似程度的數(shù)值表示。圖像可以在顏色、形狀、紋理和構(gòu)圖等多個(gè)維度上相似。為了量化這些相似性,采用了各種數(shù)學(xué)和計(jì)算方法,使我們能夠高效地比較和分類圖像。

流行的圖像相似性方法

  • 基于直方圖的方法
  • 基于特征的方法
  • 基于深度學(xué)習(xí)的方法

1.基于直方圖的方法

直方圖捕捉圖像中像素值的分布。通過比較兩幅圖像的直方圖,可以衡量它們的相似性。

直方圖交集和直方圖相關(guān)性是常用于此目的的度量標(biāo)準(zhǔn)。Python的OpenCV庫(kù)提供了計(jì)算和比較直方圖的工具。

在這里,我們將演示一個(gè)簡(jiǎn)單的示例,使用基于直方圖的方法和opencv-python庫(kù):

import cv2
# Load images
image1 = 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 pixels
cv2.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 pixels
cv2.normalize(hist_img2, hist_img2, alpha=0, beta=1, norm_type=cv2.NORM_MINMAX)
# Find the metric value
metric_val = cv2.compareHist(hist_img1, hist_img2, cv2.HISTCMP_CORREL)
print(f"Similarity Score: ", round(metric_val, 2))
# Similarity Score: 0.94

結(jié)構(gòu)相似性指數(shù)(SSIM)

SSIM是一種廣泛使用的指標(biāo),評(píng)估兩幅圖像之間的結(jié)構(gòu)相似性。它考慮亮度、對(duì)比度和結(jié)構(gòu),給出一個(gè)介于-1(不相似)和1(相同)之間的分?jǐn)?shù)。Python中的scikit-image庫(kù)提供了SSIM的實(shí)現(xiàn)。在這里,我們將演示一個(gè)簡(jiǎn)單的示例,使用SSIM和scikit-image庫(kù):

import cv2
from skimage import metrics
# Load images
image1 = 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 grayscale
image1_gray = cv2.cvtColor(image1, cv2.COLOR_BGR2GRAY)
image2_gray = cv2.cvtColor(image2, cv2.COLOR_BGR2GRAY)
# Calculate SSIM
ssim_score = metrics.structural_similarity(image1_gray, image2_gray, full=True)
print(f"SSIM Score: ", round(ssim_score[0], 2))
# SSIM Score: 0.38

與直方圖方法相比,SSIM方法的主要缺點(diǎn)是圖像必須具有相同的尺寸。即使相似性分?jǐn)?shù)很低,我們可以從圖像中去除背景和透明度,以提高相似性分?jǐn)?shù)。

2.基于特征的方法

這些方法從圖像中提取顯著特征,如邊緣、角點(diǎn)或關(guān)鍵點(diǎn)。諸如尺度不變特征變換(SIFT)和加速穩(wěn)健特征(SURF)之類的技術(shù)可識(shí)別圖像中的獨(dú)特點(diǎn),然后可以在圖像之間進(jìn)行比較??梢允褂胦pencv-python庫(kù)進(jìn)行SIFT和SURF。

3.基于深度學(xué)習(xí)的方法

深度學(xué)習(xí)已經(jīng)徹底改變了圖像相似性任務(wù)。使用預(yù)訓(xùn)練的卷積神經(jīng)網(wǎng)絡(luò)(CNNs)如ResNet、VGG和Inception,可以從圖像中提取深層特征。

openAI的CLIP(對(duì)比語言-圖像預(yù)訓(xùn)練)是一個(gè)令人印象深刻的多模態(tài)零樣本圖像分類器,它在多個(gè)領(lǐng)域取得了令人印象深刻的結(jié)果,而無需微調(diào)。它將在大規(guī)模transformer(如GPT-3)領(lǐng)域的最新進(jìn)展應(yīng)用到視覺領(lǐng)域。

我們可以使用torch、open_clip和sentence_transformers庫(kù)對(duì)這些模型進(jìn)行微調(diào),用我們自己的圖像和文本數(shù)據(jù)進(jìn)行訓(xùn)練。ScrapeHero可以幫助準(zhǔn)備自己的圖像數(shù)據(jù)集以訓(xùn)練這些模型。其網(wǎng)絡(luò)爬蟲服務(wù)可以爬取復(fù)雜的網(wǎng)站并提供高質(zhì)量的數(shù)據(jù)。

在這里,我們將演示一個(gè)簡(jiǎn)單的示例,使用基于CLIP的預(yù)訓(xùn)練模型和torch、open_clip和sentence_transformers庫(kù):

!pip install git+https://github.com/openai/CLIP.git
!pip install open_clip_torch
!pip install sentence_transformers

import torch
import open_clip
import cv2
from sentence_transformers import util
from PIL import Image
# image processing model
device = "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 img1
def 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 score
print(f"similarity Score: ", round(generateScore(image1, image2), 2))
#similarity Score: 76.77

然后,可以基于這些特征向量的余弦相似度或歐氏距離計(jì)算圖像之間的相似性。為了提高準(zhǔn)確性,我們可以預(yù)處理圖像。

應(yīng)用領(lǐng)域

圖像相似性技術(shù)的主要應(yīng)用包括電子商務(wù)產(chǎn)品匹配、圖像檢索、物體識(shí)別和人臉識(shí)別。例如,在圖像檢索中,可以使用圖像相似性找到與查詢圖像相似的圖像。圖像相似性可以在物體識(shí)別中使用,將給定對(duì)象與已知數(shù)據(jù)庫(kù)進(jìn)行匹配。圖像相似性算法可用于通過將人臉與數(shù)據(jù)庫(kù)進(jìn)行比較來識(shí)別個(gè)人。

結(jié)論

在今天以視覺為驅(qū)動(dòng)的世界中,衡量圖像相似性的能力是許多應(yīng)用的重要組成部分。本博客向您介紹了從簡(jiǎn)單的基于直方圖的方法到復(fù)雜的深度學(xué)習(xí)技術(shù)的各種圖像相似性方法。您還可以探索Siamese網(wǎng)絡(luò),這是一類專為一次學(xué)習(xí)和圖像相似性任務(wù)而設(shè)計(jì)的神經(jīng)網(wǎng)絡(luò)。

Python憑借其豐富的庫(kù)生態(tài)系統(tǒng),如scikit-image、opencv-python、TensorFlow和PyTorch,使開發(fā)人員和研究人員能夠有效地實(shí)現(xiàn)這些方法。通過嘗試這些技術(shù),將打開創(chuàng)造運(yùn)用圖像相似性的強(qiáng)大力量的創(chuàng)新應(yīng)用的大門。

責(zé)任編輯:趙寧寧 來源: 小白玩轉(zhuǎn)Python
相關(guān)推薦

2024-04-02 10:05:28

Siamese神經(jīng)網(wǎng)絡(luò)人工智能

2024-06-24 13:06:04

2024-05-23 08:48:21

2018-03-23 11:56:09

相似性推薦推薦算法推薦

2023-11-13 15:01:28

機(jī)器學(xué)習(xí)

2022-01-13 19:25:44

Umay惡意軟件分析平臺(tái)

2024-07-12 08:00:00

2020-09-27 10:38:48

網(wǎng)絡(luò)安全

2017-11-15 07:20:22

Facebook相似性搜索算法

2023-09-27 22:53:04

圖像處理是開源Java

2021-02-19 13:00:42

加密貨幣比特幣貨幣

2025-02-18 16:00:00

代碼Python架構(gòu)

2022-07-06 13:13:36

SWIL神經(jīng)網(wǎng)絡(luò)數(shù)據(jù)集

2022-07-04 18:33:40

深度學(xué)習(xí)人工智能科學(xué)

2024-01-08 11:39:57

FlutterUI設(shè)計(jì)

2020-07-30 15:51:11

AI 數(shù)據(jù)人工智能

2024-09-09 15:02:52

2023-10-10 15:33:55

機(jī)器學(xué)習(xí)相似性度量

2022-04-20 20:37:58

鴻蒙操作系統(tǒng)

2021-05-10 17:40:14

AI 數(shù)據(jù)人工智能
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)