两个AR标记之间的相对平移矩阵

时间:2011-12-21 03:10:14

标签: math graphics augmented-reality matrix-multiplication

我正在尝试编写一个简单的AR应用程序,特别是我正在尝试计算两个方形标记之间的转换,类似于它们在底部的这个网站上的做法:Artoolkit

我使用的标记尺寸相同(100mm x 100mm),我的图像没有相机失真(我现在正在使用测试图像)。

目前我的流程遵循以下步骤:

  1. 从图像中检测标记并提取角落。
  2. 在给定标记角的情况下运行共面POSIT。
  3. 给定2个标记变换(A和B),计算逆(A)* B
  4. 分解以获取标记B相对于标记A的x,y和z平移。
  5. 问题是我的结果似乎完全没了。以下是该计划的屏幕:

    markers_reper_off

    橙色方块表示角落的位置,我已经检查了这些并且它们是正确的。

    我使用XNA覆盖轴。 我正在使用AForge.net进行共面POSIT。 图像是640x480。 共面位置知道标记为100mm,焦距设置为640。

    我在c#中运行的确切代码:

        private void computePOSIT()
        {
    
            matrixes.Clear();
            AForge.Math.Matrix3x3 matrix;
            AForge.Math.Vector3 trans;
            foreach (Marker m in markers)
            {
    
                AForge.Point[] points = new AForge.Point[4]; 
    
                for (int i = 0; i < 4; i++)
                {
                    points[i] = 
                        new AForge.Point(m.corners[i].X-320 ,240 - m.corners[i].Y);
                }
    
                posit.EstimatePose(points, out matrix, out trans);
    
                float yaw, pitch, roll;
    
                matrix.ExtractYawPitchRoll(out yaw, out pitch, out roll);
    
                Matrix rotation = 
                    Matrix.CreateFromYawPitchRoll(-yaw, -pitch, roll);
    
                Matrix translation = 
                    Matrix.CreateTranslation(new Vector3(trans.X, trans.Y, -trans.Z));
    
                Matrix complete = rotation * translation;
                List<Matrix> all = new List<Matrix>();
                all.Add(rotation);
                all.Add(translation);
                all.Add(complete);
                matrixes.Add(all);
    
            }
    
            Matrix res = Matrix.Invert(matrixes[0][4]) * matrixes[1][5];
            Vector3 scaleR;
            Vector3 translationR;
            Quaternion rotationR;
            res.Decompose(out scaleR, out rotationR, out translationR);
    
        }
    

    结果矩阵显示:

    TranslationR:X:-402.2295 Y:191.7873 Z:-135.3166} RotationR:{X:0.007288148 Y:-0.4478231 Z:-0.5093549 W:0.734819} scaleR:1,1,1

    更新:我已修复POSIT问题并且轴现在正确对齐,但翻译问题仍然存在。我的数学是否正确可以计算出相对的翻译?

0 个答案:

没有答案