这更像是我想与社区讨论的事情,而不是我寻求绝对答案的事情。
我正在尝试从头开始实现基于GMM的背景扣除算法。显然,OpenCV已经实现良好(MOG2)。我仍想从头开始实现它,因为我想测试一些OpenCV不提供访问的参数。但是,我的实现在4k图像上运行时非常慢,并且占用了大量内存,而OpenCV每秒可以实现约5-10张图像甚至更快,并且不占用太多内存。我并不感到惊讶,OpenCV比我的要快得多,但仍然对它的实现方式感到好奇。
所以这是我的想法:
GMM方法是构建高斯混合体来描述每个像素的背景/前景。话虽如此,每个像素将具有3-5个关联的3维高斯分量。我们可以通过对不同通道使用共享方差而不是协方差来简化计算。然后,对于每个高斯分量,我们至少应具有3个均值,1个方差和1个权重参数。如果我们假设每个像素将保持3个分量。读取图像时,这大约是4000 * 2000 * 3 *(3 + 1 + 1)个参数。
用于更新GMM的计算,尽管单个像素不是很复杂,但是用于计算整个4000 * 2000像素的总时间仍然非常昂贵。
当我在没有图形卡的Mac上进行测试时,我认为CUDA不会加速OpenCV MOG2。速度仍然很快。
所以我的问题是:
加:
这可能是一个奇怪的问题...但是,对此我表示感谢。