Почему OpenCV-разложенная матрица перевода гомографии имеет три значения? - PullRequest
1 голос
/ 30 января 2020

В двух словах ... матрица перевода, возвращенная из декомпозиции матрицы гомографии, на самом деле является матрицей 3X1 (действительно вектором). Тем не менее, каждое описание матрицы перевода является матрицей 3X2.

Вот два изображения (ИК-камера), изображение положения 1 (приблизительные декартовы координаты камеры x = 0 мм, y = 300 мм): initial image, x=0mm, y=300mm

Это изображение положения 2 (приблизительно декартовы координаты камеры x = 680 мм, y = 0 мм): final image, x=680 mm, y=0mm

Я использовал затем +90 баллов для определения матрицы гомографии (M):

M, mask = cv2.findHomography(source_pts, destination_pts, cv2.RANSAC,5.0)

Этот процесс выбрал достаточное количество ключевых точек: matching keypoints between the two images

Если вы примените эту матрицу гомографии к исходному изображению - она ​​отлично работает:

im_out = cv2.warpPerspective(img1,M, (640,480) )

homography applied to original image

и вывод разницы между наборами точек:

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

Вот моя ссылка

Как мне получить значения, возвращенные из матрицы разложения в матрицу перевода в приведенной выше форме? **ie ... как мне преобразовать это: [-0.6097, -0.2626, 0.01638967]

в этот формат: ** translation matrix

Спасибо за вашу помощь.

1 Ответ

1 голос
/ 03 февраля 2020

Давайте возьмем ваш первый вектор перевода:

np.array([-0.60978834, -0.26268874, 0.01638967])

Мне кажется, это ваш tx, ty и tz оценочный компонент перевода. Плюс эти величины имеют смысл, когда я смотрю на изображение с зелеными точками. Поэтому я предполагаю, что ваша матрица перевода в однородных координатах будет:

M = np.array([[1, 0, 0, -0.60978834], [0, 1, 0, -0.26268874], [0, 0, 1, 0.01638967]])

Или просто:

M = np.array([[1, 0, -0.60978834], [0, 1, -0.26268874]])

Если игнорировать компонент tz. Разве это не то, что вы ищете?

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