This is a work in progress, more demonstrations will be added soon.


Motion Estimation for Video Processing

Motion Estimation algorithms find the motion between video frames; the frames originate from a 3D scene projected on to a 2D screen. Motion estimation is useful for video compression, aligning images and motion segmentation amongst other uses.

In this project I wrote code implementing global motion estimation, implemented algorithms for block based local motion estimation, and implemented a classic optical flow estimator to compare with RAFT, a deep model for estimating optical flow.

Optical Flow Images

Optical Flow Visualisation

Read the Project Details >
View code on github


Feature Detection, Matching and Tracking

Core tasks for 2D and 3D multiview geometry are fundamental matrix estimation, camera calibration, homography estimation, disparity estimation and object tracking. Feature detection, matching and tracking algorithms can be used to find the correspondences between images needed for these tasks.

In this project I wrote code to run and compare classic feature detection and matching methods plus recent deep methods. I also wrote code implementing the classic KLT tracker and compared it to CoTracker, a transformer based model.

LightGlue matches

SuperPoint Features matched with LightGlue

Read the Project Details >
View code on github


Building 3D Models from Real World Data

Images or video can be used to build 3D models via Structure from Motion (SfM) or Simultaneous Localisation and Mapping (SLAM). SfM is an offline technique that uses all the images of a scene to generate a model while SLAM is an online technique that builds the model iteratively but cannot use the constraints available from all the views until they have been captured.

In this project I wrote scripts to automate running COLMAP to generate sparse and dense 3D reconstructions and also scripts to use OpenMVS to generate dense 3D point clouds and textured mesh models.

Point cloud and mesh

Stages in Dense Reconstruction

Read the Project Details >
View code on github


Advanced 3D Model Representation

Models from 3D reconstruction can make good approximations to the true 3D surface. Advanced 3D representations like NeRFs and Gaussian Splatting can represent 3D scenes with more detail and can incorporate additional visual parameters that are suitable for photorealistic novel view synthesis.

In this project I demonstrate using OpenSplat to build Gaussian Splat models and also built a docker image for gsplat in order to test other algorithms and make comparisons.

Gaussian Splatting

3D Gaussian Splats

Read the Project Details >
View code on github