Как преобразовать матрицу 4х4 в матрицу 3х3? - PullRequest
3 голосов
/ 28 октября 2011

Я пишу приложение AR на iOS и использую преобразования CATransform3D на UIView.

Через OpenCV я могу получить матрицу перспективы через вызов cvGetPerspectiveTransform ().Это возвращает матрицу 3x3.

Я не могу вспомнить, где я ее нашел, но у меня был пример кода, который сделал следующее:

//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;

Однако применение этой формы вызывает мое представление осойти с ума и прыгать повсюду.Немного поэкспериментировав, я обнаружил, что только эти три сопоставления работают в некоторой степени:

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?

Я читал о трехмерной графике и математике преобразования, но это довольно сложная задача.

Каким будет правильное отображение матрицы 4x4 из матрицы 3x3?

Спасибо!

1 Ответ

2 голосов
/ 28 октября 2011

Могут быть разные проблемы:

Во-первых, вы должны попробовать обратную матрицу (в случае, если полученное вами преобразование действительно из пункта назначения в источник).Используйте mat.inv () или поменяйте местами параметры, отправленные getPerspectiveMatrix.

Если это не решит вашу проблему, вы должны разложить матрицу 3x3 на повороты и переводы и объединить ее, чтобы сформировать матрицу 4x4.Примерное решение - удалить последнюю строку и третий столбец (которые соответствуют трехмерному вращению) - но это только приблизительное приближение.

Пожалуйста, ознакомьтесь также с этим очень хорошим постом о создании матриц преобразования перспективы Виртуальная камера OpenCV вращается / переводится с высоты птичьего полета

...