應(yīng)用OpenCV和Python進行SIFT算法的實現(xiàn)詳解-創(chuàng)新互聯(lián)

應(yīng)用OpenCV和Python進行SIFT算法的實現(xiàn)

創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價比奉節(jié)網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式奉節(jié)網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋奉節(jié)地區(qū)。費用合理售后完善,10余年實體公司更值得信賴。

如下圖為進行測試的gakki101和gakki102,分別驗證基于BFmatcher、FlannBasedMatcher等的SIFT算法,對比其優(yōu)劣。為體現(xiàn)出匹配效果對于旋轉(zhuǎn)特性的優(yōu)勢,將圖gakki101做成具有旋轉(zhuǎn)特性的效果。

基于BFmatcher的SIFT實現(xiàn)

BFmatcher(Brute-Force Matching)暴力匹配,應(yīng)用BFMatcher.knnMatch( )函數(shù)來進行核心的匹配,knnMatch(k-nearest neighbor classification)k近鄰分類算法。


kNN算法則是從訓(xùn)練集中找到和新數(shù)據(jù)最接近的k條記錄,然后根據(jù)他們的主要分類來決定新數(shù)據(jù)的類別。該算法涉及3個主要因素:訓(xùn)練集、距離或相似的衡量、k的大小。kNN算法的核心思想是如果一個樣本在特征空間中的k個最相鄰的樣本中的大多數(shù)屬于某一個類別,則該樣本也屬于這個類別,并具有這個類別上樣本的特性。該方法在確定分類決策上只依據(jù)最鄰近的一個或者幾個樣本的類別來決定待分樣本所屬的類別。


kNN方法在類別決策時,只與極少量的相鄰樣本有關(guān)。由于kNN方法主要靠周圍有限的鄰近的樣本,而不是靠判別類域的方法來確定所屬類別的,因此對于類域的交叉或重疊較多的待分樣本集來說,kNN方法較其他方法更為適合。
經(jīng)檢驗 BFmatcher在做匹配時會耗費大量的時間。


代碼段如下:

import numpy as np
import cv2
from matplotlib import pyplot as plt

imgname1 = 'E:/other/gakki101.jpg'
imgname2 = 'E:/other/gakki102.jpg'

sift = cv2.xfeatures2d.SIFT_create()

img1 = cv2.imread(imgname1)
gray1 = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY) #灰度處理圖像
kp1, des1 = sift.detectAndCompute(img1,None)  #des是描述子

img2 = cv2.imread(imgname2)
gray2 = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY)#灰度處理圖像
kp2, des2 = sift.detectAndCompute(img2,None) #des是描述子

hmerge = np.hstack((gray1, gray2)) #水平拼接
cv2.imshow("gray", hmerge) #拼接顯示為gray
cv2.waitKey(0)

img3 = cv2.drawKeypoints(img1,kp1,img1,color=(255,0,255)) #畫出特征點,并顯示為紅色圓圈
img4 = cv2.drawKeypoints(img2,kp2,img2,color=(255,0,255)) #畫出特征點,并顯示為紅色圓圈
hmerge = np.hstack((img3, img4)) #水平拼接
cv2.imshow("point", hmerge) #拼接顯示為gray
cv2.waitKey(0)
# BFMatcher解決匹配
bf = cv2.BFMatcher()
matches = bf.knnMatch(des1,des2, k=2)
# 調(diào)整ratio
good = []
for m,n in matches:
  if m.distance < 0.75*n.distance:
    good.append([m])

img5 = cv2.drawMatchesKnn(img1,kp1,img2,kp2,matches,None,flags=2)
cv2.imshow("BFmatch", img5)
cv2.waitKey(0)
cv2.destroyAllWindows()

網(wǎng)站題目:應(yīng)用OpenCV和Python進行SIFT算法的實現(xiàn)詳解-創(chuàng)新互聯(lián)
URL鏈接:http://muchs.cn/article42/coioec.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站導(dǎo)航網(wǎng)站制作、App設(shè)計關(guān)鍵詞優(yōu)化、Google、網(wǎng)站維護

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)公司