Исправление изображения — OpenCV — PythonPython

Программы на Python
Ответить
Anonymous
 Исправление изображения — OpenCV — Python

Сообщение Anonymous »

Я пытаюсь исправить пары изображений из 7-сцен набора данных RGB-D
. Поскольку набор данных предоставляет наземные данные о позе, я не пытаюсь извлечь совпадающие точки и вычислить F. Вместо этого я вычисляю относительный сдвиг и вращение, используя https://math.stackexchange.com/a/709658, что кажется правильным, и относиться к двум кадрам как к калиброванной сцене.

Однако результаты исправления — мусор. Я пробовал играть с несколькими значениями альфа (-1, 0, 1 и многими значениями в диапазоне [0,1]), но ничего не дало хороших результатов.

Относительное R и кажется, что все в порядке (ближние кадры имеют небольшие повороты и перемещения).

Для матрицы камеры я использую значения, указанные в наборе данных (основная точка (320 240), фокусное расстояние (585 585))

Код: Выделить всё

import cv2
import numpy as np
from matplotlib import pyplot as plt

frame1 = 100
frame2 = 160

img_1_path = './chess/seq-01/frame-000{}.color.png'.format(frame1)
img_2_path = './chess/seq-01/frame-000{}.color.png'.format(frame2)

pose_1_path = './chess/seq-01/frame-000{}.pose.txt'.format(frame1)
pose_2_path = './chess/seq-01/frame-000{}.pose.txt'.format(frame2)

img_1 = cv2.imread(img_1_path)
img_2 = cv2.imread(img_2_path)

pose1 = np.loadtxt(pose_1_path)
pose2 = np.loadtxt(pose_2_path)

R1 = pose1[0:3, 0:3]
t1 = pose1[0:3, 3]

R2 = pose2[0:3, 0:3]
t2 = pose2[0:3, 3]

# https://math.stackexchange.com/questions/709622/relative-camera-matrix-pose-from-global-camera-matrixes
R = np.matmul(np.linalg.inv(R2), R1)
T = np.matmul(np.linalg.inv(R2), (t1 - t2))

# https://www.microsoft.com/en-us/research/project/rgb-d-dataset-7-scenes/
px = 320.0
py = 240.0
fx = 585.0
fy = 585.0

cameraMatrix1 = np.array(
[
[fx, 0, px],
[0, fy, py],
[0, 0, 1.0]
]
)

cameraMatrix2 = cameraMatrix1

distCoeff = np.zeros(4)

R1, R2, P1, P2, Q, roi1, roi2 = cv2.stereoRectify(
cameraMatrix1=cameraMatrix1,
distCoeffs1=distCoeff,
cameraMatrix2=cameraMatrix2,
distCoeffs2=distCoeff,
imageSize=(640, 480),
R=R,
T=T,
flags=cv2.CALIB_ZERO_DISPARITY,
alpha=1)

map1x, map1y = cv2.initUndistortRectifyMap(
cameraMatrix=cameraMatrix1,
distCoeffs=distCoeff,
R=R1,
newCameraMatrix=P1,
size=(640, 480),
m1type=cv2.CV_32FC1)

map2x, map2y = cv2.initUndistortRectifyMap(
cameraMatrix=cameraMatrix2,
distCoeffs=distCoeff,
R=R2,
newCameraMatrix=P2,
size=(640, 480),
m1type=cv2.CV_32FC1)

img1_rect = cv2.remap(img_1, map1x, map1y, cv2.INTER_LINEAR)
img2_rect = cv2.remap(img_2, map2x, map2y, cv2.INTER_LINEAR)

fig, ax = plt.subplots(nrows=2, ncols=2)

plt.subplot(2, 2, 1)
plt.imshow(img_1)

plt.subplot(2, 2, 2)
plt.imshow(img_2)

plt.subplot(2, 2, 3)
plt.imshow(img1_rect)

plt.subplot(2, 2, 4)
plt.imshow(img2_rect)

plt.show(block=False)
plt.pause(10)
plt.close()
Изображение
Есть идеи, что такое Я пропал? Должен ли я не доверять основным данным о положении истины или это недостаток в моем конвейере?

Спасибо.

Подробнее здесь: https://stackoverflow.com/questions/459 ... ncv-python
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»