Live Motion Detection Using Optical Flow
This example shows how to create a video algorithm to detect motion using optical flow technique. This example uses the Image Acquisition Toolbox™ System object™ along with Computer Vision Toolbox™ System objects.
Introduction
This example streams images from an image acquisition device to detect motion in the live video. It uses the optical flow estimation technique to estimate the motion vectors in each frame of the live video sequence. Once the motion vectors are determined, we draw it over the moving objects in the video sequence.
Initialization
Create the Video Device System object.
vidDevice = imaq.VideoDevice('winvideo', 1, 'YUY2_320x240', ... 'ReturnedColorSpace', 'rgb', ... 'DeviceProperties.Brightness', 130, ... 'DeviceProperties.Sharpness', 50);
Create a System object to estimate direction and speed of object motion from one video frame to another using optical flow.
opticFlow = opticalFlowHS;
Stream Acquisition and Processing Loop
Create a processing loop to perform motion detection in the input video. This loop uses the System objects you instantiated above.
% Set up for stream nFrames = 0; while (nFrames<100) % Process for the first 100 frames. % Acquire single frame from imaging device. frameRGB = vidDevice(); % Compute the optical flow for that particular frame. flow = estimateFlow(opticFlow,rgb2gray(frameRGB)); imshow(frameRGB) hold on plot(flow,'DecimationFactor',[5 5],'ScaleFactor',25) hold off % Increment frame count nFrames = nFrames + 1; end
Summary
In the figure window, you can see that the example detected the motion of the black file. The moving objects are represented using the vector field lines as seen in the image.
Release
Here you call the release method on the System objects to close any open files and devices.
release(vidDevice);