clear all; close all; clc

%% Read video into MATLAB using aviread

video = aviread('Roof1.AVI');

nframes = length(video);

% Calculate the background image by averaging the first 5 images

temp = zeros(size(video(1).cdata));

[M,N] = size(temp(:,:,1));

for i = 1:10

temp = double(video(i).cdata) + temp;

end

imbkg = temp/10;

% Initialization for Kalman Filtering

centroidx = zeros(nframes,1);

centroidy = zeros(nframes,1);

predicted = zeros(nframes,4);

actual = zeros(nframes,4);

% % Initialize the Kalman filter parameters

% R - measurement noise,

% H - transform from measure to state

% Q - system noise,

% P - the status covarince matrix

% A - state transform matrix

R=[[0.2845,0.0045]',[0.0045,0.0455]'];

H=[[1,0]',[0,1]',[0,0]',[0,0]'];

Q=0.01*eye(4);

P = 100*eye(4);

dt=1;

A=[[1,0,0,0]',[0,1,0,0]',[dt,0,1,0]',[0,dt,0,1]'];

% loop over all image frames in the video

kfinit = 0;

th = 38;

for i=1:nframes

imshow(video(i).cdata);

hold on

imcurrent = double(video(i).cdata);

% Calculate the difference image to extract pixels with more than 40(threshold) change

diffimg = zeros(M,N);

diffimg = (abs(imcurrent(:,:,1)-imbkg(:,:,1))>th) ...

| (abs(imcurrent(:,:,2)-imbkg(:,:,2))>th) ...

| (abs(imcurrent(:,:,3)-imbkg(:,:,3))>th);

% Label the image and mark

labelimg = bwlabel(diffimg,4);

markimg = regionprops(labelimg,['basic']);

[MM,NN] = size(markimg);

% Do bubble sort (large to small) on regions in case there are more than 1

% The largest region is the object (1st one)

for nn = 1:MM

if markimg(nn).Area > markimg(1).Area

tmp = markimg(1);

markimg(1)= markimg(nn);

markimg(nn)= tmp;

end

end

% Get the upper-left corner, the measurement centroid and bounding window size

bb = markimg(1).BoundingBox;

xcorner = bb(1);

ycorner = bb(2);

xwidth = bb(3);

ywidth = bb(4);

cc = markimg(1).Centroid;

centroidx(i)= cc(1);

centroidy(i)= cc(2);

% Plot the rectangle of background subtraction algorithm -- blue

hold on

rectangle('Position',[xcorner ycorner xwidth ywidth],'EdgeColor','b');

hold on

plot(centroidx(i),centroidy(i), 'bx');

% Kalman window size

kalmanx = centroidx(i)- xcorner;

kalmany = centroidy(i)- ycorner;

if kfinit == 0

% Initialize the predicted centroid and volocity

predicted =[centroidx(i),centroidy(i),0,0]' ;

else

% Use the former state to predict the new centroid and volocity

predicted = A*actual(i-1,:)';

end

kfinit = 1;

Ppre = A*P*A' + Q;

K = Ppre*H'/(H*Ppre*H'+R);

actual(i,:) = (predicted + K*([centroidx(i),centroidy(i)]' - H*predicted))';

P = (eye(4)-K*H)*Ppre;

% Plot the tracking rectangle after Kalman filtering -- red

hold on

rectangle('Position',[(actual(i,1)-kalmanx) (actual(i,2)-kalmany) xwidth ywidth],'EdgeColor','r','LineWidth',1.5);

hold on

plot(actual(i,1),actual(i,2), 'rx','LineWidth',1.5);

drawnow;

end

thanks. it works perfectly in my code.

ReplyDeleteactually i got error like this one ::

?? Error using ==> readavi Unable to locate decompressor to decompress video stream

Error in ==> aviread at 64 X = readavi(info.Filename,-1);

you have to download the codec, so you can play the video in aviread function :)

what is that codec means please tell me in details and where its get from.

Deleteyou can download the codec pack. here the example http://filehippo.com/download_klite_codec_pack/

Deleteand install it. it means the video not decompressed on your computer/laptop.

if it doesnt work, you have to install the latest codec.

and anybody have the reference of "kalman filter" method. maybe any journal, paper, etc?

ReplyDeleteplease give me any clue and send to iqbal.aghe@gmail.com please.

thanks anyway :)

I get the same error for some videos...but for some videos it works perfectly...actually i think its a problem with video codec....the link you gave i also tried this but same prob again happens...

DeleteOnce again a great informative post. Thank you so much for taking the time to share this exciting information. But, I would be grateful to you if you could provide some more information about heat map issue. Thanks !

ReplyDeleteDoesnt work for me. I am getting a box around the whole image.

ReplyDeletevideo = aviread('Roof1.AVI');

ReplyDeletei get stuck to this error

can you send me the link of this video....! at kesarartcircle@gmail.com

Hi,

ReplyDeleteI'm using Matlab 2013a version and to read the video, I've used VideoReader instead of using aviread but there is problem with line...temp = zeros(size(video(1).cdata));.

Error= No appropriate method, property,

or field cdata for class.

VideoReader.Anyone knows how to fix this?

Hi, me too get the same error,... do u know how to fix it???

Deletecan u send me the code with database for moving vehicle detection and tracking to this mail id sunsid1989@gmail.com

ReplyDeleteI am using windows xp OS. K-lite codec is not getting installed properly, and also i'm having GOM player, MP4 player,but the coding is not working properly and i'm getting this error.

ReplyDeleteError using ==> aviread at 84

Unable to locate decompressor to decompress video stream

video = aviread('Roof1.AVI');

ReplyDeletei get this error

can you send me the link of this video....! at shahpooja.311@gmail.com

In matlab command video type aviinfo('filename.avi')

ReplyDeleteIt will give you all the information about tha video file named filename.avi

From these information find out which compression is used and then try downloading that codec from google.

If you like this comment just type "Mia san Mia"

hello sir code is running perfectly..bt i m using it for car tracking so it tracks all cars on the road ,i want to track single car what changes i have to do in this code

ReplyDelete