在我們提取到帶特徵點和得到特徵描述符後,接下來的工作就是將這些個特徵點進行匹配。
一、特徵點匹配位於feature2d的模組中所以在使用的時候應該在標頭檔案中加入:
#include\features2d\features2d.hpp>
在這個模組中用有三個類:
它們的繼承關係如下:
對於特徵點匹配有兩種方法:
(1) brute-force matcher (cv::bfmatcher)
brute-force matcher就是用暴力方法找到點集一中每個descriptor在點集二中距離最近的 descriptor。這個比較容易理解,這裡我們就不具體介紹了。
使用方法:
//bfmatcher 暴力匹配
vector
bfmatches;
ptrbfmatcher = descriptormatcher::create(2);
//ptrbmatcher = bfmatcher::create();
bfmatcher->match(descriptors1, descriptors2, bfmatches);
(2)flann-based matcher (cv::flannbasedmatcher)
flann-based matcher 使用快速近似最近鄰搜尋演算法尋找(用快速的第三方庫近似最近鄰搜尋演算法)
使用方法:
//flannbasedmatcher:
vector
flannmatches;
ptrflannmatcher = flannbasedmatcher::create();
flannmatcher->match(descriptors1, descriptors2, flannmatches);
二、兩種方法的比較:
此外,使用特徵提取過程得到的特徵描述符(descriptor)資料型別有的是float型別的,比如surfdescriptorextractor,
siftdescriptorextractor,有的是uchar型別的,比如說有orb,briefdescriptorextractor。對應uchar型別的匹配方式有:bruteforce,bruteforce。所以orb和brief特徵描述子只能使用bruteforce匹配法。
關於匹配的一些處理技巧參見:
特徵點提取opencv
opencv中提供了harris角點檢測的介面,即cv cornerharris 缺陷 角點是畫素級別的,速度較慢 dst cv2.cornerharris gray,2,3,0.04 img 資料型別為 float32 的輸入影象 blocksize 角點檢測中要考慮的領域大小 ksize sob...
OpenCV2 3 1特徵點提取
今天做特徵點匹配實驗,從網上找來了surf特徵點檢測程式,除錯也調通了,但是執行之後就是沒有結果出來,還會出現執行之後程式崩潰的問題,後來試了好多遍,發現是由於lib檔案有問題,雖然在屬性裡已經新增了,但是仍然鏈結不上。解決方法是在程式開始新增lib檔案,如下所示。include opencv2 o...
opencv特徵點匹配(暴力匹配優化)
1.knnmatch 方法,而k 1,返回一對匹配子,這個方法只返回最接近的距離的一對匹配子,當有足夠多的匹配子的時候,這種方法通常能夠產生最好的結果和最小的誤差。2.dmatch類 struct cv exports w dmatch 1 cv wrap dmatch int queryidx,i...