может кто-нибудь мне помочь, как мы можем вычислить новые позиции ключевых точек в преобразованном изображении, ключевые точки были обнаружены в исходном изображении. Я использую 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.
Например, в приведенном ниже преобразованном изображении мы знаем угловые точки. Теперь я хочу рассчитать новое положение ключевых точек, которое нужно сказать перед преобразованием {(x1, y1), (x2, y2), (x3, y3)...}, Как мы можем вычислить его?
Обновление: opencv 'perspectiveTransform' делает то, что я пытаюсь сделать.
Позвольте 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
(документация).