У меня есть фильмы продолжительностью 60 секунд, и я обрабатываю их, чтобы вытащить движущиеся объекты.Я могу сделать это, выполнив вычитание фона, отфильтровав изображение и используя анализатор BLOB-объектов.
Проблема заключается в том, что весь процесс идет медленно, так как извлечение кадров из видео является наиболее трудоемкой частью, а 44,96 занимаетболее половины времени обрабатывает видео.Я использовал profile viewer
, чтобы увидеть время.
Если вы посмотрите на мою функцию, я просто использую модуль Vision
для загрузки видео и step
для перемещения по видео.Есть ли способ ускорить это ??
Log_filter = fspecial('log', filterdot, thresh); % fspecial creat predefined filter.Return a filter.
tic
ii = 1;
bkgd = gpuArray(gh.Bkgd);
while ~isDone(gh.Video.reader)
frame = gh.readFrame();
gframe = gpuArray(frame);
img_temp = double(rgb2gray(gframe));
subbk = img_temp - bkgd;
img_LOG = imfilter(subbk, Log_filter, 'symmetric', 'conv');
img_LOG = img_LOG>.5;
[~, centroids, ~] = gh.Video.blobAnalyser.step(gather(img_LOG));
gh.Tracks.centroids{ii} = centroids;
ii = ii+1;
toc
end
gh.Video.info.NumberOfFrames = ii-1;
gh.ResetVideo
display('Dots extracted')
Вот моя функция вытягивать кадры
function frame = readFrame(gh)
frame = gh.Video.reader.step();
end