The SIFT keypoints between two images are matched by identifying their nearest neighbors. But in some cases, because of factors such as noise, the second closest match may seem to be closer to the first. In this case, we compute the ratio of closest distance to the second closest distance and check if it is above 0.8. If the ratio is more than 0.8, it means they are rejected.
This efficiently eliminates approximately 90% of false matches, and only around 5% correct matches (as per the SIFT paper). Let's use the knnMatch() function to get k=2 best matches for a keypoint; we will also apply the ratio test:
# make sure the opencv version is 3.3.0 with# pip install opencv-python==3.3.0.10 ...