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

Может ли кто-нибудь помочь мне, как мы можем вычислить новые позиции ключевых точек в преобразованном изображении, ключевые точки были обнаружены в исходном изображении. Я использую матрицу гомографии opencv и 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 в изображении результата1.

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

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

1 ответ

Решение

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

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

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

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

Другие вопросы по тегам