Homografi matrisinden kamera pozu nasıl hesaplanır?


13

Diyelim ki yalnızca bir kalibre kamera kullandım. Bu kamera, ben görüntüleri A ve B. A ve B arasındaki eşyazımı biliyorum olsun, içinden bilgisayarlı OpenCV 'ler ) (findHomography .

A görüntüsünün pozunu (rotasyon matrisi R ve çeviri vektörü t) biliyorum ve B görüntüsünün pozuna ihtiyacım var.

Bilgi işlem B'nin pozunun bir uygulamasını biliyor musunuz? Web'de birkaç makale buldum, ancak kolayca uygulanabilir bir çözüm bulamadım ...


Kodunuzu nasıl kullanacağımı anladığımdan emin değilim. Homografiyi almak için OpenCV kullanıyorum, ancak bu Homografiyi algoritma yoluyla gönderdiğimde, her zaman bunu döndürüyor. kamera Poz [1, 0, 0, 0; 0, 1, 0, 0; 0, 0, 1, 0]
LeRoss

Yanıtlar:


8

Cevabım senin için çok geç gelse bile, belki başkaları bunu faydalı buluyor. Homografi'den bir openCV Pose kodlarım var. Yöntemi, bu gerçekten yararlı web sitesinde, öklidyende buldum .

void cameraPoseFromHomography(const Mat& H, Mat& pose)
{
    pose = Mat::eye(3, 4, CV_64FC1); //3x4 matrix
    float norm1 = (float)norm(H.col(0)); 
    float norm2 = (float)norm(H.col(1));
    float tnorm = (norm1 + norm2) / 2.0f;

    Mat v1 = H.col(0);
    Mat v2 = pose.col(0);

    cv::normalize(v1, v2); // Normalize the rotation

    v1 = H.col(1);
    v2 = pose.col(1);

    cv::normalize(v1, v2);

    v1 = pose.col(0);
    v2 = pose.col(1);

    Mat v3 = v1.cross(v2);  //Computes the cross-product of v1 and v2
    Mat c2 = pose.col(2);
    v3.copyTo(c2);      

    pose.col(3) = H.col(2) / tnorm; //vector t [R|t]
}

////


Bu şekilde kullanılarak hesaplanan poz matrisi her zaman [1 0 0 0; 0 1 0 0; 0 0 1 0; 0 0 0 0]. Herhangi bir açıklamanız var mı?
Muhammet Ali Asan

A'nın pozunu kullanıyor musunuz? Görünüşe göre yalnızca H
Guig

Bu yöntem, doğrudan bilinen bir pozdan hesaplanan bir homografi matrisi ile bile doğru değildir. Sonuç, tahmin edilen pozdan bir matris aldığınız, tersine çevirip orijinal girdiye uyguladığınız yinelemeli bir işlem kullanılarak iyileştirilebilir. Poz kalıntı parametrelerini bu kalıntı homografisinden alın, poz tahmininizi güncelleyin ve bu şekilde birleşene kadar devam edin.
dividebyzero


0

Opencv 3.0 ve sonraki sürümlerinde uygulanan Homografi ayrıştırma yöntemini kullanabilirsiniz

decomposeHomographyMat

  • Opencv'in işlevi olası dönüşleri, kamera normallerini ve çeviri matrislerini döndürür.
  • İlk resim çekilirken kamera normallerini kamera normal kameralarıyla karşılaştırarak aralarında doğru ayarı seçmelisiniz.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.