OpenCV findHomography значения значения

Я уже проверял на stackOverflaw и особенно в этом ссылка на сайт но это не ответило на мой вопрос.

Я вычисляю гомографию, используя Ransac с OpenCv, чтобы сопоставить две картинки.
Вот код, соответствующий:

Mat H = findHomography( obj, scene, CV_RANSAC,3);

std::cout << "Size of homography " << *H.size << std::endl ;

//Print homography
for (int i=0;i<H.rows;i++){
for (int j=0;j<H.cols;j++){

std::cout << "valeur H : "  << (int)H.at<double>(i,j) << endl;
}
}
int N=1;
const double det = H.at<double>(0, 0) * H.at<double>(1, 1) - H.at<double>(1, 0) * H.at<double>(0, 1);
std::cout << "Determinant homography : " << det << std::endl;

Для хорошего соответствия (точно такая же картинка) у меня на терминале есть:

Размер гомографии 3

Валер H: 1

Валер H: 0

Валер H: 0

Валер H: 0

Валер H: 1

Валер H: 0

Валер H: 0

Валер H: 0

Валер H: 1

Определитель гомографии: 1

Для плохого матча (две разные картинки) у меня есть это:

Размер гомографии 3

Валер H: 0

Валер H: 0

Валер H: 241

Валер H: 0

Валер H: 0

Валер H: 277

Валер H: 0

Валер H: 0

Валер H: 1

Определитель гомографии: 0,00533235

Я не понимаю этот результат. Может кто-нибудь объяснить мне? Я хотел бы использовать эти значения, чтобы определить, хорошо ли это соответствует или нет. Я ожидал иметь только 1 в первом случае, но нет.

Я думаю, что я использую Homography и Ransaw без особого понимания. Я проверил в интернете, но это сложно, так что если у вас есть хорошее объяснение, я возьму его.

Поблагодарить.

0

Решение

Согласно документация openCV, findHomography «Находит перспективное преобразование между двумя плоскостями». Это означает, что он может вычислить перспективное преобразование двух изображений (одной и той же (калибровочной) платы), взятых из разных позиций.

Если вы сравниваете два совершенно разных набора точек изображения, он не сможет найти такое преобразование.

2

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

H является матрицей. В первом случае H является единичной матрицей [[1,0,0], [0,1,0], [0,0,1]. То есть без изменений.

Во втором случае, кажется, вы только что сделали перевод 241 в x и 277 в y. Но в x и y нет представления, поскольку (H = [[a, 0,241], [0, b, 277], [0,0,1]]) «a» и «b» равны нулю. Что-то должно было пойти не так.

0

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