OpenCV C++ - значение значений 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

Валер Ч : 1

Валер Х : 0

Валер Х : 0

Валер Х : 0

Валер Ч : 1

Валер Х : 0

Валер Х : 0

Валер Х : 0

Валер Ч : 1

Детерминантная гомография: 1

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

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

Валер Х : 0

Валер Х : 0

Валер Х : 241

Валер Х : 0

Валер Х : 0

Валер Х : 277

Валер Х : 0

Валер Х : 0

Валер Ч : 1

Детерминантная гомография: 0,00533235

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

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

Благодарить.


person lilouch    schedule 08.07.2014    source источник


Ответы (2)


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

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

person Nallath    schedule 08.07.2014

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' равны нулю. Что-то должно было пойти не так.

person Rodolfo    schedule 06.06.2018