在MATLAB中对一组图像上的静态/移动对象进行分类

时间:2016-05-11 16:06:52

标签: matlab

我必须在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上尝试此操作,当你杀死一个外星人时它会消失,所以减少了对象的数量。此外,每个射弹都是一个单独的物体,在游戏的不同时刻可能会有不同数量的射弹。

所以我的问题是,我怎样才能根据物体移动与否来对物体进行分类,并用两种不同的颜色对它们进行涂漆?

1 个答案:

答案 0 :(得分:0)

如果背景一致,使用optical flow非常适合您。

基本思路非常简单,考虑减去两个连续的帧,并使用它来获取在帧之间移动的对象的流向量。

您可以查看Lucas–Kanade method Horn–Schunck method

Here is a link用于matlab的实现。