В двух словах ... матрица перевода, возвращенная из декомпозиции матрицы гомографии, на самом деле является матрицей 3X1 (действительно вектором). Тем не менее, каждое описание матрицы перевода является матрицей 3X2.
Вот два изображения (ИК-камера), изображение положения 1 (приблизительные декартовы координаты камеры x = 0 мм, y = 300 мм): ![initial image, x=0mm, y=300mm](https://i.stack.imgur.com/rQZw4.jpg)
Это изображение положения 2 (приблизительно декартовы координаты камеры x = 680 мм, y = 0 мм): ![final image, x=680 mm, y=0mm](https://i.stack.imgur.com/9Gfl5.jpg)
Я использовал затем +90 баллов для определения матрицы гомографии (M):
M, mask = cv2.findHomography(source_pts, destination_pts, cv2.RANSAC,5.0)
Этот процесс выбрал достаточное количество ключевых точек: ![matching keypoints between the two images](https://i.stack.imgur.com/1Usbx.png)
Если вы примените эту матрицу гомографии к исходному изображению - она отлично работает:
im_out = cv2.warpPerspective(img1,M, (640,480) )
![homography applied to original image](https://i.stack.imgur.com/5CdhA.jpg)
и вывод разницы между наборами точек:
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].
Насколько я понимаю, матрица перевода будет иметь вид: ![translation matrix](https://i.stack.imgur.com/PAhCG.png)
Вот моя ссылка
Как мне получить значения, возвращенные из матрицы разложения в матрицу перевода в приведенной выше форме? **ie ... как мне преобразовать это: [-0.6097, -0.2626, 0.01638967]
в этот формат: ** ![translation matrix](https://i.stack.imgur.com/PAhCG.png)
Спасибо за вашу помощь.