I am trying to use an ORB keypoint detector, and it seems to return far fewer points than a SIFT detector and a FAST detector.
This image shows the key points found by the ORB detector:

and this image shows the key points found during the SIFT detection phase (FAST returns a similar number of points).

The presence of such a small number of points leads to very poor results of the comparison of signs in the images. I'm just curious about the ORB detection phase right now, because it seems like I'm getting the wrong results. I tried using the ORB detector with default parameters, as well as with user parameters described in detail below.
Why is there such a big difference?
Code:
orb = cv2.ORB_create(edgeThreshold=15, patchSize=31, nlevels=8, fastThreshold=20, scaleFactor=1.2, WTA_K=2,scoreType=cv2.ORB_HARRIS_SCORE, firstLevel=0, nfeatures=500)
kp2 = orb.detect(img2)
img2_kp = cv2.drawKeypoints(img2, kp2, None, color=(0,255,0), \
flags=cv2.DrawMatchesFlags_DEFAULT)
plt.figure()
plt.imshow(img2_kp)
plt.show()