懶了很久,還有最後一點兒,全部整理完~
1、sifi運算元使用流程:
初始化sift向量,呼叫detect()方法識別兩張各自的特徵點;
使用sift的compute()方法計算計算兩張各自特徵點的特徵描述符;
使用匹配器matcher進行特徵描述符匹配(bf與flann),以其中一幅為模板,在另一幅中尋找匹配的特徵點;
匹配結果儲存在dmatch結構體變數中,設定距離閾值對匹配結果進行篩選,得到好的匹配點;
使用drawmatch()方法進行繪製,顯示匹配結果;
2、bf暴力匹配器在emgucv中通過bfmatcher類進行實現,使用add()
方法新增模板的特徵描述符,使用 knnmatch() 方法尋找計算另一幅影象中的k個匹配特徵點;
3、可以參考:
bf匹配:
using system;
using system.collections.generic;
using system.linq;
using system.text;
using system.threading.tasks;
using emgu.cv;
using emgu.cv.cvenum;
using emgu.cv.structure;
using emgu.util;
using emgu.cv.util;
using system.drawing;
using emgu.cv.xfeatures2d;
//包含sift類
using emgu.cv.features2d;
//包含features2dtoolbox類
namespace lesson33
if(matches[i][0
].distance < min_dist)
}//對bf匹配結果進行篩選
vectorofvectorofdmatch good_matches =
newvectorofvectorofdmatch()
;for
(int i =
0; i < matches.size;i++)}
//繪製匹配點
mat result =
newmat()
; features2dtoolbox.
drawmatches
(srcimg1, vkeypoint1, srcimg2, vkeypoint2, good_matches,
result,
newmcvscalar(0
,255,0
),newmcvscalar(0
,0,255))
;//顯示匹配結果
cvinvoke.
imshow
("match-result"
, result)
; cvinvoke.
waitkey(0
);}}
}
flann匹配:
using system;
using system.collections.generic;
using system.linq;
using system.text;
using system.threading.tasks;
using emgu.cv;
using emgu.cv.cvenum;
using emgu.cv.structure;
using emgu.util;
using emgu.cv.util;
using system.drawing;
using emgu.cv.xfeatures2d;
//包含sift類
using emgu.cv.features2d;
//包含features2dtoolbox類
using emgu.cv.flann;
//包含快速最鄰近匹配
namespace lesson33
}}
bf匹配:
flann匹配:
SIFT特徵匹配
影象特徵分很多種,例如顏色特徵 紋理特徵 形狀特徵 空間關係特徵等。常用的特徵為sift特徵。sift scale invariantfeaturetransform,sift 具有以下特性 1 對平移 旋轉 伸縮 亮度 遮擋和雜訊等具有良好的不變性,對視覺變化 仿射變換也有一定的穩定性。2 即使少...
RANSAC用於SIFT特徵匹配
關於ransac 演算法的基本思想,可從網上搜尋找到,這裡只是ransac用於sift特徵匹配篩選時的一些說明。ransac演算法在sift特徵篩選中的主要流程是 1 從樣本集中隨機抽選乙個ransac樣本,即4個匹配點對 2 根據這4個匹配點對計算變換矩陣m 3 根據樣本集,變換矩陣m,和誤差度量...
利用SIFT進行特徵匹配
sift演算法是一種基於尺度空間的演算法。利用sift提取出的特徵點對旋轉 尺度變化 亮度變化具有不變性,對視角變化 仿射變換 雜訊也有一定的穩定性。sift實現特徵的匹配主要包括四個步驟 1 提取特徵點 構建尺度空間 模擬影象的多尺度特徵。經證實,唯一可能的尺度空間核是高斯函式。用l x,y,表示...