opencv / opencv-python

Automated CI toolchain to produce precompiled opencv-python, opencv-python-headless, opencv-contrib-python and opencv-contrib-python-headless packages.
https://pypi.org/project/opencv-python/
MIT License
4.3k stars 813 forks source link

The Behavior of the cv2.ORB algorithm changes from version 4.1.2.30 to 4.2.0.32 #452

Open christofhapp opened 3 years ago

christofhapp commented 3 years ago

Expected behaviour

I use the ORB image registration algorithm and it worked until 4.1.2.30. Same solution on same data!

Actual behaviour

From Version 4.1.2.32 to newest (4.5.1.48) it has a different (wrong) solution on the same data AND it needs about 3 times more time.

Steps to reproduce

def alignImages(im, imRef):
    MAX_FEATURES = 1000
    GOOD_MATCH_PERCENT = 0.5

    # Detect ORB features and compute descriptors.
    orb = cv2.ORB_create(MAX_FEATURES, scaleFactor=2, WTA_K=4, scoreType=cv2.ORB_HARRIS_SCORE, patchSize=61)

    keypoints1, descriptors1 = orb.detectAndCompute(im, None)
    keypoints2, descriptors2 = orb.detectAndCompute(imRef, None)
    #print('after kp2: ', time.time() - t)

    print('len keypoints:', len(keypoints1), ' ',len(keypoints2))

    # Match features.
    matcher = cv2.DescriptorMatcher_create(cv2.DESCRIPTOR_MATCHER_BRUTEFORCE_HAMMING)
    matches = matcher.match(descriptors1, descriptors2, None)

    #print('after matcher: ', time.time() - t)

    # Sort matches by score
    matches.sort(key=lambda x: x.distance, reverse=False)

    # Remove not so good matches
    numGoodMatches = int(len(matches) * GOOD_MATCH_PERCENT)
    matches = matches[:numGoodMatches]

    # Extract location of good matches
    points1 = np.zeros((len(matches), 2), dtype=np.float32)
    points2 = np.zeros((len(matches), 2), dtype=np.float32)

    for i, match in enumerate(matches):
        points1[i, :] = keypoints1[match.queryIdx].pt
        points2[i, :] = keypoints2[match.trainIdx].pt

    # Find homography
    h, mask = cv2.findHomography(points1, points2, cv2.RANSAC)
    return h
Issue submission checklist

sorry, i don't know if it is a opencv-python issue or a opencv issue.

asmorkalov commented 3 years ago

Potentially related: https://github.com/opencv/opencv/issues/16701