我想使用光流系统来获取周围环境的速度。我读过有关光流如何工作的论文,但它们没有处理有关光学传感器的细节。
我的问题是:如何确定执行光流分析需要多少计算能力?
我想使用低功耗系统(例如微 Controller ),但我不知道这样的系统可以使用哪种相机。我的意思是,它可以是彩色的还是必须是黑白的?卷帘快门还是全局快门?哪个帧速率或像素数?
我想自己指定系统,但由于不知道这些相机属性如何影响处理负载,我不知道从哪里开始。
最佳答案
正如 Chuck 在评论中已经说过的那样。你首先需要从某件事开始。光流计算实际上取决于您使用它的目的以及您想要实现的目标。对于实时应用程序,您可能需要考虑使用更快的处理器(尽管如此)。
继续我的回答。
Opticalflow 计算性能取决于几个主要因素:
- 您选择的光流方法(密集或稀疏),您可以阅读有关它的更多信息 here 和 here 。当然,您不仅应该考虑稀疏比密集更快,而且在某些情况下稀疏可能不太准确。同样,这取决于您想要实现的目标。
此外,您还会看到不同的光流算法。有些可能比其他更快。算法有Lucas-Kanade、Horn-Schunck、TVL1、Farneback等多种。 OpenCV 等库中的大多数光流方法都使您能够更改一些参数,以便在精度和精度之间进行权衡。表现。请参阅 this 并检查 OpenCV 方法,例如 this 和 this - 查看不同的参数。
图像的分辨率。较小的图像通常意味着更快的计算。
您可能还需要考虑的一些事情:
- 如果您使用的处理器具有多核,请确保在光流计算中使用所有内核。有些图书馆可能已经为您做到了这一点,但在某些情况下您需要自己做。看看我在 this post 中的问题和答案,它可能会给你一些想法,并帮助你开始处理这种情况。
- 如果您想要更准确的光流结果,您必须使用全局快门相机。卷帘快门相机(例如大多数网络摄像头)会给您带来不希望出现的额外错误。
- 您不需要彩色图像,如果您有灰度相机那就更好了。如果没有,您需要将其转换为灰度(不是黑白)以获得更快的性能。
- 某些库(例如 OpenCV)可以选择(在某些情况下)在 GPU 上运行这些算法。如果使用 GPU 是一种选择,您可能也需要考虑这一点。
根据我自己的经验,性能提升的主要因素是将分辨率从 640x480 更改为 320x240 甚至 160x120。就我而言,这并没有真正影响准确性。
我使用了带有 Odroid U3 算法的 OpenCV PyrLK 迷你电脑和 320x240 分辨率的输入帧。应用 here 所描述的内容(将图像分割为 4 部分以进行并行计算)后,效果非常好(实时)。
关于specifications - 如何确定光流所需的处理器速度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38614074/