2012-08-24 8 views
6

ile görüntüye bir işaretinden bir 2D noktayı Projecting. Sonra bu işaretçiyi sahnede bulmak için bir detektör çalıştırıyorum ve özellikleri tekrar ayıkladım. I noktaları eşleşen ve OpenCV findHomography() kullanılarak eşleştirilmiş çiftlerinden eşyazımı ekstrakte edin.Ben <strong>özellikleri ayıklamak için</strong> algoritma ELEMEK yayınlanmış olan bir düzlemsel marker daha bilgisayarlı homograf

Şimdi, konumdan ölçülen 3B noktalarla konumları karşılaştırmak ve hesaplanan yeniden hesaplama hatasını hesaplamak için, hesaplanan homografi ile işaretleyicide algılanan 2B noktaları yansıtmak istiyorum. Piksel koordinatları, santimetre, kalibrasyon matrisleri ile karıştırıldım, öncelikle hangi dönüşümleri yapmam gerektiğini bilmiyorum.

herkes bu konuda bir link biliyor mu veya yöntemi açıklayabilir? Eğer eşyazımı matrisini H ararsanız

cevap

6

, (piksellere dönüştürmek için gerekli) kamera matrisi K senin çözünürlüğe bağlı olarak, böyle bir şey olurdu.

Mat K= Mat::zeros(3,3,CV_32FC1); 
K.at<float>(0,0)=500.0f;   
K.at<float>(0,2)=320.0f;  // width/2  
K.at<float>(1,1)=500.0f;  
K.at<float>(1,2)=240.0f;  // height/2 
K.at<float>(2,2)=1.0f; 

işaretçinizle noktaları 2D vektör noktaları ise:

vector<Point2f> marker_point; //containing coordinates in centimeters 

sonra projeksiyon piksel bir 3D noktası koordinatları sonuçla, bu gibi olurdu.

Mat point(3,1,CV_32FC1);   
point.at<float>(0) = marker_point.x; 
point.at<float>(1) = marker_point.y; 
point.at<float>(2) = 1.0f; 
point = H* point; 
point = point/point.at<float>(2);  //Normalize 
point = K* point;     //to pixels 
İlgili konular