分析opencv中keypoint數據結構的相關信息,找到opencv的document(http://docs.opencv.org/java/org/opencv/features2d/KeyPoint.html)。可以看到KeyPoint這數據結構中有如下數據結構:
angle:角度,表示關鍵點的方向,通過Lowe大神的論文可以知道,為了保證方向不變形,SIFT算法通過對關鍵點周圍鄰域進行梯度運算,求得該點方向。-1為初值。
class_id:當要對圖片進行分類時,我們可以用class_id對每個特征點進行區分,未設定時為-1,需要靠自己設定
octave:代表是從金字塔哪一層提取的得到的數據。
pt:關鍵點點的坐標
response:響應程度,代表該點強壯大小,一開始我也理解不了,看到兩位stackoverflow大大的原話(http://stackoverflow.com/questions/10328298/what-does-size-and-response-exactly-represent-in-a-surf-keypoint,http://stackoverflow.com/questions/24699495/opencv-keypoints-response-greater-or-less?lq=1)——response代表着該關鍵點how good,更確切的說,是該點角點的程度。瞬間明白。
size:該點直徑的大小
注意一個問題:keypoint只是保存了opencv的sift庫檢測到的特征點的一些基本信息,也就上面所說的這些,但sift所提取出來的特征向量其實不是在這個里面,特征向量通過SiftDescriptorExtractor 提取,結果放在一個Mat的數據結構中。這個數據結構才真正保存了該特征點所對應的特征向量。具體見后文對SiftDescriptorExtractor 所生成的對象的詳解。