This is an implementation of SIFT (David G. Lowe's scale-invariant feature transform) done entirely in Python with the help of NumPy. This implementation is based on OpenCV's implementation and returns OpenCV KeyPoint objects and descriptors, and so can be used as a drop-in replacement for OpenCV SIFT. This repository is intended to help computer vision enthusiasts learn about the details behind SIFT.
You can find a step-by-step, detailed explanation of the code in this repo in my two-part tutorial:
I'll walk you through each function, printing and plotting things along the way to develop a solid understanding of SIFT and its implementation details.