Расчет новых позиций ключевых точек

0

может кто-нибудь мне помочь, как мы можем вычислить новые позиции ключевых точек в преобразованном изображении, ключевые точки были обнаружены в исходном изображении. Я использую opencv homography matrix и warpPerspective, чтобы сделать преобразованное изображение.

Вот код..

...
 std::vector< Point2f > points1,points2;
 for( int i = 0; i < matches1.size(); i++ )
    {
     points1.push_back( keypoints_input1[matches1[i].queryIdx ].pt );
     points2.push_back( keypoints_input2[matches1[i].trainIdx ].pt );
    }
 /* Find the Homography Matrix for current and next frame*/
 Mat H1 = findHomography( points2, points1, CV_RANSAC );
 /* Use the Homography Matrix to warp the images*/
cv::Mat result1;
warpPerspective(input2, result1, H1, Size(input2.cols+150, input2.rows+150),              
INTER_CUBIC);
...
}

Теперь я хочу рассчитать новые позиции точек2 в изображении result1.

Например, в приведенном ниже преобразованном изображении Изображение 174551 мы знаем угловые точки. Теперь я хочу рассчитать новое положение ключевых точек, которое нужно сказать перед преобразованием {(x1, y1), (x2, y2), (x3, y3)...}, Как мы можем вычислить его?

Обновление: opencv 'perspectiveTransform' делает то, что я пытаюсь сделать.

  • 0
    это вопрос о математике и преобразованиях; не о программировании ...
  • 1
    @Chris Крис Мэйс, компьютерное видение о программировании математических преобразований
Показать ещё 4 комментария
Теги:
opencv
homography
warp

1 ответ

2
Лучший ответ

Позвольте I' называть изображение, полученное деформированием изображения I используя гомографию H

Если вы извлекли ключевые точки m i= (x i, y i, 1) в исходном изображении I, вы можете получить ключевые точки m ' i в искаженном изображении I' используя преобразование гомографии: S * m ' i= H * m i, Обратите внимание на масштабный коэффициент S, если вы хотите, чтобы координаты ключевых точек находились в пикселях, вам нужно масштабировать m ' i, чтобы третий элемент равен 1.

Если вы хотите понять, откуда взялся масштабный коэффициент, посмотрите на однородные координаты.

Кроме того, есть функция OpenCV для применения этого преобразования к массиву точек: perspectiveTransform (документация).

  • 0
    Привет Алдур, спасибо, ключевые точки извлечены в I, а не в I ', я хочу пересчитать это в I'. Я думаю, что это можно рассчитать так же. Спасибо
  • 0
    @ ММХ Я обновил свой ответ. Тем не менее, ваш вопрос гласит, что вы хотите координаты ключевых точек до преобразования ... Попытайтесь описать вашу проблему более четко в следующий раз;)
Показать ещё 9 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню