You are currently viewing Matlab Code for Background Subtraction

Matlab Code for Background Subtraction

Spread the love

Background subtraction, also known as Foreground Detection, is a technique in the fields of image processing and computer vision wherein an image’s foreground is extracted for further processing (object recognition etc.). Generally an image’s regions of interest are objects (humans, cars, text etc.) in its foreground.  Background subtraction is a widely used approach for detecting moving objects in videos from static cameras. The rationale in the approach is that of detecting the moving objects from the difference between the current frame and a reference frame, often called “background image”, or “background model

matlab-code-for-background-subtraction

Matlab Code for Background Subtraction

clear all the variables and close all the figures using the following commands

clc;
close all;
clear;

Read the Background image

%Read Background Image
Background=imread('background.jpeg');

Read the Current frame

%Read Current Frame
CurrentFrame=imread('original.jpeg');

display both the background and the current frame

%Display Background and Foreground
subplot(2,2,1);imshow(Background);title('BackGround');
subplot(2,2,2);imshow(CurrentFrame);title('Current Frame');

Convert RGB to HSV Conversion of both background and current frame

%Convert RGB 2 HSV Color conversion
[Background_hsv]=round(rgb2hsv(Background));
[CurrentFrame_hsv]=round(rgb2hsv(CurrentFrame));
Out = bitxor(Background_hsv,CurrentFrame_hsv);
%Convert RGB 2 GRAY
Out=rgb2gray(Out);

Read the width and height of the image

%Read Rows and Columns of the Image
[rows columns]=size(Out);

Convert image to binary

%Convert to Binary Image
for i=1:rows
for j=1:columns

if Out(i,j) >0

BinaryImage(i,j)=1;

else

BinaryImage(i,j)=0;

end

end
end

Apply median filter to remove noise with 5 X 5 window

%Apply Median filter to remove Noise
FilteredImage=medfilt2(BinaryImage,[5 5]);

Label the filter Image

%Boundary Label the Filtered Image
[L num]=bwlabel(FilteredImage);

STATS=regionprops(L,'all');
cc=[];
removed=0;

Remove the noisy regions

%Remove the noisy regions
for i=1:num
dd=STATS(i).Area;

if (dd < 500)

L(L==i)=0;
removed = removed + 1;
num=num-1;

else

end

end

[L2 num2]=bwlabel(L);

Trace the boundary

% Trace region boundaries in a binary image.

[B,L,N,A] = bwboundaries(L2);

Plot the Blob features

%Display results

subplot(2,2,3),  imshow(L2);title('BackGround Detected');
subplot(2,2,4),  imshow(L2);title('Blob Detected');

hold on;
for k=1:length(B),

if(~sum(A(k,:)))
boundary = B{k};
plot(boundary(:,2), boundary(:,1), 'r','LineWidth',2);

for l=find(A(:,k))'
boundary = B{l};
plot(boundary(:,2), boundary(:,1), 'g','LineWidth',2);
end

end

end