SiftDescriptorExtractor

时间:2011-07-24 05:53:51

标签: opencv sift

我有两个关于opencv SiftDescriptorExtractor的问题:

  1. 如何将描述符从cv::Mat转换为vector<float* >(第i行=第i个描述符)
  2. 如何定义SIFT描述符的大小(=维度)?
  3. 是的,我知道OpenCV参考,但是,我无法让它工作。有人可以把这里的最低工作量放在这里吗?

2 个答案:

答案 0 :(得分:6)

1 - 转换:

vector<float*> descriptor;
for(int i; i = 0; i < keypoints.size())
{
    descriptor.push_back(&keypoints.at<float>(i));
}

2-SIFT尺寸:

你不能像SIFT算法那样定义块,箱等的大小。你能做什么?你可以编写自己的筛选代码。这是一个很难的方法,但我鼓励你尝试一下。

答案 1 :(得分:1)

  1. 你可以访问cv :: Mat的每个元素并自己制作矢量。如果您想知道如何访问cv :: Mat
  2. 的元素,This可能会有所帮助
  3. 据我所知,OpenCV提供的SiftDescriptorExtractor无法做到这一点。 但是从http://blogs.oregonstate.edu/hess/code/sift/获取的OpenCV的SIFT实现 因此,您可以修改原始代码以更改描述符大小。通过修改SIFT描述符bin大小的常量,可以更改描述符大小。如果你想要更多,你应该阅读代码。代码得到了很好的评论,并基于Lowe的论文2004“尺度不变关键点的特殊图像特征”。