Single vehicle tracking using Fourier transform-MATLAB
    조회 수: 1 (최근 30일)
  
       이전 댓글 표시
    
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 ?
   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 video
i=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
댓글 수: 0
답변 (0개)
참고 항목
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!
