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

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

0

Решение

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

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

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

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

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]