在MATLAB中跟踪多个小对象的最有效方法是什么?

时间:2018-01-16 20:28:57

标签: matlab image-processing

我对图像处理相对较新,并且从未试图在MATLAB中对图像做任何事情,所以请原谅我,如果我犯了一些非常新的错误。

我正在尝试制作一个能够跟踪视频中蚂蚁的程序。视频来自固定摄像机,并从鸟瞰角度记录蚂蚁。然而,我在制作可靠的蚂蚁踪迹时遇到了问题。最初,我使用了ForegroundDetection函数,但是存在多个问题:

1。)未检测到固定蚂蚁

2。)物体之间的重叠太多(高度遮挡)

我的一位朋友建议在比较帧之间有更大的差距,所以不要从第2帧减去第1帧,而是从第30帧(相隔1秒)做第1帧,因为这样可以使蚂蚁不移动更有可能出现在减影图像上。

以下是我到目前为止的代码。这是一个解决问题的黑暗尝试,因为我已经没有想法了:

i = 1;
k = 1;
n = 1;
Video = {};
SubtractedVideo = {};
FilteredVideo = {};

videoFReader = vision.VideoFileReader('001.mp4',...
        'ImageColorSpace', 'Intensity', 'VideoOutputDataType', 'uint8');
videoPlayer = vision.VideoPlayer;
blobby = vision.BlobAnalysis('BoundingBoxOutputPort', true, ...
        'AreaOutputPort', true, 'CentroidOutputPort', true, ...
        'MinimumBlobArea', 1);
shapeInserter = vision.ShapeInserter('BorderColor','White');

while ~isDone(videoFReader)     %Read all frame of video
    frame = step(videoFReader);
    Video{1, i} = frame;
    i = i+1;

end

%Perform subtraction 
for j=1: 1: numel(Video)-60
    CurrentFrame = Video{1,j};
    FutureFrame = Video{1,j+60};
    SubtractedImage = imsubtract(CurrentFrame, FutureFrame);
    SubtractedVideo{1,j} = SubtractedImage;
    ImFiltered = imgaussfilt(SubtractedImage, 2);
    BWIm = im2bw(ImFiltered, 0.25);
    FilteredVideo{1,j} = BWIm;
end

for a = n:numel(FilteredVideo)
    frame = Video{1, n};
    bbox = step(blobby, FilteredVideo{1, k});
    out = step(shapeInserter, frame, bbox);
    step(videoPlayer, out);
    k = k+1;
end

目前,当我运行代码时,我在行out = step(shapeInserter,frame,bbox)上得到以下错误:

'点输入必须是4×N矩阵。每列指定一个不同的矩形,其形式为[行列高度宽度]。'

我的问题是:

1。)这是尝试解决我遇到的问题的最佳方法吗?是否有更简单的解决方案?

2。)这个错误是什么意思?我该如何解决这个问题?

我感谢任何人都能给予的帮助,谢谢!

0 个答案:

没有答案