Python 绑定到 C. Liu 的光流框架
项目描述
这个包是 C. Liu 在博士期间开发的开源光流估计器的简单 Boost.Python 包装器。该代码最初被设想为在 Matlab 上运行。这是一个 Python/ Bob端口。如果您使用此代码,作者请您引用以下论文:
@thesis{Liu_PHD_2009,
title = {{Beyond Pixels: Exploring New Representations and Applications for Motion Analysis}},
author = {Liu, C.},
institution = {{Massachusetts Institute of Technology}},
year = {2009},
type = {{Ph.D. Thesis}},
}
如果您决定在您的出版物中使用此端口,我们恳请您也引用 Bob,作为开发此端口的基础软件框架:
@inproceedings{Anjos_ACMMM_2012,
author = {A. Anjos and L. El Shafey and R. Wallace and M. G\"unther and C. McCool and S. Marcel},
title = {Bob: a free signal processing and machine learning toolbox for researchers},
year = {2012},
month = oct,
booktitle = {20th ACM Conference on Multimedia Systems (ACMMM), Nara, Japan},
publisher = {ACM Press},
url = {http://publications.idiap.ch/downloads/papers/2012/Anjos_Bob_ACMMM12.pdf},
}
这是Liu 主页的链接,其中包含代码的详细信息,还显示了原始的 Matlab 端口。
安装
您可以在 setup.py 上添加对 xbob.optflow.liu 的依赖项,以自动下载并在您的卫星包中提供此包。如果 Bob 集中安装在您的机器上,这将很有效。
否则,您将需要告诉buildout如何在本地构建包以及如何找到 Bob。为此,只需在您的构建中添加一个配方,该配方将获取包并在本地编译它,将构建变量 前缀设置为安装 Bob 的位置(构建目录也可以使用)。例如:
[buildout] parts = xbob.optflow.liu <other parts here...> prefixes = /Users/andre/work/bob/build/debug ... [xbob.optflow.liu] recipe = xbob.buildout:develop ...
发展
要开发这些绑定,您需要在某处安装开源库Bob 。至少需要 Bob 的 1.1.0 版本。如果您自己编译 Bob 并将其安装在非标准位置,则需要记下指向该安装根目录的路径。
只需输入:
$ python bootstrap.py $ ./bin/buildout
如果 Bob 安装在非标准位置,请编辑文件buildout.cfg 以将根设置为 Bob 的本地安装路径。请记住使用与编译 Bob相同的 python 解释器,然后执行与上述相同的步骤。
用法
很简单,只需执行以下操作:
import bob from xbob.optflow.liu import cg_flow as flow ... (u, v, warped) = flow(image1, image2)
cg_flow方法接受更多参数。有关详细信息,请参阅其内置文档。
可重复的研究笔记
关于能够通过Bob支持的不同平台重现一致结果的一些说明。
Matlab 和 Bob/Python 端口之间的差异
我检测到这些 pythonic 绑定产生的输出与 Ce Liu 基于 Matlab 的实现之间存在不一致。在所有情况下,这些差异来自灰度转换和/或测试图像和电影的解压缩例程的差异。一旦以双精度灰度给出精确输入,两种绑定(我们的和 Ce Liu 的 Matlab 绑定)都会给出完全相同的输出。
这意味着如果您输入视频或 JPEG 图像等有损输入格式,您应该会遇到精度问题。如果您输入 HDF5 文件、Matlab .mat文件或任何其他不受有损压缩/解压缩影响的格式的数据,这些数据将被预先灰度化并以双精度浮点数存储,输出始终相同,没有无论您使用哪种环境。
如果输入不是双精度灰度的数据,则将其 (1) 转换为双精度表示,然后 (2) 进行灰度。这些步骤在两个绑定中都按此顺序执行。根据您使用的是哪个(Bob/Python与Matlab),结果会略有不同。流估计引擎输入的这种微小差异将使 Liu 的框架给出(希望略有)不同的输出。虽然输出应该具有可比性,但您的里程可能会有所不同。
新的基于 SOR 的实现
最近(2011 年 8 月),Ce Liu 引入了一个使用连续过度松弛 (SOR) 代替共轭梯度 (CG) 进行最小化的光流框架版本。新框架可能更快,但与旧的基于 CG 的框架相比,没有给出类似的结果。
如果您想试一试,请使用方法sor_flow而不是 cg_flow,如上所示。请注意,两种实现的默认值不同,遵循不同版本的 Matlab MEX 代码中预设的默认值。
特别是,避免将彩色图像提供给sor_flow。虽然这适用于cg_flow,但 sor_flow每次运行时都会给出不一致的结果。我建议在使用sor_flow之前对图像进行灰度处理。这样,运行之间的结果至少是一致的。我不确定他们的正确性。Ce Liu 已被告知并且应该尽快处理它(今天是 14.Nov.2012)。
要访问此实现,请使用xbob.optflow.liu.sor_flow。
访问 MATLAB 代码
安装包后,您将可以访问名为 matlab 的目录 ,其中包含由 Ce Liu 分发的代码,以及一些可用于生成测试样本的 Matlab 例程。要使用 Matlab 代码,您必须:
$ # matlab/cg_based => CG-based implementation $ # matlab/sor_based => SOR-based implementation $ cd matlab/cg_based/mex $ mex Coarse2FineTwoFrames.cpp OpticalFlow.cpp GaussianPyramid.cpp $ cd ..
至此,MEX 已编译并可以使用。您将在目录中找到 2 个例程:flowimage和flowmovie。它们可用于处理单个图像或电影文件。它们都生成HDF5文件,可用作此包的测试套件的测试输入,或用于检查(使用h5dump查看文件内容)。
以下是 Matlab 函数flowimage的使用示例:
$ matlab ... >> flowimage ../../xbob/optflow/liu/data/gray table .
这将生成一个名为table.hdf5的文件,其中包含为表格示例计算的流量,即图像table1.png和 table2.png之间。输入图像是预先进行灰度缩放的,并根据您的命令从目录../../xbob/optflow/liu/data/gray中获取。
您将在此目录和 ../../xbob/optflow/liu/data/gray目录中找到更多示例。
项目详情
xbob.optflow.liu-1.1.2.zip的哈希值
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 97a4178468cffd400bac79c78af6f5e7eb9fe0559b6d4c11b28409025982dd9c |
|
| MD5 | b6bf59123a92e21d09f0b65f386c0c0b |
|
| 布莱克2-256 | 65b6317f82cd6eacfe77b31addb946528e5471bf86495caa8bb421781384b836 |