我正在尝试编写一个简单的AR应用程序,特别是我正在尝试计算两个方形标记之间的转换,类似于它们在底部的这个网站上的做法:Artoolkit
我使用的标记尺寸相同(100mm x 100mm),我的图像没有相机失真(我现在正在使用测试图像)。
目前我的流程遵循以下步骤:
问题是我的结果似乎完全没了。以下是该计划的屏幕:
橙色方块表示角落的位置,我已经检查了这些并且它们是正确的。
我使用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问题并且轴现在正确对齐,但翻译问题仍然存在。我的数学是否正确可以计算出相对的翻译?