SiftDescriptorExtractor對應於SIFT算法中特征向量提取的工作,通過他對關鍵點周圍鄰域內的像素分塊進行梯度運算,得到128維的特征向量。具體有如下幾個操作:
0、首先,我們假設在之前關鍵點提取的步驟中,我們對一個三角形提取關鍵點,檢測到其中一個關鍵點的坐標為三角形的一個角(如下面用紅圈圈出的),如下圖
放大看,假設檢測到該關鍵點的方向如下圖:
1、將關鍵點周圍的像素旋轉到一個統一的方向,以保證方向不變性。如下圖
2、將這些像素分成4X4的小塊
對每個格子進行分析,將格子中的像素計算梯度,映射到8個方向上,對於每一個格子,可以得到一個8維的向量,對於一個關鍵點周圍16個格子,則得到了16X8=128維的向量,這就是一個關鍵點特征向量。
使用舉一個實際的例子分析:
用opencv對一個三角形進行特征點檢測,得到如下結果:
提取特征向量,得到如下結果:
這幅圖的每一行就是一個128維的特征向量,維度用0-255表示。黑一些就是小,白就是大。
粗略可以看出,這些特征點排布較為相似,因為都是角
再來一個: