필터 지우기
필터 지우기

video processing for motion detection

조회 수: 3 (최근 30일)
Saffana Siddiqua
Saffana Siddiqua 2019년 12월 8일
댓글: Saffana Siddiqua 2020년 1월 28일
can i track the motion of a motor from a video? i tried histogram plotting but exporting data is hard
  댓글 수: 12
Saffana Siddiqua
Saffana Siddiqua 2019년 12월 8일
yes, concatenated. separation of plots is not necessery.
Saffana Siddiqua
Saffana Siddiqua 2019년 12월 10일
help me out please :(

댓글을 달려면 로그인하십시오.

채택된 답변

Turlough Hughes
Turlough Hughes 2019년 12월 8일
편집: Turlough Hughes 2019년 12월 11일
So the method I suggested was to look at a single pixel, though you could also look at a few, or the entire image histogram, up to you. Here I track the R component of the mid pixel of each frame and then find local maxima which are greater than a nominal threshold value.
framerate=29.53; % I don't see how to get this from the video object directly.
threshold=0.15;
v=vision.VideoFileReader('vid.mp4');
c=0;
while ~isDone(v)
c=c+1;
f=step(v);
data(c)=f(360,720,1); % for green just replace the with, data(c)=f(360,720,2);
end
figure(), plot(data)
idx1=find(data(2:end-1) > data(1:end-2) & data(2:end-1) > data(3:end))+1; % find local maxima, 'data2'
data2=data(idx1);
hold on, plot(idx1,data2,'or'); % shows local maxima in plot
idx2=find(data2>threshold); % local maxima satisfying threshold
peakFrame=idx1(idx2);
hold on, plot(peakFrame,data2(idx2),'.k','MarkerSize',15) % shows peaks that pass threshold.
numFrames=peakFrame(end)-peakFrame(1) % number of frames from first to last flash.
revs=length(data2(idx2))-1; % Corresponding number of revolutions.
duration=numFrames/framerate; % numFrames/FramesPerSecond = duration in seconds
rpm=revs/(duration/60)
EDIT: as per comments below.
  댓글 수: 11
Turlough Hughes
Turlough Hughes 2019년 12월 11일
i cant find any function to determine the framerate with vision.videofilereader.
Neither can I. I took the framerate from looking at file details. Surely there's a way to get it with code but I can't see how. I see you've opened another question on this though.
what if i want to know the intensity of green or blue light in the center pixel
See comments in my edit to my original answer, also have a look at the following documentation.
the thing is i will get the duration by multiplying the framerate with number of frames
you get duration from NumberOfFrames/framerate: . I originally had framerate/NumberOfFrames but had fixed that before my last comment.
Saffana Siddiqua
Saffana Siddiqua 2020년 1월 28일
hey,
so i could extract the framerate using videoReader.
now, the number of frames is showing 446, wheres the number of frames of the whole video is 265. shouldnt the number be less? cause i am only taking the frames with the flashes, no?

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

Community Treasure Hunt

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

Start Hunting!

Translated by