Измените опорную рамку результата отслеживания лица из Kinect SDK

Я разрабатываю систему слежения за лицом с несколькими кинектами, и мне интересно, как я могу изменить опорную рамку результата отслеживания лица?

Я попытался вычислить матрицу поворота из углов поворота лица (извлеченных Kinect SDK) с использованием соглашения XYZ, создать вектор перевода, используя вектор положения лица, и объединить эту матрицу преобразования с матрицей преобразования из этого kinect в глобальный кадр. Вот формула:

   T = T_local_to_global*T_face 

И, наконец, преобразуйте комбинированную T обратно в углы поворота, используя такой метод, как

https://truesculpt.googlecode.com/hg-history/38000e9dfece971460473d5788c235fbbe82f31b/Doc/rotation_matrix_to_euler.pdf

Однако результат какой-то неправильный. Угол поворота относительно оси Z иногда кувыркается. Я где-то ошибся? Благодарю за помощь, заранее спасибо!


Обновить:

Я обнаружил, что разные соглашения о матрице вращения дают разные результаты. Каково соглашение об угле поворота, данное Kinect SDK? Или углы на самом деле не углы Эйлера?

Так неловко.


person allie    schedule 14.02.2013    source источник


Ответы (1)


Вы можете перепроектировать соглашение, используемое API отслеживания лиц, передав тестовые значения rotationXYZ в IFTModel::Get3DShape(). Я полагаю, что его порядок углов заключается в том, чтобы сначала вращаться вокруг Z, затем Y, затем X. Другими словами, R = R_x R_y R_z как матрицы.

Обратите внимание, что, напротив, PDF-файл, на который вы ссылаетесь, использует соглашение R = R_z R_y R_x, что означает сначала вращаться вокруг X, затем Y, затем Z.

person Chris Culter    schedule 04.08.2013