SiftDescriptorExtractor

mor*_*rph 5 opencv sift

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

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

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

Jav*_*ock 6

1 - 转换:

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

2尺寸的SIFT:

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


小智 1

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