OpenCV, Python: cómo unir dos imágenes de diferentes tamaños y fondos transparentes

He estado trabajando en un proyecto en el que uno imágenes de un drone volando en un modelo de cortadora de césped. Soy capaz de unir imágenes de una sola pasada (gracias a muchas respuestas en stackoverflow) pero cuando trato de unir dos pases separados lateralmente, la transformación que produce mi método no tiene sentido. Aquí están las dos imágenes que estoy tratando de coser:

introduzca la descripción de la imagen aquí introduzca la descripción de la imagen aquí

Y aquí está el código que he estado usando para estimar una homografía entre los dos, base y curr .

 base_gray = cv2.cvtColor(base, cv2.COLOR_BGRA2GRAY) curr_gray = cv2.cvtColor(curr, cv2.COLOR_BGRA2GRAY) detector = cv2.ORB_create() base_keys, base_desc = detector.detectAndCompute(base_gray, None) curr_keys, curr_desc = detector.detectAndCompute(curr_gray, None) FLANN_INDEX_LSH = 6 flann_params = dict(algorithm = FLANN_INDEX_LSH, table_number = 12, key_size = 20, multi_probe_level = 2) search_params = dict(checks=100) matcher = cv2.FlannBasedMatcher(flann_params, search_params) matches = matcher.match(base_desc, curr_desc) max_dist = 0.0 min_dist = 100.0 for match in matches: dist = match.distance min_dist = dist if dist  max_dist else max_dist good_matches = [match for match in matches if match.distance <= 10 * min_dist ] base_matches = [] curr_matches = [] for match in good_matches: base_matches.append(base_keys[match.queryIdx].pt) curr_matches.append(curr_keys[match.trainIdx].pt) bm_final = np.asarray(base_matches) cm_final = np.asarray(curr_matches) # find perspective transformation using the arrays of corresponding points transformation, hom_stati = cv2.findHomography(cm_final, bm_final, method=cv2.RANSAC, ransacReprojThreshold=1) 

Como dije, no funciona. ¿Es porque los fondos transparentes están jugando con el cálculo?

    Creo que Flann probablemente no es lo que quieres usar para hacer coincidencias aquí. Primero, de hecho, ya que está convirtiendo a escala de grises, los puntos negros, los bordes de las imágenes, etc. probablemente se incluirán en su conjunto de características, lo que no desea. En segundo lugar, Flann utiliza métodos para construir descriptores específicos para una búsqueda rápida a través de una base de datos de imágenes; se utiliza para CBIR , no para la estimación de homografía.

    En su lugar, simplemente adopte un enfoque normal con SIFT o SURF u ORB o BRISK . Tenga en cuenta que todos ellos permiten agregar una mask para su paso de detección de puntos clave, para que pueda crear una máscara desde el canal alfa para ignorar los puntos clave. Consulte la documentación de OpenCV para SIFT y SURF y para ORB y BRISK para obtener más información.