Я пытаюсь реализовать свою собственную оценку гомографии и позы в OpenCV. Предположим, у меня есть квадратное изображение в качестве модели, которую я хочу найти во входном кадре с камеры. Мой вопрос о том, как подготовить данные модели для расчета гомографии.
Я сделал следующую процедуру:
1-я извлек 3 соответствующих набора на обоих изображениях.
Input features: Model Features:
p1_Input(278,278)---> p1_model(137,273)
p2_Input(317,235)---> p2_model(176,230)
p3_Input(217,204)---> p3_model(76,199) //all in pixel
2- Решение проблемы P3P:
а) нормализация точек ввода с использованием внутренних параметров камеры:
u.x=(p1_Input.x - cx) / fx
u.y=(p1_Input.y - cy) / fy
u.z=1
v.x=(p2_Input.x - cx) / fx
v.y=(p2_Input.y - cy) / fy
v.z=1
w.x=(p3_Input.x - cx) / fx
w.y=(p3_Input.y - cy) / fy
w.z=1
б) нормализовать длину, чтобы иметь единичный вектор:
d = sqrt(u.x*u.x + u.y*u.y + 1);
u.x=u.x/d;
u.y=u.y/d;
u.z=u.z/d; // and same for v and w
c) Нахождение расстояния между u и фокусом камеры (то же самое для v и w) путем решения p3p и сохранения в a, b и c
г) вычисление трехмерных координат:
A_Input.x=a*u.x;
A_Input.y=a*u.y;
A_Input.z=a*u.z; // same for B_input and C_Input
like:
A_Input:(-0.0899342 ,0.0570672 ,0.976046)
B_Input:(-0.0197703 ,-0.0194311 ,0.955101)
C_Input:(-0.197233 ,-0.0746457 ,0.967379)
3-Вычислительная гомография
Мой вопрос возникает здесь. Как мне подготовить и изменить p1_model,p2_model and p3_model
для подготовки к вычислению гомографии?
Очевидно, что A_Input
— это 3D-вектор с нормализованной датой, а p1_model
— это 2D-вектор в пикселях.
После решения проблемы остальное будет следующим:
а) нахождение точки центроида для обоих наборов.
б) нахождение H с использованием этой формулы dot prodoct
4- нахождение жесткого преобразования с использованием H и SVD