我正在尝试使用Emgu CV C#跟踪移动的LED。我对捕获的图像进行阈值处理,直到我只将LED作为白点/斑点。我已经使用了blob分析/跟踪它可以工作,但问题是,如果我将光线移动太快,它就无法再跟踪它。如果我减速,它会起作用。有什么方法可以加快速度吗?
最后,我基本上需要使用LED在我的电脑上画画。而且我还需要LED的位置/中心用于其他目的。
我用于blob分析和跟踪的代码与Emgu.CV.Examples中的代码相同 - >视频监控。
答案 0 :(得分:0)
好的,没有。您可以检查代码并简化流程,以便您的图像处理尽可能少的时间,即减少循环或计算。你可以改变电脑的硬件;具有更多内核的更快的处理器将允许更多线程以更快的速度进行处理。您可以投资购买CUDA显卡并对其进行处理,但如果您的代码不那么复杂,您的性能甚至可能会降低。建议使用高端显卡。
事实上大部分时间浪费在屏幕上显示结果可以通过消除这一点来实现显着的改进。如果这些都没有改善您的性能,那么唯一的选择是将您的分析算法移动到FPGA硬件设备(实际上这些是基于自定义的流程),这是时间昂贵的,如果您从未做过类似的事情,那就非常困难。图像的实时处理很难实现和实现。可能的替代方案是欺骗XBOX Kinect实际上引入了复杂的算法来预测用户在帧之间的移动。这就是为什么游戏玩法有时候是跳跃的原因。
建议的路线是检查blob跟踪例程,如果你正在使用Hough blob跟踪尝试硬编码你自己查看图像的行和列的总和,这将给你一个对应于X的峰值但是,Y位置只能使用1个LED。当您删除Hough blob跟踪功能中涉及的隐藏进程时,这可能会提高性能。
其次尝试尽可能简单地改变你的阈值技术(如果你还没有),如果灯亮,只需从灰度图像中减去250的常数,这将有希望只是离开LED,除非你在明亮的房间或这些另一个光源。
我目前正在进行图像处理的PHD,所以我警告你实现实时处理会花费一生的时间。我还建议不要期望网络摄像头以大约30 fps的速度获取最佳效果,并且通过处理,你最多可以获得25 fps,甚至可能低至10 fps。
标准LED的替代品是红外LED,带有适合您相机的滤光片。这将允许从LED看到一个blob,几乎没有背景噪音。查看Instructables.com的示例。
希望有一些帮助 克里斯