Я уже проверял на 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 без особого понимания. Я проверил в интернете, но это сложно, так что если у вас есть хорошее объяснение, я возьму его.
Поблагодарить.
Согласно документация openCV, findHomography «Находит перспективное преобразование между двумя плоскостями». Это означает, что он может вычислить перспективное преобразование двух изображений (одной и той же (калибровочной) платы), взятых из разных позиций.
Если вы сравниваете два совершенно разных набора точек изображения, он не сможет найти такое преобразование.
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» равны нулю. Что-то должно было пойти не так.