Avinash Baranitharan
Published © GPL3+

Real-Time Object Tracking Using MATLAB (Blob Analysis)

A machine vision-based blob analysis method is explained to track an object in real-time using MATLAB and webcam.

BeginnerProtip1 hour5,704
Real-Time Object Tracking Using MATLAB (Blob Analysis)

Things used in this project

Software apps and online services

MATLAB
MATLAB
Support Package: OS Generic Video Interface

Story

Read more

Code

Real-Time Object Tracking using MATLAB

MATLAB
%%*********************************************************************
%%  Real-Time Object Tracking using MATLAB (Blob Analysis)
%%  Avinash.B (avinash15101994@gmail.com)
%%  https://avinashbaranitharan.com/
%%*********************************************************************

%% Initialization
redThresh = 0.10; % Threshold for red detection
vidDevice = imaq.VideoDevice('winvideo', 1, 'RGB24_640x480', ... % Acquire input video stream
                    'ROI', [1 1 640 480], ...
                    'ReturnedColorSpace', 'rgb');
vidInfo = imaqhwinfo(vidDevice);  % Acquire input video property
hblob = vision.BlobAnalysis('AreaOutputPort', false, ... % Set blob analysis handling
                                'CentroidOutputPort', true, ... 
                                'BoundingBoxOutputPort', true', ...
                                'MinimumBlobArea', 800, ...
                                'MaximumBlobArea', 3000, ...
                                'MaximumCount', 10);
hshapeinsRedBox = vision.ShapeInserter( 'BorderColor', 'Custom', ... % Set Red box handling
                                        'CustomBorderColor', [1 0 0], ...
                                        'Fill', true, ...
                                        'FillColor', 'Custom', ...
                                        'CustomFillColor', [1 0 0], ...
                                        'Opacity', 0.2);
htextins = vision.TextInserter('Text', 'Number of Red Object: %2d', ... % Set text for number of blobs
                                       'Location',  [7 2], ... 
                                       'Color', [1 0 0], ... % Red Colour
                                       'FontSize', 12);
htextinsCent = vision.TextInserter('Text', '+      X:%4d, Y:%4d', ... % set text for centroid
                                    'LocationSource', 'Input port', ...
                                    'Color', [1 1 0], ... // yellow color
                                    'FontSize', 14);
hVideoIn = vision.VideoPlayer('Name', 'Object Tracking - Avinash.B [2017209043]', ... % Output Video Player
                              'Position', [100 100 640 480]);
nFrame = 0; % Frame number initialization

%% Processing Loop
while(nFrame < 2000)
    rgbFrame = step(vidDevice); % Acquire single frame
    rgbFrameMirror = flipdim(rgbFrame,2); % Obtain the mirror image for displaying
    rgbgray=rgb2gray(rgbFrameMirror);
    diffFrameSub = imsubtract(rgbFrameMirror(:,:,1), rgbgray); % Get red component of the image
    diffFrame = medfilt2(diffFrameSub, [3 3]); % Filter out the noise by using median filter
    binFrame = im2bw(diffFrame, redThresh); % Convert the image into binary image with the red objects as white
    [centroid, bbox] = step(hblob, binFrame); % Get the centroids and bounding boxes of the blobs
    centroid = uint16(centroid); % Convert the centroids into Integer for further steps 
    rgbFrameMirror(1:20,1:165,:) = 0; % put a black region on the output stream
    vidIn = step(hshapeinsRedBox, rgbFrameMirror, bbox); % Instert the red box
    
    for object = 1:1:length(bbox(:,1)) % Write the corresponding centroids
        centX = centroid(object,1); %Store X Value in centX
        centY = centroid(object,2); %Store Y Value in centY
        vidIn = step(htextinsCent, vidIn, [centX centY], [centX-6 centY-9]); % Video Insert X,Y Values
    end
    
    vidIn = step(htextins, vidIn, uint8(length(bbox(:,1)))); % Count the number of blobs
    step(hVideoIn, vidIn); % Output video stream
    nFrame = nFrame+1;
end

%% Clearing Memory
release(hVideoIn); % Release all memory and buffer used
release(vidDevice);
clear all;
clc;

Credits

Avinash Baranitharan

Avinash Baranitharan

2 projects • 12 followers
Master of the Possible, an Engineer.

Comments