国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

opencv python 特征匹配

macg0406 / 2723人閱讀

摘要:匹配器匹配非常簡單,首先在第一幅圖像中選取一個關鍵點然后依次與第二幅圖像的每個關鍵點進行描述符距離測試,最后返回距離最近的關鍵點對于匹配器,首先我們必須使用創建對象。

Feature Matching

Brute-Force匹配器

Brute-Force匹配非常簡單,首先在第一幅圖像中選取一個關鍵點然后依次與第二幅圖像的每個關鍵點進行(描述符)距離測試,最后返回距離最近的關鍵點.

對于BF匹配器,首先我們必須使用cv2.BFMatcher()創建BFMatcher對象。它需要兩個可選的參數.

第一個是normType,它指定要使用的距離測量,默認情況下,它是cv2.NORM_L2.它適用于SIFT,SURF等(cv2.NORM_L1也在那里).對于基于二進制字符串的描述符,如ORB,BRIEF,BRISK等,應使用cv2.NORM_HAMMING,使用漢明距離作為度量,如果ORB使用WTA_K == 3or4,則應使用cv2.NORM_HAMMING2.

crossCheck:默認值為False。如果設置為True,匹配條件就會更加嚴格,只有到A中的第i個特征點與B中的第j個特征點距離最近,并且B中的第j個特征點到A中的第i個特征點也是最近時才會返回最佳匹配,即這兩個特征點要互相匹配才行.

兩個重要的方法是BFMatcher.match()BFMatcher.knnMatch(), 第一個返回最佳匹配, 第二種方法返回k個最佳匹配,其中k由用戶指定.

使用cv2.drawMatches()來繪制匹配的點,它會將兩幅圖像先水平排列,然后在最佳匹配的點之間繪制直線。如果前面使用的BFMatcher.knnMatch(),現在可以使用函數cv2.drawMatchsKnn為每個關鍵點和它的個最佳匹配點繪制匹配線。如果要選擇性繪制就要給函數傳入一個掩模.

Brute-Force Matching with ORB Descriptors
import numpy as np
import cv2
import matplotlib.pyplot as plt

img1 = cv2.imread("img.jpg",0)          # queryImage
img2 = cv2.imread("img1.jpg",0) # trainImage

# Initiate ORB detector
orb = cv2.ORB_create()

# find the keypoints and descriptors with ORB
kp1, des1 = orb.detectAndCompute(img1,None)
kp2, des2 = orb.detectAndCompute(img2,None)

# create BFMatcher object
bf = cv2.BFMatcher(cv2.NORM_HAMMING, crossCheck=True)

# Match descriptors.
matches = bf.match(des1,des2)

# Sort them in the order of their distance.
matches = sorted(matches, key = lambda x:x.distance)

# Draw first 10 matches.
img3 = cv2.drawMatches(img1,kp1,img2,kp2,matches[:10],None, flags=2)

plt.imshow(img3),plt.show()

Matcher對象

matches = bf.match(des1,des2)行的結果是DMatch對象的列表。 此DMatch對象具有以下屬性:
?DMatch.distance - 描述符之間的距離。 越低越好。
?DMatch.trainIdx - 訓練描述符中描述符的索引
?DMatch.queryIdx - 查詢描述符中描述符的索引
?DMatch.imgIdx - 訓練圖像的索引

Brute-Force Matching with SIFT Descriptors and Ratio Test
import numpy as np
import cv2
import matplotlib.pyplot as plt

img1 = cv2.imread("img.jpg",0)          # queryImage
img2 = cv2.imread("img1.jpg",0) # trainImage

# Initiate SIFT detector
sift = cv2.xfeatures2d.SIFT_create()

# find the keypoints and descriptors with SIFT
kp1, des1 = sift.detectAndCompute(img1,None)
kp2, des2 = sift.detectAndCompute(img2,None)

# BFMatcher with default params
bf = cv2.BFMatcher()
matches = bf.knnMatch(des1,des2, k=2)

# Apply ratio test
good = []
for m,n in matches:
    if m.distance < 0.75*n.distance:
        good.append([m])

