我必须在MATLAB中实现一个基本的跟踪程序,给定一组来自视频游戏的帧,它会分析每个帧,然后在每个对象周围创建一个边界框。我已经使用函数regionprops
来获取每个对象的边界框的坐标,并使用函数rectangle
将它们可视化,如下所示:
for i = 1:size( frames,2 )
CC{1,i} = findConnectedComponents( frames{1,i} );
stats{1,i} = regionprops( 'struct',CC{1,i},'BoundingBox','Centroid' );
imshow( frames{1,i} ),hold on
for j = 1:size(stats{1,i},1)
r = rectangle( 'Position',stats{1,i}(j).BoundingBox );
r.FaceColor = [0 0.5 0.5 0.45];
end
end
这很好用,但我想更进一步,能够将静态对象与移动对象区分开来。我想到使用质心来看每个物体,如果它在每个帧中是不同的(这意味着物体在移动),但在每个图像中我有不同数量的物体。
例如,如果我在Space Invaders上尝试此操作,当你杀死一个外星人时它会消失,所以减少了对象的数量。此外,每个射弹都是一个单独的物体,在游戏的不同时刻可能会有不同数量的射弹。
所以我的问题是,我怎样才能根据物体移动与否来对物体进行分类,并用两种不同的颜色对它们进行涂漆?
答案 0 :(得分:0)
如果背景一致,使用optical flow非常适合您。
基本思路非常简单,考虑减去两个连续的帧,并使用它来获取在帧之间移动的对象的流向量。
您可以查看Lucas–Kanade method 和Horn–Schunck method。
Here is a link用于matlab的实现。