4x4 matrisini 3x3 matrisine dönüştürme

İOS'ta bir AR uygulaması yazıyorum ve UIView'de CATransform3D dönüşümlerini kullanıyorum.

OpenCV aracılığıyla, cvGetPerspectiveTransform() çağrısıyla perspektif matrisi elde edebilirim. Bu 3x3 matrisini döndürür.

Bulduğum yeri hatırlayamıyorum, ancak aşağıdakileri yapan örnek kodum vardı:

//the opencv transform matrix is put into map_matrix
cvGetPerspectiveTransform (src_pnt, dst_pnt, map_matrix);

CATransform3D t = CATransform3DIdentity;

// map over the CATransform3D 4x4 matrix from the opencv 3x3 matrix
t.m11 = cvmGet(map_matrix,0,0); 
t.m12 = cvmGet(map_matrix,1,0); 
t.m14 = cvmGet(map_matrix,2,0); 
t.m21 = cvmGet(map_matrix,0,1); 
t.m22 = cvmGet(map_matrix,1,1); 
t.m24 = cvmGet(map_matrix,2,1); 
t.m41 = cvmGet(map_matrix,0,2); 
t.m42 = cvmGet(map_matrix,1,2); 
t.m44 = cvmGet(map_matrix,2,2); 

myView.layer.transform = t;

Ancak, bu formu uygulamak benim görüşümün çıldırmasına ve her yere sıçramasına neden oluyor. Biraz deneme yaparak, sadece bu üç haritanın bir şekilde çalıştığını gördüm:

t.m14 = cvmGet(map_matrix,2,0); //left and right transform
t.m24 = cvmGet(map_matrix,2,1); //up and down transform
t.m21 = cvmGet(map_matrix,0,1); //some kind of skew?

3d grafikler ve dönüştürme matematiğini okuyorum ama bu oldukça zor bir görev.

4x4 matrisinin 3x3 matrisinden doğru haritalanması ne olurdu?

Teşekkür ederim!

3

1 cevap

Farklı sorunlar olabilir:

İlk olarak, matrisinizin tersini denemelisiniz (elde ettiğiniz dönüşüm aslında hedeften kaynağa). Mat.inv() öğesini kullanın veya getPerspectiveMatrix'e gönderilen parametreleri değiştirin.

Sorununuzu çözmezse, 3x3 matrisini dönüşlere ve çevirilere ayırmanız ve bir 4x4 matrisini oluşturmak için birleştirmeniz gerekir. Yaklaşık bir çözüm, son satırı ve üçüncü sütunu (3D rotasyonuna karşılık gelen) silmektir - ancak bu sadece kaba bir yaklaşımdır.

Please check also this very good post about creating perspective transform matrices Opencv virtually camera rotating/translating for bird's eye view

2
katma
teşekkür ederim, bu iyi bir okuma!
katma yazar kurisukun, kaynak