5

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

  1. 如何将描述符从转换cv::Matvector<float* >(第 i 行 = 第 i 个描述符)
  2. 如何定义 SIFT 描述符的大小(= 维度)?

是的,我知道 OpenCV 参考,但是,我无法让它工作。有人可以在这里放最低工作示例吗?

4

2 回答 2

6

1-转换:

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

2-SIFT 尺寸:

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

于 2012-09-28T07:24:29.747 回答
1
  1. 您可以访问 cv::Mat 的每个元素并自己制作向量。如果您想知道如何访问 cv::Mat 的元素,这可能会有所帮助
  2. 据我所知,您无法使用 OpenCV 提供的 SiftDescriptorExtractor 来做到这一点。但是 OpenCV 的 SIFT 实现取自http://blogs.oregonstate.edu/hess/code/sift/ 所以你可以修改原始代码来改变描述符大小。通过修改 SIFT 描述符 bin 大小的常量,您可以更改描述符大小。如果你想要更多,你应该阅读代码。代码得到了很好的评论,并基于 Lowe 的论文 2004 Distincttive Image Feature From Scale-Invariant Keypoints。
于 2011-10-06T14:24:06.217 回答