Я пытаюсь получить оценку позы передней поверхности коробки (изображение ниже), используя только минимальное количество точек (т.е. 4), используя opencv cv2.solvePnPRansac.
Вот мои данные:
Набор точек 2D-пикселей выбирается вручную и помечается белым цветом.
Что касается 3D-координат, Я предположил, что размеры прямоугольника составляют 3x4x6 (любые единицы измерения), а начало координат — это точка в верхнем левом углу (pixel_coord = [1065, 602]).
Коэффициент искажения равен просто np.zeros((5,1)).astype('float32')
Внутренний параметр камеры указан в этом блокноте GitHub.
Я пытался проверить выходные данные rvec и tvec с помощью cv2.projectPoints. Новые перепроецированные 2D-точки показаны на рисунке ниже и отмечены красным цветом.
Как видно, первый набор из трех точек перепроецируется идеально (белый и красный цвета меток накладываются друг на друга). но перепроекция 4-й точки очень плохая.
Мои вопросы:
Это поведение «нормально»?
Я также пробовал использовать более четырех 3D-2D соответствующие точки, но результаты ухудшаются! Что-то не так с моим методом? (или код?)
Нужно ли проделать какую-то итеративную работу?
Я пытаюсь получить оценку позы передней поверхности коробки (изображение ниже), используя только минимальное количество точек (т.е. 4), используя opencv cv2.solvePnPRansac. Вот мои данные: [list] [*]Набор точек 2D-пикселей выбирается вручную и помечается белым цветом. [*]Что касается 3D-координат, Я предположил, что размеры прямоугольника составляют 3x4x6 (любые единицы измерения), а начало координат — это точка в верхнем левом углу (pixel_coord = [1065, 602]). [*]Коэффициент искажения равен просто np.zeros((5,1)).astype('float32') [*]Внутренний параметр камеры указан в этом блокноте GitHub. [/list] Я пытался проверить выходные данные rvec и tvec с помощью cv2.projectPoints. Новые перепроецированные 2D-точки показаны на рисунке ниже и отмечены красным цветом. Как видно, первый набор из трех точек перепроецируется идеально (белый и красный цвета меток накладываются друг на друга). но перепроекция 4-й точки очень плохая. Мои вопросы: Это поведение «нормально»? Я также пробовал использовать более четырех 3D-2D соответствующие точки, но результаты ухудшаются! Что-то не так с моим методом? (или код?) Нужно ли проделать какую-то итеративную работу? [code]import os import numpy as np import matplotlib.pyplot as plt import cv2
def project_planes(ax, src, c): x_src = [val[0] for val in src] + [src[0][0]] y_src = [val[1] for val in src] + [src[0][1]] ax.plot(x_src, y_src, '--', c=c)
# read image image1 = cv2.imread('image1.jpg') # the image can be found on the github link above. image1 = cv2.cvtColor(image1, cv2.COLOR_BGR2RGB)