jus*_*rld 5 c++ opencv matrix vlfeat
我希望这个问题不是 OT。
我正在使用VLFeat 实现和来自不同实现的SIFT描述符来实现VLAD编码器,以比较它们(OpenCV、VLFeat、OpenSIFT)。
这应该是 C++ 中的高性能应用程序(我知道 SIFT 效率非常低,我正在实现它的并行版本)。
现在,VLAD 想要将指向一组连续描述符(数学向量)的指针作为输入。关键是通常这个 SIFT 描述符被表示为一个矩阵,所以更容易管理它们。
所以假设我们有一个由 3 个维度的 3 个描述符组成的矩阵(为了简单起见,我使用这些数字,实际上它是 128 个维度的数千个描述符):
1 2 3
4 5 6
7 8 9
Run Code Online (Sandbox Code Playgroud)
我需要vl_vlad_encode用指针来做饲料:
1 2 3 4 5 6 7 8 9
Run Code Online (Sandbox Code Playgroud)
一个简单的解决方案是将描述符保存在一个cv::Mat m对象中,然后传递m.data给vl_vlad_encode.
但是我不知道是否cv::Mat是有效的矩阵表示。例如,Eigen::Matrix是另一种选择(我认为使用这个对象很容易获得上面的表示),但我不知道哪个实现更快/更有效,或者是否有任何其他原因,因为我应该更喜欢一个而不是另一个.
另一种可能的替代方法是使用std::vector<std::vector<float>> v,但我不知道使用v.data()我是否会获得上面的表示而不是:
1 2 3 *something* 4 5 6 *something* 7 8 9
显然*something*会搞砸vl_vlad_encode。
任何其他建议都非常受欢迎!
除非你做了一些奇怪的事情(详见这里), aMat中的数据保证是连续的。您可以将 aMat视为 a float*(或其他类型)的轻量级包装器,可以更轻松地访问数据。所以它和指针一样有效,但有一些很好的抽象。
如果您需要高效地从/到文件加载/保存,您可以Mat使用matread和matwrite以二进制格式保存。
| 归档时间: |
|
| 查看次数: |
677 次 |
| 最近记录: |