# Single vehicle tracking using Fourier transform-MATLAB

• MATLAB
I am working on a project which is based on importance of phase only reconstruction of a signal obtained from fft.

Now ,I have detected vehicles from the Video of Traffic on road taken using stationary camera ( Please download the 1.47 MB video for testing MATLAB Code by ( step1) click on the play button then (step2) right clicking on video then ( step3 ) click on save as option )

If you run the code in MATLAB, you can observe that I am quite successful in detecting all the vehicles in each video frames. But now I want to do tracking of only one vehicle with changes in my code.

So can anybody help me how to detect single vehicle by doing changes in my MATLAB Code ?

Matlab:
tic
clc;
clear all;
close all;

T= video.NumberOfFrames  ;           %number of frames%

frameHeight = video.Height;          %frame height

frameWidth = video.Width ;           %frameWidth

get(video);                          %return graphics properties of video

i=1;

for t=300:15:550  %select frames between 300 to 550 with interval of 15 from the video
frame_y=frame_x(:,:,:,i);

%figure,
%imshow(f1),title(['test frames :' num2str(i)]);
frame_z=rgb2gray(frame_y);                 %convert each colour frame into gray

frame_m(:,:,:,i)=frame_y; %Store colour frames in the frame_m array

%Perform Gaussian Filtering
h1=(1/8)*(1/8)*[1 3 3 1]'*[1 3 3 1]  ;   % 4*4 Gaussian Kernel
convn=conv2(frame_z,h1,'same');

g1=uint8(convn);

Filtered_Image_Array(:,:,i)=g1; %Store filtered images into an array
i=i+1;
end

%Apply 3-D Fourier Transform on video sequences
f_transform=fftn(Filtered_Image_Array);

%Compute phase spectrum array from f_transform
phase_spectrum_array =exp(1j*angle(f_transform));

%Apply 3-D Inverse Fourier Transform on phase spectrum array and
%reconstruct the frames
reconstructed_frame_array=(ifftn(phase_spectrum_array));

k=i;

i=1;
for t=1:k-1

%Smooth the reconstructed frame of Î(x, y, n) using the averaging filter.
Reconstructed_frame_magnitude=abs(reconstructed_frame_array(:,:,t));
H = fspecial('disk',4);
circular_avg(:,:,t) = imfilter(Reconstructed_frame_magnitude,H);

%Convert the current frame into binary image using mean value as the threshold
mean_value=mean2(circular_avg(:,:,t));
binary_frame = im2bw(circular_avg(:,:,t),1.6*mean_value);

%Perform Morphological operations
se = strel('square',3);
morphological_closing = imclose(binary_frame,se);
morphological_closing=imclearborder(morphological_closing); %clear noise present at the borders of the frames

%Superimpose segmented masks on it's respective frames to obtain moving
%objects
moving_object_frame = frame_m(:,:,:,i);
moving_object_frame(morphological_closing) = 255;
figure,
imshow(moving_object_frame,[]), title(['Moving objects in Frame :' num2str(i)]);

i=i+1;
end
toc

Last edited:

Related MATLAB, Maple, Mathematica, LaTeX News on Phys.org
So my question is that is it possible to
detect a single vehicle and perform
tracking of it using Fourier transform ?

1. Should I 1st detect all the
vehicles and perform tracking of
single vehicle from it ?

or

2. Is it possible to detect only one
vehicle and perform tracking from
it ?