public void HomographyTest()
{
PointH[] x1 =
{
new PointH(0, 0),
new PointH(1, 0),
new PointH(0, 1),
new PointH(1, 1),
};
PointH[] x2 =
{
new PointH(0, 0),
new PointH(1, 0),
new PointH(0, 1),
new PointH(1, 1),
};
double[,] expected = Matrix.Identity(3);
double[,] actual = (double[,])Tools.Homography(x1, x2);
for (int i = 0; i < 3; i++)
for (int j = 0; j < 3; j++)
actual[i, j] /= actual[2, 2];
Assert.IsTrue(Matrix.IsEqual(expected, actual, 1e-4));
x1 = new PointH[]
{
new PointH(2, 0),
new PointH(1, 0),
new PointH(5, 1),
new PointH(1, 1),
new PointH(7, 1),
new PointH(1, 2),
new PointH(1, 1),
};
x2 = new PointH[]
{
new PointH(9, 1),
new PointH(1, 5),
new PointH(9, 1),
new PointH(1, 7),
new PointH(2, 7),
new PointH(6, 5),
new PointH(1, 7),
};
expected = new double[,]
{
{ 0.2225, -3.1727, 1.8023 },
{ 0.3648, -1.7149, -0.2173 },
{ 0.0607, -0.4562, 0.1229 },
};
expected = (double[,])(new MatrixH(expected));
actual = (double[,])Tools.Homography(x1, x2);
Assert.IsTrue(Matrix.IsEqual(expected, actual, 0.01));
}