specifications - 如何确定光流所需的处理器速度?

标签 specifications microprocessors opticalflow

我想使用光流系统来获取周围环境的速度。我读过有关光流如何工作的论文,但它们没有处理有关光学传感器的细节。

我的问题是:如何确定执行光流分析需要多少计算能力?

我想使用低功耗系统(例如微 Controller ),但我不知道这样的系统可以使用哪种相机。我的意思是,它可以是彩色的还是必须是黑白的?卷帘快门还是全局快门?哪个帧速率或像素数?

我想自己指定系统,但由于不知道这些相机属性如何影响处理负载,我不知道从哪里开始。

最佳答案

正如 Chuck 在评论中已经说过的那样。你首先需要从某件事开始。光流计算实际上取决于您使用它的目的以及您想要实现的目标。对于实时应用程序,您可能需要考虑使用更快的处理器(尽管如此)。

继续我的回答。

Opticalflow 计算性能取决于几个主要因素:

  • 您选择的光流方法(密集稀疏),您可以阅读有关它的更多信息 herehere 。当然,您不仅应该考虑稀疏比密集更快,而且在某些情况下稀疏可能不太准确。同样,这取决于您想要实现的目标。
    此外,您还会看到不同的光流算法。有些可能比其他更快。算法有Lucas-Kanade、Horn-Schunck、TVL1、Farneback等多种。
  • OpenCV 等库中的大多数光流方法都使您能够更改一些参数,以便在精度和精度之间进行权衡。表现。请参阅 this 并检查 OpenCV 方法,例如 thisthis - 查看不同的参数。

  • 图像的分辨率。较小的图像通常意味着更快的计算。

您可能还需要考虑的一些事情:

  • 如果您使用的处理器具有多核,请确保在光流计算中使用所有内核。有些图书馆可能已经为您做到了这一点,但在某些情况下您需要自己做。看看我在 this post 中的问题和答案,它可能会给你一些想法,并帮助你开始处理这种情况。
  • 如果您想要更准确的光流结果,您必须使用全局快门相机。卷帘快门相机(例如大多数网络摄像头)会给您带来不希望出现的额外错误。
  • 您不需要彩色图像,如果您有灰度相机那就更好了。如果没有,您需要将其转换为灰度(不是黑白)以获得更快的性能。
  • 某些库(例如 OpenCV)可以选择(在某些情况下)在 GPU 上运行这些算法。如果使用 GPU 是一种选择,您可能也需要考虑这一点。

根据我自己的经验,性能提升的主要因素是将分辨率从 640x480 更改为 320x240 甚至 160x120。就我而言,这并没有真正影响准确性。
我使用了带有 Odroid U3 算法的 OpenCV PyrLK 迷你电脑和 320x240 分辨率的输入帧。应用 here 所描述的内容(将图像分割为 4 部分以进行并行计算)后,效果非常好(实时)。

关于specifications - 如何确定光流所需的处理器速度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38614074/

相关文章:

assembly - 8086微处理器的堆栈溢出

c++ - 这在 MSDN 文档中是错误的吗?

opencv - 光流与深度关系的本质

c++ - 基于 OpenCV C++ 光流的分割代码抛出异常

python - 如何在 OpenCV 中计算光流幅度

memory - 在什么情况下内存是字节或字可寻址的,为什么

jsf - #{resource} EL 在哪里指定?

domain-driven-design - 领域驱动设计; ValueObject 可以包含不变量或规范吗?

javascript - Date.prototype.toLocaleTimeString() 中的 hourCycle 选项有什么区别

javascript - 为什么等待和异步有效的变量名?