應(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://jinyejixie.com/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)
猜你還喜歡下面的內(nèi)容