Я работаю над проектом, в котором мне нужно обнаруживать объекты (небольшие вагоны на железной дороге) с двух камер с неперекрывающимися видами с высоты птичьего полета (см. Ниже два изображения)
Как видите, автомобили обнаруживаются и возвращаются их координаты Centroid.
Однако я пытаюсь преобразовать два вида в одно изображение, представляющее только железную дорогу, по которой едет вагон.
Поэтому для моделирования я создал целевое изображение, на котором есть только железная дорога (черная траектория, показанная на изображении выше), следующим образом:
Проведя некоторое исследование, я приземлился с помощью метода openCV под названием: cv2.findHomography()
, который находит матрицу гомографии между двумя плоскостями.
Два изображения, поступающие с двух камер, соответственно имеют разрешение 1280x720. Для целевого изображения оно имеет разрешение 1440 x 480.
мой код написан следующим образом:
import numpy as np
import cv2
def Perspective_transf(src_point,h):
a = np.array([src_point])
a=np.array(a.transpose())
a=np.vstack((a,np.array(1)))
a_transformed_homo = np.dot(h,a)
scale_factor=a_transformed_homo[2][0]
a_transformed_euk=np.divide(a_transformed_homo,scale_factor)
return a_transformed_euk
# Source points: from camera image which are the same as the two cameras have the same resolution
pts_src=np.array([[0,0],[1280,0],[720,1280],[0,720],[640,360]])
#destination correspondences of the pts_src on the destination image (for camera 1)
pts_dst1=np.array([[0,0],[720,0],[720,480],[0,480],[360,240]])
#destination correspondences of the pts_src on the destination image (for camera2)
pts_dst2=np.array( [[720,0],[1440,0],[1440,480],[720,480],[1080,240]])
#homography between the first camera image plane and the destination image
h1, status1 = cv2.findHomography(pts_src, pts_dst1)
#homography between the second camera image plane and the destination image
h2, status1 = cv2.findHomography(pts_src, pts_dst2)
Теперь, после этого, я оценил омографы, для каждого обнаруженного центроида я могу спроецировать (преобразовать) его на целевое изображение, используя омографы.
Когда я запускаю свой код, я получаю следующий результат:
Как вы можете видеть, траектории, созданные путем преобразования обнаруженного центра тяжести движения автомобиля из поля зрения одной камеры в поле зрения другой камеры, не выровнены с определенной траекторией, имитирующей железную дорогу, и повернуты по сравнению с изображением.
Итак, что я делаю неправильно и почему мои результаты выглядят так?
Заранее спасибо
Халед Джбейли