This project implements a SIFT-inspired feature matching pipeline for matching images taken from multiple viewpoints of the same scene. The pipeline includes:
- Harris corner detection
- Local patch and SIFT-like descriptors
- Ratio-test-based feature matching
- Panorama stitching using estimated homographies
- Uses image gradients (Sobel filter) and second-moment matrix
- Computes Harris response score:
$$ R = \text{det}(A) - \alpha \cdot (\text{trace}(A))^2 $$ - Applies max-pooling for non-maximum suppression (NMS)
- Extracts fixed-size grayscale patches centered at interest points
- Normalizes each patch to unit norm for simple but effective matching
- Expected matching accuracy on Notre Dame: ~40–50%
- Implements Lowe's Nearest Neighbor Distance Ratio (NNDR) test: $$ \text{Ratio} = \frac{||f_1 - f_{match1}||}{||f_1 - f_{match2}||} $$
- Filters robust matches by thresholding this ratio
- Returns top confident matches and visualizes them
- Computes 4×4 grid of 8-bin gradient histograms over 16×16 patch
- Applies Gaussian weighting and orientation binning
- Performs Square Root SIFT normalization for robustness
- Achieves >80% accuracy on Notre Dame image pair
- Detects features and estimates homography using
cv2.findHomography() - Warps and blends images using
cv2.warpPerspective() - Stitching tested on 3 given panoramas + 1 custom pair
- See Project 0 for detailed environment setup.
- Ensure that you are using the environment
cv_proj2, which you can install using the install scriptconda/install.sh.