MATLAB Single vehicle tracking using Fourier transform-MATLAB

AI Thread Summary
The discussion centers on a project focused on phase-only reconstruction of signals obtained from FFT, specifically applied to vehicle detection in traffic video footage captured by a stationary camera. The user has successfully detected all vehicles in the video frames using MATLAB code but seeks guidance on modifying the code to track a single vehicle. Key questions include whether to first detect all vehicles and then isolate one for tracking or if it's feasible to detect and track a single vehicle directly. The code provided outlines the process of reading video frames, applying Gaussian filtering, performing a 3-D Fourier Transform, and reconstructing frames using the phase spectrum. The user is looking for advice on the best approach to achieve single vehicle tracking within the existing framework.
ramdas
Messages
78
Reaction score
0
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;

%read video file
video = VideoReader('D:\dvd\Matlab code\test videos\5.mp4');

T= video.NumberOfFrames  ;           %number of frames%

frameHeight = video.Height;          %frame height

frameWidth = video.Width ;           %frameWidth

get(video);                          %return graphics properties of videoi=1;

for t=300:15:550  %select frames between 300 to 550 with interval of 15 from the video
    frame_x(:,:,:,i)= read(video, t);
    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:
Physics 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 ?

or2. Is it possible to detect only one
vehicle and perform tracking from
it ?
 
Back
Top