UPDATE:
Поскольку теперь я понимаю, что вам нужен циклический буфер для хранения данных, вот решение, которое вы можете использовать. Поскольку вы сказали, что храните данные центроидов объектов на изображении, я дам вам общий случай для хранения произвольного числа измерений (либо значение индекса в 1 пиксель для каждого центроида, либо 2 значения для координат x и y и т. Д.) ...
Сначала инициализируйте буфер:
nBuffer = 10; % You can set this to whatever number of time points
% you want to store data for
nSamples = 2; % You can set this to the number of data values you
% need for each point in time
centroidBuffer = zeros(nSamples,nBuffer); % Initialize the buffer to zeroes
Далее у вас будет непрерывный цикл. Вы можете использовать while loop и переменную флага, которая изначально имеет значение TRUE (и которую вы можете установить на FALSE , чтобы остановить цикл):
keepLooping = true;
while keepLooping,
% Capture your image
% Compute the centroid data and place it in the vector "centroidData"
centroidBuffer = [centroidBuffer(:,2:end) centroidData(:)];
% Do whatever processing you want to do on centroidBuffer
% Choose to set keepLooping to false, if you want
end
Это работает следующим образом: в каждый момент времени первый столбец (т. Е. Самые старые данные) в centroidBuffer удаляется, а новый столбец (т. Е. Новые данные) добавляется в конец. Таким образом, буферная матрица всегда имеет одинаковый размер.
Если вы не хотите выполнять обработку на каждом временном шаге, а вместо этого только после каждых nBuffer временных точек, чтобы он каждый раз работал с новым набором данных, то замените вышеуказанный код со следующим:
keepLooping = true;
processTime = 0;
while keepLooping,
% Capture your image
% Compute the centroid data and place it in the vector "centroidData"
centroidBuffer = [centroidBuffer(:,2:end) centroidData(:)];
processTime = processTime+1;
if (processTime == nBuffer),
% Do whatever processing you want to do on centroidBuffer
processTime = 0;
end
% Choose to set keepLooping to false, if you want
end
EDIT:
Есть несколько вариантов, которые вы можете сделать с помощью приведенного выше кода. Например, если вы хотите сохранить два набора данных с 10 временными точками каждый, вы можете изменить nBuffer на 20, чтобы сохранить старый набор в первых 10 столбцах и новый набор в последних 10 столбцах. Затем измените оператор if на:
...
if (processTime == nBuffer/2),
...
И теперь вы можете выполнять обработку, используя как старый набор из 10 точек данных (в centroidBuffer (:, 1:10) ), так и более новый набор из 10 точек данных (в centroidBuffer (:, 11: 20). * * одна тысяча сорок-три)