Any one let me know whats wrong with this code

I need to do background subtraction.It doesnt work.Can anyone let me know wthat is the wrong with the codes.
clc;
close all;
clear;
%Read Background Image
Background=imread('down.jpg');
%Read Current Frame
CurrentFrame=imread('down.jpg');
%Display Background and Foreground
subplot(2,2,1);imshow(Background);title('BackGround');
subplot(2,2,2);imshow(CurrentFrame);title('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 Rows and Columns of the Image
[rows columns]=size(Out);
%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
FilteredImage=medfilt2(BinaryImage,[5 5]);
%Boundary Label the Filtered Image
[L num]=bwlabel(FilteredImage);
STATS=regionprops(L,'all');
cc=[];
removed=0;
%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 region boundaries in a binary image.
[B,L,N,A] = bwboundaries(L2);
%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
untitled.jpg

Answers (1)

Guillaume
Guillaume on 28 Apr 2019
Edited: Guillaume on 28 Apr 2019
I've not looked past these three lines:
[Background_hsv]=round(rgb2hsv(Background));
[CurrentFrame_hsv]=round(rgb2hsv(CurrentFrame));
Out = bitxor(Background_hsv,CurrentFrame_hsv);
(why the brackets around the outputs of the first two lines? No other line in your code has brackets around single outputs)
As documented, rgb2hsv returns a double matrix with all elements in the range (0,1). So rounding that will just create a binary matrix with just three colours: fully saturated red, black or white.
Furthermore, bitxor on a double matrix is meaningless.
I have no idea what you were intending to do with these 3 lines but clearly they're not doing the right thing.
It's also unclear why you're using the same image as background and as frame.

Asked:

on 28 Apr 2019

Edited:

on 28 Apr 2019

Community Treasure Hunt

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

Start Hunting!