Preallocating Tracks or Parallel Processing in a Multi Object Tracking Script

1 view (last 30 days)
I'm working on a multi-object tracking script and I'd like to get things running as fast as possible. The way the script is currently set up a new track is created in the track structure every time a new object is detected. What I'd like to do is preallocate tracks much like I'd preallocate an array so that things run quicker. I was wondering if anyone knew any code I might use to preallocate tracks, any code I might use to clear empty tracks that were unused at the end of my run and how I might modify the function below to work with a set of preallocated tracks rather than a growing number of tracks. I would greatly appreciate any help with this. Equally helpful would be some way I might be able to implement parfor in the loop provided all the centroids, bboxes, tracks and unassigned detections were unique.
%
function [tracks_Out, nextId_Out] = createNewTracks(tracks, centroids, bboxes, unassignedDetections, nextId)
centroids = centroids(unassignedDetections, :);
bboxes = bboxes(unassignedDetections, :);
tracks_Out=tracks;
nextId_Out=nextId;
for i = 1:size(centroids, 1)
centroid = centroids(i,:);
bbox = bboxes(i, :);
% Create a Kalman filter object.
kalmanFilter = configureKalmanFilter('ConstantVelocity', ...
centroid, [200, 50], [100, 25], 100);
% Create a new track.
newTrack = struct(...
'id', nextId_Out, ...
'bbox', bbox, ...
'kalmanFilter', kalmanFilter, ...
'age', 1, ...
'totalVisibleCount', 1, ...
'consecutiveInvisibleCount', 0);
% Add it to the array of tracks.
tracks_Out(end + 1) = newTrack;
% Increment the next id.
nextId_Out = nextId_Out + 1;
end
end

Answers (0)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!