В двух словах ... матрица перевода, возвращенная из декомпозиции матрицы гомографии, на самом деле является матрицей 3X1 (действительно вектором). Тем не менее, каждое описание матрицы перевода является матрицей 3X2.
Вот два изображения (ИК-камера), изображение положения 1 (приблизительные декартовы координаты камеры x = 0 мм, y = 300 мм):
Это изображение положения 2 (приблизительно декартовы координаты камеры x = 680 мм, y = 0 мм):
Я использовал затем +90 баллов для определения матрицы гомографии (M):
M, mask = cv2.findHomography(source_pts, destination_pts, cv2.RANSAC,5.0)
Этот процесс выбрал достаточное количество ключевых точек:
Если вы примените эту матрицу гомографии к исходному изображению - она отлично работает:
im_out = cv2.warpPerspective(img1,M, (640,480) )
и вывод разницы между наборами точек:
np.mean(dst_pts-src_pts , axis = 0)
массив ([[- - 305.16345, -129.94157]], dtype = float32)
довольно близко к точечному произведению матрицы гомографии для одного точка ....
np.dot(M,[1,1,1])
массив ([- 293.00352303, -132.93478376, 1.00009461])
Я разложил матрицу гомографии с помощью следующей команды:
num, Rs, Ts,Ns = cv2.decomposeHomographyMat(M, camera_matrix)
Возвращает 4 решения (num), матрицу вращения, матрицу перевода и Ns (не помню, что это).
Мне интересно в матрице перевода.
Во-первых ... Матрица перевода перечисляет 4 решения (это правильно?):
Ts =
[array([[-0.60978834],[-0.26268874],[ 0.01638967]]),
array([[ 0.60978834], [ 0.26268874],[-0.01638967]]),
array([[-0.19035409],[-0.06628793],[ 0.63284046]]),
array([[ 0.19035409], [ 0.06628793],[-0.63284046]])]
Во-вторых, и самое удивительное, что каждое из решений имеет 3 значения .. .
Например, первое решение: [-0,6097, -0,2626, 0,01638967].
Насколько я понимаю, матрица перевода будет иметь вид:
Вот моя ссылка
Как мне получить значения, возвращенные из матрицы разложения в матрицу перевода в приведенной выше форме? **ie ... как мне преобразовать это: [-0.6097, -0.2626, 0.01638967]
в этот формат: **
Спасибо за вашу помощь.