如何在 MATLAB、Octave、命令行和 C 中调用 VLFeat

更新时间

VLFeat 是一个用 C 实现的开源计算机视觉算法库,提供 MATLAB、Octave、命令行和 C 四种调用方式。选择哪种方式取决于你的工作环境:在 MATLAB 中做算法验证选 MATLAB 接口;没有 MATLAB 许可证可用 Octave;只需对图像跑单个算法可用命令行工具;要把算法嵌入原生程序则用 C API。以下按这四种环境分别说明入口、步骤和验证方法。

先了解 VLFeat 提供什么

VLFeat 专注图像理解与局部特征提取、匹配,包含的算法有:

  • 特征检测与描述:SIFT、Dense SIFT、MSER、HOG、LIOP、协变特征检测器
  • 聚类:k-means、整数 k-means(IKM)、层次整数 k-means(HIKM)、凝聚信息瓶颈(AIB)
  • 匹配:随机 kd 树与森林
  • 其他:Fisher Vector、VLAD、高斯混合模型、SLIC 与 quick shift 超像素、大规模 SVM 训练、距离变换、AP/ROC 曲线绘制

库用 C 编写以保证效率和兼容性,外层提供 MATLAB 接口,支持 Windows、Mac OS X 和 Linux。当前最新版本为 0.9.21(2018 年 8 月发布,属维护版本,修复了 vl_argparse 与 MatConvNet 的兼容性以及新版 macOS 的二进制文件)。

四种调用方式怎么选

方式 适合场景 入口
MATLAB 快速验证算法、教学、原型开发 MATLAB 命令 + MATLAB API 文档
Octave 无 MATLAB 许可证但想用脚本式接口 Octave 命令 + 对应使用说明
命令行 对图像直接跑某个算法,不写代码 命令行工具 + man pages
C 集成进原生程序、追求运行效率 C API 文档 + 编译指南

在 MATLAB 中调用

前提:本机已安装 MATLAB,并已下载 VLFeat 0.9.21 的对应平台包。

步骤:

  1. 从官网 Download 页面获取 0.9.21 的 Windows/Mac/Linux 包,解压到本地目录。
  2. 在 MATLAB 中把 VLFeat 的 toolbox 目录加入路径(官网 “Using from MATLAB” 页面给出具体设置方式)。
  3. 按教程调用函数,例如用 vl_sift 做 SIFT 检测与描述、vl_mser 做 MSER 检测、vl_hog 提取 HOG 特征。

验证:运行官网 Tutorials 中的 SIFT 检测器与描述子示例,能对一张测试图输出关键点坐标与描述子矩阵即表示配置成功。

常见卡点:路径未加对时函数报未定义;不同 MATLAB 版本对 MEX 文件兼容性有差异,遇到加载失败先确认下载的是与操作系统匹配的包。

在 Octave 中调用

前提:已安装 GNU Octave。

步骤:与 MATLAB 类似,把 VLFeat 加入 Octave 的搜索路径,然后调用同名函数。官网单独提供 “Using from Octave” 说明页,按该页操作即可。

验证:跑一个简单聚类示例,如 vl_kmeans 对随机数据聚类,检查返回的聚类中心数量与输入设定一致。

常见卡点:Octave 与 MATLAB 在部分语法和 MEX 接口上存在差异,若某函数在 Octave 下报错,先查该使用说明页是否列出限制。

用命令行工具

前提:已下载对应平台的二进制包。

步骤:官网 “Using from the command line” 页面说明如何直接调用命令行工具;每个工具在 man pages 中有独立说明,例如 sift、mser 对应的手册页给出参数含义。典型用法是对一张图片运行检测器并输出结果文件。

验证:对示例图片运行 sift,检查输出文件中是否包含检测到的关键点记录。

常见卡点:命令行工具的参数因算法而异,务必以对应 man page 为准,不要凭记忆拼参数。

在 C 程序中调用

前提:具备 C 编译环境(g++、Visual C++ 或 Xcode 均可),并已获取源码。

步骤:

  1. 从官网下载源码,按 “Compiling” 页面的说明在 UNIX-like 平台或 Windows 上编译。
  2. 在项目中包含 VLFeat 头文件并链接生成的库,调用 C API。C API 文档中每个算法都附有算法描述。
  3. 参考官网的 Xcode、Visual C++、g++ 配置说明设置工程。

验证:编译并运行官网 Example applications 中的示例(如 SIFT 匹配用于自动拼接),能输出匹配结果即表示集成成功。

常见卡点:编译失败多与平台工具链配置有关,优先对照 “Compiling on UNIX-like platforms” 或 “Compiling on Windows” 页面逐项检查。

文档与引用

  • 文档入口:MATLAB API、C API(含算法描述)、man pages、Tutorials 四类,官网均有链接。
  • 教程覆盖:局部特征框架、协变特征检测器、HOG、SIFT 检测器与描述子、Dense SIFT、LIOP、MSER、距离变换、Fisher Vector 与 VLAD、高斯混合模型、k-means、AIB、quick shift、SLIC、SVM、kd 树与森林、AP/ROC 绘制等。
  • 示例应用:Caltech-101 分类、SIFT 匹配自动拼接。
  • 学术引用:Vedaldi 与 Fulkerson 的 VLFeat 论文(2008),官网给出 BibTeX 条目,正式发表中引用该库时使用它。

如果你只是想在脚本里快速试一个算法,从 MATLAB 或 Octave 接口入手;如果目标是产品级集成,直接走 C API 并先跑通官方示例应用。