Filter löschen
Filter löschen

How to synchronise video to matlab plot

69 Ansichten (letzte 30 Tage)
Sujan Ponnappa
Sujan Ponnappa am 20 Nov. 2019
Kommentiert: Mohan kand am 24 Apr. 2023
I have a video of chopping a potato wherein the chopping activites are captured by a pressure sensor. The data is intepretated and plotted with matlab.
How can I synchronise the video to the plot as to know how the pressure values changes as the video plays.

Akzeptierte Antwort

Saumik Kumar Dey
Saumik Kumar Dey am 27 Nov. 2019
According to my understanding, you want to play the video and plot pressure variation with time along with that. You can achive that by two subplots one for playing the video feed and the other for plotting the pressure data. You can use the matlab class "VideoReader" for reading the frames of you video file.
Consider the following example as a guideline to achieve your goal. Make sure the initial and final experiment times of the video matches with that of pressure data.
%% Setup the subplots
ax1 = subplot(2,1,1); % For video
ax2 = subplot(2,1,2); % For pressure plot
%% Setup VideoReader object
filename = 'SomeVideoFileName';
v = VideoReader(filename);
nFrames = v.Duration*v.FrameRate; % Number of frames
% Display the first frame in the top subplot
vidFrame = readFrame(v);
image(vidFrame, 'Parent', ax1);
ax1.Visible = 'off';
%% Load the pressure data
t = 0:0.01:v.Duration; % Cooked up for this example, use your actual data
y = sin(t);
nDataPoints = length(t); % Number of data points
step = round((nDataPoints/nFrames));
index = 1:step:nDataPoints;
i = 2;
% Diplay the plot corresponds to the first frame in the bottom subplot
h = plot(ax2,t(1:index(i)),y(1:index(i)),'-k');
% Fix the axes
ax2.XLim = [t(1) t(end)];
ax2.YLim = [min(y) max(y)];
%% Animate
while hasFrame(v)
pause(1/v.FrameRate);
vidFrame = readFrame(v);
image(vidFrame, 'Parent', ax1);
ax1.Visible = 'off';
i = i + 1;
set(h,'YData',y(1:index(i)), 'XData', t(1:index(i)))
end
Note: This example considers "nDataPoints > nFrames". The other condition can be handled similarly.
  11 Kommentare
Sujan Ponnappa
Sujan Ponnappa am 9 Dez. 2019
I have attached the excel file of the pressure data to this. I am not able to sync the plotting rate to the video . How can make sure that they are in sync?
%% Setup the subplots
ax1 = subplot(2,1,1); % For video
ax2 = subplot(2,1,2); % For pressure plot
%%% Setup VideoReader object
filename = 'slice1.avi';
v = VideoReader(filename);
frameratevideo=v.FrameRate;
nFrames = v.Duration*v.FrameRate; % Number of frames
% Display the first frame in the top subplot
vidFrame = readFrame(v);
v.CurrentTime = 16;
image(vidFrame, 'Parent', ax1);
ax1.Visible = 'off';
%%% Load the pressure data
t = ts; % Cooked up for this example, use your actual data
y = ys;
nDataPoints = length(t); % Number of data points
%step = round((nFrames/nDataPoints));
index = 1:0.44:nDataPoints;
i = 2;
% Diplay the plot corresponds to the first frame in the bottom subplot
h = plot(ax2,t(1:index(i)),y(1:index(i)),'-k');
% Fix the axes
ax2.XLim = [t(1) t(end)];
ax2.YLim = [min(y) max(y)];
%%% Animate
while hasFrame(v)
pause(1/v.FrameRate);
%pause(0.01)
vidFrame = readFrame(v);
image(vidFrame, 'Parent', ax1);
ax1.Visible = 'off';
i = i + 1;
set(h,'YData',y(1:index(i)), 'XData', t(1:index(i)))
end
Mohan kand
Mohan kand am 24 Apr. 2023
@Sujan Ponnappa hi did you find the solution ?

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

youjarr
youjarr am 23 Feb. 2023
Hey guys,
perfect code, thank you very much.
I have two questions:
How can I save the fig to reopen the file with the video?
Because when I do savefig it is not opening.
How can I replay within the fig?
Thank you very much.
  1 Kommentar
youjarr
youjarr am 23 Feb. 2023
Bearbeitet: youjarr am 23 Feb. 2023
And I am getting an Error:
Index exceeds the number of array elements. Index must not exceed 361.
Error in VideoSubplot (line 50)
set(h1,'YData',y1(1:index1(j)), 'XData', t02(1:index1(j)))
I thought the code handles the different length of video and measured data?
My nFrames is smaller then my nDataPoints

Melden Sie sich an, um zu kommentieren.

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by