My Projects

Illuvë
This was the final team project from the course 15-437 Web Application Development. Illuvë was a multiplayer web tank game. A player could register a new account through his or her email and password. Once a player confirmed his or her registration, he or she could log in to join the fun competition and fight battles against others. The basic idea was to fire at your opponents and dodge the bullets from others. Players who destroyed more tanks would rank higher in the scoreboard and get more reward points that could be used to upgrade the speed and the power of their tanks, and even change their appearance sometimes!
Lucas-Kanade, Matthew-Baker and Mean-Shift Trackers
The Lucas-Kanade tracker assumeed we already had a good initialization of the template and a close estimate p of the correct warp, and it needed to find the small linear change, delta p, that minimized the pixel-wise sum of square difference between the warped image and the template. The Matthew-Baker tracker improveed upon the Lucas-Kanade tracker by warping both the image and the template, which made it possible to compute the Jacobian and Hessian matrix of the template only once. Compared to Lucas-Kanade tracker, mean-shift tracker could deal with objects with more deformation in its appearance. It achieved this by utilizing the histogram of the template to compute the weights for each pixel and finally calculating the mean-shift vector.
3D Reconstruction by Triangulation and Stereo Rectification
There were two parts in this project: sparse reconstruction and dense reconstruction. For the sparse reconstruction, it first computed the fundamental matrix by eight point algorithm, and then it obtained epipolar correspondence and the essential matrix using fundamental matrix. Finally, it triangulated pairs of 2D points in the images to a set of 3D points and selected the correct projection matrix. For the dense reconstruction, it first rectified the images to make the epipolar line horizontal. Then, it computed disparity map and depth map and eventually, ploted the result in 3D.

Augmented Reality Application using Planar Homographies
This project first found point pairs between an image pair by looking for salient points using FAST (Features from Accelerated Segment Test) detector and extracting feature descriptors using BRIEF (Binary Robust Independent Elementary Features). Then it estimated and normalized planar homography from these point pairs, and ran RANSAC (RANdom SAmple Consensus) algorithm to reduce mismatches. Finally, it implemented an AR application by tracking a book in each frame of a target video and overlaying each frame from the source video (Kung Fu Panda) onto the book in the target video.
Scene Classification System with Bag of Visual Words
This project classified images into 8 scene categories from the SUN image dataset. It consisted of 3 parts. In the first part, the program sampled some points in each images and converted the pixels into high dimensional representations and then ran k-means algorithm to produce a visual words dictionary. In the second part, it assigned every pixel in the images to its closest visual word in the dictionary and extracted the histogram of visual words within each image. In the third part, it evaluated the classification system with test images by kNN (k Nearest Neighbors) algorithm.
Edge Detection by Hough Transform
This project detected edges in different images. It first applied Gaussian filters to reduce noise and spurious fine edges in the image. Then it computed the image gradients in both horizontal and vertical direction using Sobel filters. To preserve the best line and discard the similar ones, it used non-maximum suppression. Then, it calculated Hough transform to obtain the number of 'votes' for all the possible lines passing through the image. Finally, it found the n lines with the highest votes from Hough transform to get the final result.
Parallel PCA Applied to Surveillance Video
This was my final project from the course Parallel Programming. When PCA (Principal Component Analysis) was applied to videos, it could extract the principal components and separate the static background (principal components) from the moving objects (residuals). This project utilized OpenMP and reduced 54% of total execution time (including the time spent on processing the input and the output of the program) by one-sided Jacobi method and tall-and-skinny SVD (Singular Value Decomposition).
Monopoly
This was the final team project from the course JAVA Programming. Monopoly was a game where player competed to buy and upgrade estates to collect rent from others. The ultimate goal for each player was to become the richest player and make all other players go bankrupt. In each round, a player first rolled the dice to determine where to go, and therefore would encounter different events according to the type of the destinations, such as land owned by that player himself or herself, land owned by other player, terra nullius (land that is not owned by anyone), banks, vehicle stores, and Chance or Community Chest spots.