我对图像处理相对较新,并且从未试图在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。)这个错误是什么意思?我该如何解决这个问题?
我感谢任何人都能给予的帮助,谢谢!