Можно ли наложить два изображения, которые имеют общие ориентиры, но разные детали, используя алгоритм сопоставления OpenCV - PullRequest
3 голосов
/ 08 июля 2019

Я использую следующий код для наложения изображений, полученных с помощью другой микроскопии.Два изображения описывают одну и ту же ткань, но с разными методами.

def match_images_using_orb(em_image, confocal_image): 

    gray_confocal = cv2.cvtColor(confocal_image, cv2.COLOR_RGB2GRAY)
    #em_image is already gray

    orb = cv2.ORB_create(500) 
    keypoints1, descriptors1 = orb.detectAndCompute(em_image, None) 
    keypoints2, descriptors2 = orb.detectAndCompute(gray_confocal, None)

    #brute force matcher
    matcher = cv2.BFMatcher(cv2.NORM_HAMMING)
    matches = matcher.match(descriptors1, descriptors2) 

    matches.sort(key = lambda x: x.distance, reverse = False)
    top_matches = int(len(matches) * 0.1)
    matches = matches[:top_matches]
    imMatches = cv2.drawMatches(em_image, keypoints1, gray_confocal, keypoints2, matches, None)

    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


    h, _ = cv2.findHomography(points1, points2, cv2.RANSAC)

    height, width, _ = em_image.shape 

    try:
        #exclude negative homography
        if h[ h < 0].size == 0:
            em_reg = cv2.warpPerspective(confocal_image, h, (width, height))
        else:
            return False 
    except: 
        return False
    else:
        return (imMatches, em_reg,  h)  

Поскольку два изображения различны, но имеют общие метки, использование этого алгоритма может быть неправильным.

Моя цель - узнать, где находится зеленый и красный цвета на увеличенном изображении.Для этого мне нужно повернуть изображение в соответствии с гомографией в зависимости от некоторых наземных отметок, как показано на изображении ниже (просто пример)

Так что мой вопрос таков;если я уже знаю некоторые ориентиры, такие как синий цвет на обоих из двух изображений (синий цвет), как передать гомографию этих ориентиров к алгоритму вручную, чтобы повернуть маленькое изображение в позиции записи, чтобы я мог знать, где находится зеленый и красный цветанаходится (неизвестно).

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...