我正在尝试使用Emgu CV C#跟踪移动的发光二极管。我对捕获的图像设置阈值,直到只有LED作为白色斑点/斑点。我使用了斑点分析/跟踪,它是有效的,但问题是,如果我移动光线太快,它就不能再跟踪它。如果我放慢速度,它就会起作用。有没有什么方法可以加快速度呢?
最后,我基本上需要使用LED在我的计算机上绘图。我还需要LED的位置/中心用于其他目的。
我用于斑点分析和跟踪的代码与Emgu.CV.Examples -->视频监控中的代码相同。
发布于 2011-07-14 23:18:26
嗯,是也不是。你可以检查你的代码并简化这个过程,这样你的图像处理就会花费尽可能少的时间,比如减少循环或计算。您可以更改计算机的硬件;具有更多核心的更快的处理器将允许更多的线程以更快的速度进行处理。你可以投资一块CUDA显卡,然后在上面进行处理,但是如果你的代码不是那么复杂,你的性能甚至可能会降低。建议使用高端显卡。
事实上,大部分时间都被浪费在了屏幕上显示结果上,通过消除这一点可以做出显着的改进。如果这些都不能提高您的性能,那么唯一的选择就是将您的分析算法转移到FPGA硬件设备上(实际上,这些都是基于自定义的过程),这是非常耗时的,而且如果您从来没有做过非常困难的事情。图像的实时处理很难实现和实现。一种可能的选择是欺骗XBOX Kinect实际上引入了复杂的算法来预测用户在两帧之间的移动。这就是游戏有时会跳跃的原因。
建议的路线是检查您的斑点跟踪例程,如果您正在使用Hough斑点跟踪,尝试自己的硬编码,并查看图像的行和列的总和,这将给出一个对应于X和Y位置的峰值,但因此只能使用1个LED。这可能会提高性能,因为您删除了Hough blob跟踪函数中涉及的隐藏进程。
其次,试着尽可能简单地改变你的阈值技术(如果你还没有改变),如果光线很亮,只需要从灰度图像中减去一个常数,比如250,除非你在明亮的房间里或其他光源下,否则就只剩下LED了。
我目前正在攻读图像处理的博士学位,所以我警告你,实现实时处理可能需要一生的时间。我还建议不要期望最好的结果,网络摄像头将以大约30帧每秒的速度获取图像,通过处理,你最多可以获得25帧每秒的图像,甚至可能低至10帧每秒。
标准LED的替代方案是红外LED,它为您的相机配备了适当的滤光器。这将允许在几乎没有背景噪声的情况下从LED看到一个斑点。有关示例,请查看Instructables.com。
希望能对克里斯有所帮助
https://stackoverflow.com/questions/5361876
复制相似问题