# cv.drawMatchesKnn expects list of lists as matches.
img3 = cv2.drawMatchesKnn(img1,kp1,img2,kp2,good,None,flags=2)

plt.imshow(img3),plt.show()

基于FLANN的Matcher

FLANN 代表 Fast Library for Approximate Nearest Neighbors. 它包含一組算法,這些算法針對大型數據集中的快速最近鄰搜索和高維特征進行了優化.對于大型數據集,它比BFMatcher工作得更快.

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

img1 = cv2.imread("img.jpg",0)          # queryImage
img2 = cv2.imread("img1.jpg",0) # trainImage

# Initiate SIFT detector
sift = cv2.xfeatures2d.SIFT_create()

# find the keypoints and descriptors with SIFT
kp1, des1 = sift.detectAndCompute(img1,None)
kp2, des2 = sift.detectAndCompute(img2,None)

# FLANN parameters
FLANN_INDEX_KDTREE = 1
index_params = dict(algorithm = FLANN_INDEX_KDTREE, trees = 5)
search_params = dict(checks=50)   # or pass empty dictionary

flann = cv2.FlannBasedMatcher(index_params,search_params)

matches = flann.knnMatch(des1,des2,k=2)

# Need to draw only good matches, so create a mask
matchesMask = [[0,0] for i in range(len(matches))]

# ratio test as per Lowe"s paper
for i,(m,n) in enumerate(matches):
    if m.distance < 0.7*n.distance:
        matchesMask[i]=[1,0]

draw_params = dict(matchColor = (0,255,0),
                   singlePointColor = (255,0,0),
                   matchesMask = matchesMask,
                   flags = 0)

img3 = cv2.drawMatchesKnn(img1,kp1,img2,kp2,matches,None,**draw_params)

plt.imshow(img3,),plt.show()

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/42073.html

相關文章

  • opencv python BRIEF描述子

    摘要:理論我們知道使用向量作為描述符,由于它使用浮點數,因此基本上需要個字節,類似地,也至少需要個字節對于,為數千個特征創建這樣的向量需要大量的內存,這對于資源約束應用程序尤其是嵌入式系統是不可行的,內存越大,匹配所需的時間越長實際匹配可能不 BRIEF (Binary Robust Independent Elementary Features) 理論 我們知道SIFT使用128-dim...

    Sanchi 評論0 收藏0
  • opencv python 使用特征匹配和單應性查找對象

    摘要:為了解決這個問題,算法使用和可以通過參數來設定所以好的匹配提供的正確的估計被稱為,剩下的被稱為返回一個掩模,這個掩模確定了和點 Feature Matching + Homography to find Objects 聯合使用特征提取和 calib3d 模塊中的 findHomography 在復雜圖像中查找已知對象. 之前在一張雜亂的圖像中找到了一個對象(的某些部分)的位置.這些...

    BDEEFE 評論0 收藏0
  • 機器視覺、模式識別庫匯總

    摘要:十開放模式識別項目開放模式識別項目,致力于開發出一套包含圖像處理計算機視覺自然語言處理模式識別機器學習和相關領域算法的函數庫。 一、開源生物特征識別庫 OpenBROpenBR 是一個用來從照片中識別人臉的工具。還支持推算性別與年齡。使用方法:$ br -algorithm FaceRecognition -compare me.jpg you.jpg二、計算機視覺庫 OpenCVOpenC...

    habren 評論0 收藏0
  • opencv python SIFT(尺度不變特征變換)

    摘要:理論前面講的角點檢測器中的角點在旋轉的圖像中也是角點,但是縮放呢如果縮放圖像,則角可能不是角例如,檢查下面的簡單圖像,當在同一窗口中放大時,小窗口內的小圖像中的角是平坦的所以角點檢測器不是尺度不變的所以,在年,不列顛哥倫比亞大學的在他的論 Introduction to SIFT (Scale-Invariant Feature Transform) 理論 前面講的Harris角點檢...

    marek 評論0 收藏0

發表評論

0條評論

macg0406

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<