Я написал некоторый код, который импортирует видео и принимает некоторые коэффициенты DCT из определенной области изображения кадр за кадром, а затем выводит двоичный файл (содержащий коэффициенты), используя отдельную функцию. Это прекрасно работает, когда я делаю это по отдельности, но я попытался реализовать пакетную версию кода, поскольку я работаю с более чем 200 видеофайлами.
Однако их проблема заключается в том, что при прохождении цикла каждый раз выводится неверный файл. Если количество кадров в следующей итерации имеет меньше кадров, оно записывает в предыдущие кадры. Мне сказали, что мне нужно инициализировать один из моих циклов for, прежде чем он запустится. Однако я уверен, как это сделать, я думаю, что проблема заключается во втором цикле for, но я не уверен.
Любое предложение будет с благодарностью!
files = dir('Videos/*.mov');
for m = 1:numel(files);
readerobj = mmreader(files(m).name);
vidFrames = read(readerobj);
numFrames = get(readerobj, 'numberOfFrames');
% Create a MATLAB movie struct from the video frames.
for k = 1 : numFrames
mov(k).cdata = vidFrames(:,:,:,k);
mov(k).colormap = [];
end
firstFrame = mov(1).cdata;
rect = [172,225,271,143;];
numFrames = length(mov);
dctCoeff = zeros((10*10),numFrames);
for i = 1 : numFrames
frameImage = imcrop(mov(i).cdata, rect);
frameImage = rgb2gray(frameImage);
dctImage = dct2(frameImage);
dctImage = dctImage(1:10,1:10);
dctCoeff(:,i) = reshape(dctImage,1,(10*10));
end
sRate = (1/29.9701)*1e7;
[status, error] = htk_write_mfc(files(m).name, size(dctCoeff,2),sRate,4*size(dctCoeff,1),9,dctCoeff);
status
error
end