# save matrices from loop

12 visualizzazioni (ultimi 30 giorni)
Adrian Brown il 15 Mar 2021
Commentato: Adrian Brown il 18 Mar 2021
Hello,
I am using this code that estimate Optical flow of a given video.
My purpose is to create a matrix that contain all the flow values for all while loop.
opticFlow = opticalFlowFarneback;
%% Estimate Optical Flow of each frame
frameGray = rgb2gray(frameRGB);
flow = estimateFlow(opticFlow,frameGray); % get 4 parameters size 240x352 each
% I aim to get all the the values get it in flow for each videoframe
%size of the matrix must be 240x352*53 where 53 is the number of frames in
%the video
end
I really apprecaite any help
##### 1 CommentoMostra -1 commenti meno recentiNascondi -1 commenti meno recenti
Adrian Brown il 15 Mar 2021

Accedi per commentare.

### Risposta accettata

Bob Thompson il 15 Mar 2021
I could be wrong, but it seems like you just need to index flow.
opticFlow = opticalFlowFarneback;
%% Estimate Optical Flow of each frame
Frame = 0; % Initialize frame index
Frame = 1; % Increase index for new frame
frameGray = rgb2gray(frameRGB);
flow(:,:,frame) = estimateFlow(opticFlow,frameGray); % get 4 parameters size 240x352 each
end
##### 11 CommentiMostra 9 commenti meno recentiNascondi 9 commenti meno recenti
Bob Thompson il 18 Mar 2021
I apologize for my own inability in this area, I hope it hasn't held you back too much.
That being said, I don't have a particularly elegant solution for you as I'm not very familiar with the opticalFlow object. For a more brute force solution see below for two options
OPTION 1
opticFlow = opticalFlowFarneback;
% Initialize stuff
frame = 0;
flow = struct('Magnitude',[],'Frame',[]); % Force flow to be a structure
%% Estimate Optical Flow of each frame
frame = frame + 1;
frameGray = rgb2gray(frameRGB);
flow(frame).object = estimateFlow(opticFlow,frameGray); % stores opticalFlow values to structure element
flow(frame).Magnitude = flow(frame).object.Magnitude; % Pull Magnitude out of opticalFlow object into structure
flow(frame).Frame = frame;
end
C = [flow.Magnitude];
OPTION 2
opticFlow = opticalFlowFarneback;
% Initialize stuff
frame = 0;
%% Estimate Optical Flow of each frame
frame = frame + 1;
frameGray = rgb2gray(frameRGB);
flow = estimateFlow(opticFlow,frameGray); % get 4 parameters size 240x352 each
C(:,((frame-1)*size(flow.Magnitude,2)+1):(frame*size(flow.Magnitude,2))) = flow.Magnitude;
end
Adrian Brown il 18 Mar 2021
Dear @Bob Thompson I really appreciate any reply from you. from each suggestion I learned a new thing from you. The two option are very helpfull for me. Thank you for your time and all your suggestion.

Accedi per commentare.

### Categorie

Scopri di più su Tracking and Motion Estimation in Help Center e File Exchange

### Community Treasure Hunt

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

Start Hunting!

Translated by