python sift 特徵匹配 圖片相似度
一、sift匹配影像相似度原理
可以從圖片中提取SIFT特徵,對兩幅圖片的SIFT特徵進行匹配並按照一定條件刪選就能得到兩幅圖片的匹配點個數,匹配點個數越多,相似度越高
二、指令碼
import cv2
from matplotlib import pyplot as plt
import numpy as np
import os
import math
def getMatchNum(matches,ratio):
'''返回特徵點匹配數量和匹配掩碼'''
matchesMask=[[0,0] for i in range(len(matches))]
matchNum=0
for i,(m,n) in enumerate(matches):
if m.distance<ratio*n.distance: #將距離比率小於ratio的匹配點刪選出來
matchesMask[i]=[1,0]
matchNum+=1
return (matchNum,matchesMask)
path='G:\DeepLearning\data\sift/'
queryPath=path
samplePath=path+'1.jpg' #樣本圖片
comparisonImageList=[] #記錄比較結果
#建立SIFT特徵提取器
sift = cv2.xfeatures2d.SIFT_create()
#建立FLANN匹配物件
FLANN_INDEX_KDTREE=0
indexParams=dict(algorithm=FLANN_INDEX_KDTREE,trees=5)
searchParams=dict(checks=50)
flann=cv2.FlannBasedMatcher(indexParams,searchParams)
sampleImage=cv2.imread(samplePath,0)
kp1, des1 = sift.detectAndCompute(sampleImage, None) #提取樣本圖片的特徵
for parent,dirnames,filenames in os.walk(queryPath):
for p in filenames:
p=queryPath+p
queryImage=cv2.imread(p,0)
kp2, des2 = sift.detectAndCompute(queryImage, None) #提取比對圖片的特徵
matches=flann.knnMatch(des1,des2,k=2) #匹配特徵點,為了刪選匹配點,指定k為2,這樣對樣本圖的每個特徵點,返回兩個匹配
(matchNum,matchesMask)=getMatchNum(matches,0.9) #通過比率條件,計算出匹配程度
matchRatio=matchNum*100/len(matches)
drawParams=dict(matchColor=(0,255,0),
singlePointColor=(255,0,0),
matchesMask=matchesMask,
flags=0)
comparisonImage=cv2.drawMatchesKnn(sampleImage,kp1,queryImage,kp2,matches,None,**drawParams)
comparisonImageList.append((comparisonImage,matchRatio)) #記錄下結果
comparisonImageList.sort(key=lambda x:x[1],reverse=True) #按照匹配度排序
count=len(comparisonImageList)
column=4
row=math.ceil(count/column)
#繪圖顯示
figure,ax=plt.subplots(row,column)
for index,(image,ratio) in enumerate(comparisonImageList):
ax[int(index/column)][index%column].set_title('Similiarity %.2f%%' % ratio)
ax[int(index/column)][index%column].imshow(image)
plt.show()
# 三.結果
別結果看看就好,不指望傳統演算法了,手動哭
![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20201230023124143.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2p1YW5qaTM3OTg=,size_16,color_FFFFFF,t_70#pic_center)
相關文章
- sift、surf、orb 特徵提取及最優特徵點匹配ORB特徵
- 圖片相似度對比SSIM和PHash
- python 相似語句匹配(非機器學習)Python機器學習
- 利用python進行識別相似圖片(二)Python
- js實現的圖片相似度演算法程式碼JS演算法
- WPF呼叫攝像頭,對圖片相似度識別 1.0
- 經典演算法研究系列:九、影象特徵提取與匹配之SIFT演算法演算法特徵
- 相似圖片搜尋的原理
- 相似圖片搜尋的原理(二)
- midjourney 生成相似型別圖片型別
- 中文自然語言處理工具集:分詞,相似度匹配自然語言處理分詞
- 老司機帶你檢測相似圖片
- 3.SIFT特徵提取與ransac演算法特徵演算法
- 4.SIFT特徵提取與ransac演算法特徵演算法
- python酒店相似度推薦系統Python
- Python 做圖片清晰度識別Python
- HSV顏色空間下的圖片相似性計算(python版)Python
- 文章相似度檢測,相似度檢測工具,原創度檢測工具
- c#-SimHash匹配相似-演算法C#演算法
- python爬去百度美女吧圖片Python
- python 爬蟲 下載百度美女圖片Python爬蟲
- 【轉】感知雜湊演算法——找出相似的圖片演算法
- 【火爐煉AI】機器學習049-提取影像的SIFT特徵點AI機器學習特徵
- 【火爐煉AI】機器學習049-提取影象的SIFT特徵點AI機器學習特徵
- 圖片解析度修改
- 正規表示式匹配html中的圖片HTML
- Python呼叫百度OCR介面圖片識別轉文字Python
- 文章相似度檢測工具哪個好?怎麼讓文章相似度變低?
- 【Python案例】用某度AI介面實現摳圖並改圖片底色PythonAI
- 匹配圖片連結地址的正規表示式
- 相似圖片檢測?三行程式碼就夠了行程
- SIFT演算法與SURF演算法特徵檢測效率對比演算法特徵
- python生成圖片Python
- javascript圖片上傳格式尺寸等特徵驗證效果JavaScript特徵
- 中文標題相似度檢測
- Python3呼叫百度OCR圖片文字識別APIPythonAPI
- Flutter圖片解析度適配Flutter
- 如何高效解決圖相似性學習任務?DeepMind提出超越GNN的圖匹配網路GNN