159731 Assignment 3
Due: 7/6/2024
Your task for this assignment is to write a program to perform video stabilisation.
On stream is a short video shot with no video stabilisation. For this assignment you must write a C++ program using OpenCV to produce a stabilised video. You will need to find cumulative homography matrices for a number of sequential frames (initially try a 19 frame window). These matrices need to be relative to the first frame but must be calculated by multiplying a cumulative matrix (initially the identity matrix) by the homography between the current and previous frames. You can use any method you like to find the homography, try feature point matching or optical flow.
You must then smooth the central matrix using a Gaussian weighted average. Using this smoothed matrix and the unsmoothed previous matrix, find a new matrix that will warp the central frame using warpPerspective() and then display it. Display the output image with a green border as shown above. You will need a buffer of N frames and a buffer of N matrices where N is the smoothing window size. Wait until N frames have been captured before displaying any output and keep displaying frames until the buffer is empty.
Test different values for the size and standard deviation of the Gaussian filter window, once you have values which give smooth motion, you can hard code them in the program.
I will test your code on different videos and using a webcam.
Your code must be in C++, you must use OpenCV version 4 or later. Use the CMake example provided to make sure I can compile your code. Submit a single .cpp file on stream (no zip files), if your solution does not compile and run on my machine, you will lose marks. Your program should take an optional single parameter, the name of the video file. If the video file name is missing you should open the webcam with index 0.
The assignment is worth 10 marks.
Submit your assignment on Stream by the due date.