【问题标题】:OpenCV Python and Histogram of Oriented GradientOpenCV Python和定向梯度直方图
【发布时间】:2011-11-30 07:58:49
【问题描述】:

有没有关于在 Python OpenCV 中使用 HOGDescriptor 功能的有用文档?我已经阅读了 C++ 文档,但是 Python 版本的功能不同,我无法仅仅通过修补来弄清楚。

最具体地说,我正在 Python 中寻找一个 OpenCV 命令,该命令将图像和像素位置作为输入(可能还有一些关于检测窗口大小的参数),然后只返回一个包含 HOG 特征的 Python 数组向量(即列表或 NumPy 数组等,其中列表的第 j 个元素是定向梯度直方图中的第 j 个直方图分量)。

我的目标是将这些直方图输入 scikits.learn SVM 管道(这样我就可以避免 OpenCV SVM 训练),但要做到这一点,我需要实际的特征向量本身,而不是那种 HOG 处理链管道的东西OpenCV 似乎使用。

HOG 代码的任何其他 Python 实现也可以。我需要一些相当有效的东西来与我自己编写的另一个代码库进行比较。

【问题讨论】:

  • 注意:具有易于使用的命令行参数的合理 C++ 可执行文件也可以工作,我可以将其包装到我的 Python 文件中。如果您知道任何具有高效 HOG 代码的项目,这可能会有所帮助。

标签: python image-processing opencv numpy gradient


【解决方案1】:

查看http://sourceforge.net/projects/hogtrainingtuto/?_test=beta 了解一些 HOG python 代码和一堆 C、cpp、java 实现。至于python和opencv的真实文档,我也很茫然。但这应该对您有所帮助

【讨论】:

  • 我在从该链接下载的存档文件中看不到任何 Python 代码。唯一与 HOG 相关的是一个名为“cvHogFeatureCal”的可执行文件,但它没有我能找到的文档。另一件事是,OpenCV 通常将分类器实现为级联,用户输入硬负图像,然后输入真正图像进行训练,OpenCV 自动一路生成分类器。我特别需要避免这种情况,只需劫持 HOG 特征向量,然后使用不同的软件 (scikits.learn) 进行分类器训练。
【解决方案2】:

来点Matlab作为灵感怎么样,属于这个article

【讨论】:

  • 谢谢!我可能可以自己将其翻译成 Python。不过,将其移植到其他语言可能会更困难。
【解决方案3】:

'Poselets' 实现 here 有一个 HOG 描述符的 C 实现,虽然是用 matlab 编写的,但可以适应使用 ctypes 和 numpy 与 python 一起运行。

您可以删除所有 mex 例程,并在 C 函数中将输入和输出数组声明为 float *

您确实需要确保您的 numpy 数组是 Fortran 连续的。这可以通过以下方式实现:

image = image.copy(order='F', dtype = float32)

【讨论】:

  • 我经常使用 Poselet 的东西。基于他们的浏览器注释工具的 Java 代码是多么无证和难以理解,我倾向于只使用顶帖中的 Matlab 代码。 Poselet 的想法很棒,但是 (a) 它在 Matlab 中,并且 (b) 他们不想通过为他们的代码提供任何支持来帮助其他科学家,这让我不太愿意使用他们的东西。翻译来自 Maurits 的顶级 Matlab 例程可能同样需要大量工作。
  • 公平地说,我没有对他们的实现进行太多试验,我想主要是因为它缺乏文档!但是我已经使用他们上面概述的 HOG 例程构建了类似的东西,并且效果很好。如果速度是优先考虑的因素,那么利用他们的 C 例程可能是比 Python 中的嵌套循环更好的解决方案。
【解决方案4】:

这有点晚了,但为了将来参考,scikit-image 有一个HOG 的实现。这是一个可以提取给定图像的方向梯度直方图的函数。

【讨论】:

  • 是的,在它被 scikits.image 接受之前,我已经获得了它的高级副本。我发现它只是不够好或不够快。另一件事是界面太难使用。例如,Dalal 和 Triggs HoG 代码接受图像中的关键点列表,而 scikits.image 版本只能做补丁。我最终只是编写了自己的代码。我为 Python 编写了一个普通的“香草”HoG,以及我自己的金字塔形 HoG 版本。最后,我在 PyCUDA 中实现了两个 GPU 版本。您可以找到链接的代码here
猜你喜欢
  • 2017-12-10
  • 2011-08-01
  • 2013-06-22
  • 2015-01-21
  • 2013-11-08
  • 2014-01-27
  • 1970-01-01
  • 2012-07-15
相关资源
最近更新 更多