程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

Python圖像相似度2種方法和嵌入空間度量學習

編輯:Python

圖像相似度

方法#1

在本文中,我們將介紹如何使用圖像相似性量度庫來比較圖像。根據庫的文檔,我們可以使用八種不同的評估指標來計算圖像之間的相似度。

幸運的是,所有可怕的數學運算已為我們實現,我們可以立即開始測量圖像相似度。我們只需要調用所選評估指標的名稱並傳遞兩個圖像作為參數即可。例如:

請注意,默認指標是psnr。

有兩種使用此軟件包的方法:您可以在終端中執行命令或編寫單獨的Python腳本。

如果要在兩個圖像之間進行快速評估,請在終端中運行以下命令:

(可選)添加— metric標志以指示要使用的評估指標。

在本文中,我選擇了三個評估指標:rmse,psnr和ssim。

首先,讓我們了解我們將要構建的程序:

  • 我們會將原始圖片作為參數傳遞給我們的程序。
  • 該代碼將遍歷數據集文件夾中的所有圖像,並計算每個圖像與原始圖像之間的相似度值。
  • 最後,我們將打印每個評估指標的各個結果。

編程

讓我們使用pip或pip3安裝庫:

接下來,創建一個新的Python腳本文件並粘貼以下代碼:

上述代碼分析:

  • 導入必要的庫文件
  • 無需每次運行腳本都對圖像進行硬編碼,而是使用argv [1]函數提供圖像名稱作為命令行參數。
  • 我們使用OpenCV Python包讀取圖像。我的將在一個單獨的文件夾中,稱為test。如果需要,請調整代碼。
  • 為了比較不同指標的結果,我們將創建字典,其中的鍵是數據集圖像的名稱,而值是相似度值。
  • 圖像相似性度量程序包要求圖像具有相同的形狀。 由於我們正在比較形狀稍有不同的圖像,因此我們需要提供相同的形狀。 為此,我們將使用cv2.resize(data_img,dim,interpolation = cv2.INTER_AREA)函數,在該函數中,將根據原始圖像的尺寸調整數據集圖像的大小。
  • 我們將遍歷數據集目錄,調整每個圖像的大小,然後填充每個字典。請注意,由於尺寸調整,圖像可能會變形。
  • calc_closest_val(dict,checkMax)函數返回最相似的圖像。 它還打印出每個圖像的相似度值。 請注意,根據某些評估指標(如RMSE),值0表示該數據非常合適。 對於其他指標,反之亦然-值越高,匹配越好。 這就是為什麼我們要使用bool參數checkMax。 它根據字典中的最小值或最大值選擇最接近的圖像。
  • 最後,為方便起見,我們將根據每個評估指標顯示最相似的圖像。

演示

首先,我將為原始圖像創建一個文件夾。然後,我將比較圖像放置在數據集文件夾中。

這個紅蘋果將是我們原始的查詢圖像:

我們將其與其他水果進行比較:

現在,讓我們運行Python程序,找出最匹配的一個:

$ python3 measure_similarity.py red_apple.jpg

輸出:

The difference between dataset/red_pear.jpg and the original image is :
0.8827639040117994
The difference between dataset/cherry.jpg and the original image is :
0.8542221298727691
The difference between dataset/green_apple.jpg and the original image is :
0.9379929447852137
The closest value: 0.9379929447852137
######################################################################
The difference between dataset/red_pear.jpg and the original image is :
0.018479494
The difference between dataset/cherry.jpg and the original image is :
0.022247538
The difference between dataset/green_apple.jpg and the original image is :
0.014238722
The closest value: 0.014238722
######################################################################
The difference between dataset/red_pear.jpg and the original image is :
55.925131298420894
The difference between dataset/cherry.jpg and the original image is :
55.43173546627284
The difference between dataset/green_apple.jpg and the original image is :
58.09926725713899
The closest value: 58.09926725713899
######################################################################
The most similar image accroding to SSIM: {
'dataset/green_apple.jpg': 0.9379929447852137}
The most similar image accroding to RMSE: {
'dataset/green_apple.jpg': 0.014238722}
The most similar image accroding to SRE: {
'dataset/green_apple.jpg': 58.09926725713899}

如您所見,青蘋果是贏家。如果查看每個結果,就會發現第二個最相似的圖像是紅梨。

現在,讓我們來看看當很難預測結果時會發生什麼。讓我們將紅色番茄的照片放在數據集文件夾中:

我要說的是,青蘋果和番茄看起來都像紅蘋果。讓我們根據數學來檢查結果:

為了使它更加令人興奮,讓我們嘗試比較更多不同的圖像。自從我喜歡繪畫以來,我為此實驗拍攝了自己的繪畫照片。

原始圖片:

圖像數據集:

我看到了兩張與小房子相似的照片,這些小房子與原始照片相似。

秋天風景和房子最匹配。

這些怎麼樣?

乍一看,結果令我有些驚訝。但是,當我仔細觀察時,與該女孩合影的照片具有深藍色背景,就像原始圖像一樣。北極光的繪畫在背景中具有相似的山脈。

如您所見,結果基於不同的評估指標而有所不同。

我們已經了解了如何使用不同的評估指標來衡量圖像相似度。圖像相似性度量庫為我們實現了這些方法。

哪種方法最好?

很難預測出准確的結果。度量根據不同方面比較圖像。這取決於您要如何比較圖像。

源代碼

方式2

嵌入空間度量學習

度量學習是一種直接基於距離度量的方法,旨在建立圖像之間的相似性或相異性。 另一方面,深度度量學習使用神經網絡從圖像中自動學習判別特征,然後計算度量。其目的在訓練可以將輸入嵌入到高維空間中的模型,以便訓練方案定義的“相似”輸入彼此靠近。 這些模型一旦訓練就可以為下游系統生成嵌入,在這些系統中這種相似性是有用的; 示例包括作為搜索的排名信號或作為另一個監督問題的預訓練嵌入模型的一種形式。

圖像相似度搜索

相似度搜索建模

源代碼

參閱 - 亞圖跨際


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved