我已经阅读了一些关于SIFT的文献,并观看了一些视频。我理解SIFT背后的大多数概念,但有一件令我困惑的事情是关于SIFT描述符。
在SIFT中:
16 x 16
像素。16 x 16
块划分为16个4 x 4
块8 bin
块4 x 4
直方图
4 x 4 x 8 = 128
维度SIFT描述符。
我的困惑:
128 columns
和1 row
.....为什么??? 128 columns
和1 row
一个关键点,那么如果我得到50个关键点,那么它不应该是50 rows
和128 colmuns
矩阵吗?答案 0 :(得分:2)
opencv的2.4.8源代码表示你应该得到128个描述符矩阵,其中n是关键点的数量。您可以看到 calcDescriptors()通过重新生成 descriptors 行为每个关键点创建描述符。
static void calcDescriptors(const vector<Mat>& gpyr, const vector<KeyPoint>& keypoints,
Mat& descriptors, int nOctaveLayers, int firstOctave )
{
int d = SIFT_DESCR_WIDTH, n = SIFT_DESCR_HIST_BINS;
for( size_t i = 0; i < keypoints.size(); i++ )
{
// [...]
// some unrelevant code
calcSIFTDescriptor(img, ptf, angle, size*0.5f, d, n, descriptors.ptr<float>((int)i));
}
}