Personal computer-vision projects spanning classical multi-view geometry and modern deep-learning detection. Several of the classical algorithms are implemented from first principles rather than called from OpenCV, to work through the underlying maths.
Stack: Python · PyTorch · OpenCV · NumPy · Jupyter
Tracks a planar object (a book) through a video and projects a second video onto its surface with perspective-correct warping.
- SIFT keypoints, brute-force matching with Lowe's ratio test, plus spatial filtering of correspondences
- Homography estimation implemented from scratch — normalised DLT (isotropic point normalisation, design-matrix construction, solved by SVD, then denormalised)
- RANSAC implemented from scratch — minimal 4-point samples, reprojection-error scoring, inlier selection over 1000 iterations
- Temporal consistency check that rejects frames where a tracked corner jumps beyond a threshold, suppressing outlier homographies across the sequence
Road-object detector trained for an ADAS pipeline across 9 classes covering regional vehicle types and road-surface hazards.
- mAP@50 0.87 · mAP@50–95 0.69, validated on 1,833 images / 4,355 annotated instances
- Dataset of ~15,000 images aggregated from multiple public sources, with automated cleaning and unification of class taxonomies and label indices across datasets
- Evaluated on real driving footage from a vehicle-mounted camera and in the CARLA simulator
Benchmark of three detector families on COCO val2017 using pycocotools, with per-scale AP breakdown, backbone feature-map visualisation, and qualitative success/failure analysis across scenes.
| AP@[.50:.95] | YOLOv8 | Faster R-CNN | DETR |
|---|---|---|---|
| all | 0.312 | 0.353 | 0.402 |
| small | 0.112 | 0.187 | 0.193 |
| large | 0.479 | 0.477 | 0.587 |
Known limitation: the YOLOv8 predictions were capped at the top 20 detections per image, while the other two models used COCO's default maxDets=100. This understates YOLO's recall and absolute AP, so the numbers above are not a fair head-to-head. The qualitative conclusion — one-stage detection is weaker on small objects — is consistent with the published literature and with the DETR and Faster R-CNN figures, which land close to their official baselines.
Stereo disparity via dynamic programming implemented from scratch, optimising correspondences along scanlines for global consistency rather than matching each window independently as in block matching.
Panorama pipeline written from scratch rather than using cv2.Stitcher — feature detection and matching, homography estimation, warping, and blending.
Controlled comparison of five CNN architectures (VGG, ResNet, MobileNet, InceptionV3, DenseNet121) trained both from scratch and with ImageNet transfer learning, to isolate the effect of pretraining on a small dataset.
| Test accuracy % | From scratch | + Transfer learning |
|---|---|---|
| VGG | 28.9 | 42.1 |
| ResNet | 47.4 | 47.4 |
| MobileNet | 36.8 | 52.6 |
| InceptionV3 | 42.1 | 21.1 |
| DenseNet121 | 42.1 | 42.1 |
Known limitation: the test set is 38 images, so every score is a multiple of 1/38 and the gaps between the top models are one or two images. The ranking is not statistically meaningful and no architecture should be called the winner from this data. Transfer learning clearly helped the lightweight models; the InceptionV3 drop is most likely an input-resolution mismatch, since InceptionV3 expects 299×299 while the others take 224×224.
Lane-line detection with edge detection and OpenCV's Hough transform, with parameter tuning for road scenes.
Classical spatial filtering, noise reduction, and edge detection.