成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

開發 前端
在這篇文章中,我們將深入探討各種圖像相似性技術,并演示如何使用Python實現它們。

在一個充斥著圖像的世界里,衡量和量化圖像之間相似性的能力已經成為一項關鍵任務。無論是用于圖像檢索、內容推薦還是視覺搜索,圖像相似性方法在現代應用中起著至關重要的作用。

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

理解圖像相似性

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

流行的圖像相似性方法

  • 基于直方圖的方法
  • 基于特征的方法
  • 基于深度學習的方法

1.基于直方圖的方法

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

直方圖交集和直方圖相關性是常用于此目的的度量標準。Python的OpenCV庫提供了計算和比較直方圖的工具。

在這里,我們將演示一個簡單的示例,使用基于直方圖的方法和opencv-python庫:

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

結構相似性指數(SSIM)

SSIM是一種廣泛使用的指標,評估兩幅圖像之間的結構相似性。它考慮亮度、對比度和結構,給出一個介于-1(不相似)和1(相同)之間的分數。Python中的scikit-image庫提供了SSIM的實現。在這里,我們將演示一個簡單的示例,使用SSIM和scikit-image庫:

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方法的主要缺點是圖像必須具有相同的尺寸。即使相似性分數很低,我們可以從圖像中去除背景和透明度,以提高相似性分數。

2.基于特征的方法

這些方法從圖像中提取顯著特征,如邊緣、角點或關鍵點。諸如尺度不變特征變換(SIFT)和加速穩健特征(SURF)之類的技術可識別圖像中的獨特點,然后可以在圖像之間進行比較。可以使用opencv-python庫進行SIFT和SURF。

3.基于深度學習的方法

深度學習已經徹底改變了圖像相似性任務。使用預訓練的卷積神經網絡(CNNs)如ResNet、VGG和Inception,可以從圖像中提取深層特征。

openAI的CLIP(對比語言-圖像預訓練)是一個令人印象深刻的多模態零樣本圖像分類器,它在多個領域取得了令人印象深刻的結果,而無需微調。它將在大規模transformer(如GPT-3)領域的最新進展應用到視覺領域。

我們可以使用torch、open_clip和sentence_transformers庫對這些模型進行微調,用我們自己的圖像和文本數據進行訓練。ScrapeHero可以幫助準備自己的圖像數據集以訓練這些模型。其網絡爬蟲服務可以爬取復雜的網站并提供高質量的數據。

在這里,我們將演示一個簡單的示例,使用基于CLIP的預訓練模型和torch、open_clip和sentence_transformers庫:

!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

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

應用領域

圖像相似性技術的主要應用包括電子商務產品匹配、圖像檢索、物體識別和人臉識別。例如,在圖像檢索中,可以使用圖像相似性找到與查詢圖像相似的圖像。圖像相似性可以在物體識別中使用,將給定對象與已知數據庫進行匹配。圖像相似性算法可用于通過將人臉與數據庫進行比較來識別個人。

結論

在今天以視覺為驅動的世界中,衡量圖像相似性的能力是許多應用的重要組成部分。本博客向您介紹了從簡單的基于直方圖的方法到復雜的深度學習技術的各種圖像相似性方法。您還可以探索Siamese網絡,這是一類專為一次學習和圖像相似性任務而設計的神經網絡。

Python憑借其豐富的庫生態系統,如scikit-image、opencv-python、TensorFlow和PyTorch,使開發人員和研究人員能夠有效地實現這些方法。通過嘗試這些技術,將打開創造運用圖像相似性的強大力量的創新應用的大門。

責任編輯:趙寧寧 來源: 小白玩轉Python
相關推薦

2024-06-24 13:06:04

2024-04-02 10:05:28

Siamese神經網絡人工智能

2024-05-23 08:48:21

2018-03-23 11:56:09

相似性推薦推薦算法推薦

2023-11-13 15:01:28

機器學習

2022-01-13 19:25:44

Umay惡意軟件分析平臺

2024-07-12 08:00:00

2023-09-27 22:53:04

圖像處理是開源Java

2017-11-15 07:20:22

Facebook相似性搜索算法

2020-09-27 10:38:48

網絡安全

2021-02-19 13:00:42

加密貨幣比特幣貨幣

2025-02-18 16:00:00

代碼Python架構

2024-01-08 11:39:57

FlutterUI設計

2023-10-10 15:33:55

機器學習相似性度量

2022-07-04 18:33:40

深度學習人工智能科學

2022-07-06 13:13:36

SWIL神經網絡數據集

2022-04-20 20:37:58

鴻蒙操作系統

2021-05-10 17:40:14

AI 數據人工智能

2024-09-09 15:02:52

2020-07-30 15:51:11

AI 數據人工智能
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 自拍 亚洲 欧美 老师 丝袜 | 国产日韩精品视频 | 色婷婷精品久久二区二区蜜臂av | 国产一区视频在线 | 黄色片在线 | 久久丁香 | 欧美黄色一区 | 乱码av午夜噜噜噜噜动漫 | www.国产精 | 久久69精品久久久久久国产越南 | 精品国产青草久久久久96 | 99国产精品久久久久 | 欧美精品网 | 久久精品视频亚洲 | 99久久99久久精品国产片果冰 | 一区二区日韩 | 女人av | 天天插天天操 | 综合网视频| 在线中文字幕av | 国产69精品久久久久777 | 一区二区三区四区视频 | 久久免费精品 | 亚洲国产一区二区视频 | 一级一级一级毛片 | 黄色av网站在线观看 | 欧美一级艳情片免费观看 | 毛片视频观看 | 97福利在线| 成人福利电影 | 91资源在线| 紧缚调教一区二区三区视频 | 国产精品久久久久久久久久久久 | 一区二区三区四区av | 欧美中文一区 | 成年人精品视频 | 久久婷婷av| 91伊人| 国产精品中文字幕在线 | 亚洲av毛片 | 国产高清性xxxxxxxx |