【发布时间】:2017-09-28 13:58:33
【问题描述】:
我有一个二进制数组,表示视频中各个帧的对象检测。我试图从这个向量中确定有多少单独的事件。我需要找出一种方法来计算二进制数组中 1 的簇数。
使用 Matlab 函数确定有多少个连续 1 的单独组大于 N=5 的最简单方法是什么?
例如对于数组:
1 1 0 0 0 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 1 0 0 1 0 0 1 我希望输出为 2,因为有 2 组 1 比 N 长。
我需要一种有效的方法来执行此操作,而不仅仅是循环播放,因为我必须在大约 20,000 个短视频上运行它。有点希望有一个我错过的用于此目的的内置函数,但欢迎任何解决方案。
我试图加速的这段代码的丑陋版本如下所示:
% Count Events
EventCount = 0;
subcount = 0;
N = 5;
for e=1:length(events) % events is a binary array
if (events(e) == 1) && (subcount == 0)
subcount = 1;
elseif events(e) == 1
subcount = subcount + 1;
elseif (events(e) == 0) && (subcount > N)
EventCount = EventCount + 1;
subcount = 0;
elseif (events(e) == 0) && (subcount <= N)
subcount = 0;
else
disp('Oops, should not get here!');
end
end
disp(EventCount);
【问题讨论】:
标签: arrays algorithm matlab binary grouping