Расчет гомографии плоского объекта и оценка позы

Я пытаюсь реализовать свою собственную оценку гомографии и позы в 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

более подробная информация доступна здесь и здесь


person batista cori    schedule 22.10.2012    source источник
comment
вам нужно 4 точки, чтобы однозначно определить перспективное преобразование, вы делаете аффинное приближение?   -  person Hammer    schedule 22.10.2012
comment
@Hammer Нет, я использовал 3 точки для определения жесткого преобразования, а не перспективного преобразования.   -  person batista cori    schedule 22.10.2012
comment
Я все еще немного запутался, вы хотите жесткое преобразование 2d или 3d? Вы не можете получить жесткое трехмерное преобразование, если у вас нет трехмерных координат, но похоже, что вы хотите использовать жесткое преобразование, чтобы найти свои трехмерные координаты (шаг c). Это похоже на то, как если бы вы подтягивали себя за шнурки.   -  person Hammer    schedule 22.10.2012
comment
Я спрашиваю, как подготовить 3D-координату для расчета жесткого преобразования 6DOF. Как видите, я предполагаю, что z=1 для первого набора.   -  person batista cori    schedule 22.10.2012
comment
ок спасибо за уточнение   -  person Hammer    schedule 22.10.2012


Ответы (1)


Что касается систем координат, то нет определенного «формата», в который вам нужно вводить свои точки, чтобы получить хорошие результаты от P3P (или PnP), просто будьте последовательны. Решение, которое ищет алгоритм, учитывая соответствие между p1 и p2, равно

p2 = [resulting_3x4_transform]*p1;

за каждую переписку. По числовым причинам может быть целесообразно, чтобы значения координат не были очень большими или очень маленькими, но кроме этого, не стесняйтесь помещать свои точки в любую систему координат, которая вам нравится.

person Hammer    schedule 22.10.2012
comment
Вы имеете в виду, что использование формата пикселей для одного набора и нормализованного одного для другого работает? - person batista cori; 22.10.2012
comment
нет, я имею в виду быть последовательным между наборами. Вы можете использовать любые декартовы единицы, которые только можете себе представить, только не ожидайте, что преобразование, которое вы получите, будет работать с чем-то другим, кроме введенных вами единиц. - person Hammer; 22.10.2012
comment
вы можете попробовать опубликовать более конкретный вопрос. Перечислите входящие координаты, какую функцию вы используете и полученное преобразование, а также почему вы считаете преобразование неправильным. - person Hammer; 22.10.2012