如何在 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 的对应平台包。
步骤:
- 从官网 Download 页面获取 0.9.21 的 Windows/Mac/Linux 包,解压到本地目录。
- 在 MATLAB 中把 VLFeat 的
toolbox目录加入路径(官网 “Using from MATLAB” 页面给出具体设置方式)。 - 按教程调用函数,例如用
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 均可),并已获取源码。
步骤:
- 从官网下载源码,按 “Compiling” 页面的说明在 UNIX-like 平台或 Windows 上编译。
- 在项目中包含 VLFeat 头文件并链接生成的库,调用 C API。C API 文档中每个算法都附有算法描述。
- 参考官网的 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 并先跑通官方示例应用。