Каковы единицы измерения cv2.triangulatePoints()?Python

Программы на Python
Anonymous
Каковы единицы измерения cv2.triangulatePoints()?

Сообщение Anonymous »

У меня есть система стереокамер, состоящая из двух камер, расположенных перпендикулярно друг другу, но направленных в общий центр. Я успешно откалибровал каждую камеру, а также стереокалибровал ту же систему с помощью OpenCV, используя плату ChArUco, единичные квадраты которой составляют 13 см x 13 см. Я получил ошибку калибровки стерео около 1,39 пикселей. Я никогда не указывал размер единичных квадратов.
Я также использовал OpenCV для отслеживания интересующего объекта, кадры которого я снял, используя синхронное получение изображения с теми же двумя камерами (выполняемое как постобработка). Я успешно триангулировал те же 2D-точки с помощью OpenCV. Короче говоря, я неискажал двумерный массив точек из изображений каждой камеры, рассчитал матрицы проекций, используя левую камеру в качестве начала координат системы, и K2 [R | t] в качестве матрицы проекции для камеры 2. Затем я преобразовал полученный вектор из функции триангуляции в мировые координаты и построил результат (который прилагается).
Я точно знаю сферу упал как минимум на 4 дюйма, но расстояние по оси Z неверно на представленном графике. Согласно этому графику, сфера едва упала на 0,2 единицы.
Мой вопрос: на что я смотрю? В каких единицах эти координаты? Могу ли я их преобразовать? Как указать или преобразовать единицы измерения, в которых выводится выходной вектор?
TLDR: Каковы ожидаемые единицы измерения выходного 4D-вектора из функции cv2.triangulatePoints() (т. е. в пикселях, см и т. д.)? Как преобразовать выходные данные в нужные единицы измерения?
3D-траектория
[img]https://i.sstatic.net /w3JCu3Y8.png[/img]

Я попробовал поискать в Интернете то, что сказали другие, и все, что я нашел, это то, что я могу указать единицы измерения в векторе перевода, т.е. Но я не уверен, как это сделать?
Изменить: по запросу здесь приведен фрагмент кода, в котором создается объект калибровки. Поскольку мои квадраты имеют размер 13 x 13 см, нужно ли мне масштабировать self.objp на 13?

class Calibration(object):
def __init__(self, cam1_path, cam2_path):
self.criteria = (cv2.TERM_CRITERIA_EPS | cv2.TERM_CRITERIA_MAX_ITER, 30, 1e-5)
self.chessboard_size = (5, 7) # internal corners (height, width)
self.search_window = (20,20,)
self.objp = np.zeros(
(self.chessboard_size[0] * self.chessboard_size[1], 3), np.float32
)
self.objp[:, :2] = np.mgrid[
0 : self.chessboard_size[0], 0 : self.chessboard_size[1]
].T.reshape(-1, 2)
# Arrays to store object points and image points from all the images.
self.objpoints = [] # 3d points in real world space
self.imgpoints_1 = [] # 2d points in image plane.
self.imagepoints_2 = [] # 2d points in image plane.

self.cal_path1, self.cal_path2 = cam1_path, cam2_path
self.calibrate_cam(self.cal_path1, self.cal_path2)


Подробнее здесь: https://stackoverflow.com/questions/790 ... latepoints

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