public void EstimateTest()
        {
            Point[] points1 =
            {
                new Point(86,    3),
                new Point(262,   7),
                new Point(72,   12),
                new Point(233,  14),
                new Point(222,  16),
                new Point(242,  19),
                new Point(174,  21),
                new Point(199,  22),
                new Point(210,  23),
                new Point(245,  27),
                new Point(223,  28),
                new Point(171,  29),
                new Point(213,  32),
                new Point(206,  34),
                new Point(158,  36),
                new Point(215,  36),
                new Point(194,  40),
                new Point(155,  43),
                new Point(390, 145),
                new Point(325, 151),
                new Point(430, 165),
                new Point(569, 166),
                new Point(548, 171),
                new Point(486, 172),
                new Point(585, 174),
                new Point(513, 175),
                new Point(581, 178)
            };


            //Points 2
            Point[] points2 =
            {
                new Point(94,    3),
                new Point(129,  10),
                new Point(135,   6),
                new Point(100,  16),
                new Point(88,   18),
                new Point(109,  22),
                new Point(35,   23),
                new Point(63,   24),
                new Point(75,   25),
                new Point(112,  30),
                new Point(89,   31),
                new Point(32,   31),
                new Point(78,   35),
                new Point(70,   37),
                new Point(19,   38),
                new Point(80,   39),
                new Point(58,   43),
                new Point(15,   46),
                new Point(259, 151),
                new Point(194, 158),
                new Point(299, 171),
                new Point(433, 171),
                new Point(414, 176),
                new Point(354, 177),
                new Point(449, 178),
                new Point(380, 180),
                new Point(445, 183)
            };


            double[,] expected =
            {
                {  7.07032436087535e-07, 4.33250001914367e-05, 0.000202442793261960 },
                { -4.24949673892611e-05, 7.57829117692283e-07,  -0.0167251164924736 },
                {  6.04519481294552e-05,   0.0112588312334709, -0.00408283512108965 },
            };


            // Set a fixed seed to transform RANSAC into a deterministic algorithm
            Accord.Math.Tools.SetupGenerator(0);

            RansacFundamentalEstimator ransac = new RansacFundamentalEstimator(0.001, 0.99);

            float[,] actual = ransac.Estimate(points1, points2);


            for (int i = 0; i < 3; i++)
            {
                for (int j = 0; j < 3; j++)
                {
                    Assert.AreEqual(expected[i, j], actual[i, j], 1e-3);
                }
            }
        }
        public void EstimateTest()
        {
            Point[] points1 =
            {
                new Point(86,    3),
                new Point(262,   7),
                new Point(72,   12),
                new Point(233,  14),
                new Point(222,  16),
                new Point(242,  19),
                new Point(174,  21),
                new Point(199,  22),
                new Point(210,  23),
                new Point(245,  27),
                new Point(223,  28),
                new Point(171,  29),
                new Point(213,  32),
                new Point(206,  34),
                new Point(158,  36),
                new Point(215,  36),
                new Point(194,  40),
                new Point(155,  43),
                new Point(390, 145),
                new Point(325, 151),
                new Point(430, 165),
                new Point(569, 166),
                new Point(548, 171),
                new Point(486, 172),
                new Point(585, 174),
                new Point(513, 175),
                new Point(581, 178)
            };


            //Points 2
            Point[] points2 =
            {
                new Point(94,    3),
                new Point(129,  10),
                new Point(135,   6),
                new Point(100,  16),
                new Point(88,   18),
                new Point(109,  22),
                new Point(35,   23),
                new Point(63,   24),
                new Point(75,   25),
                new Point(112,  30),
                new Point(89,   31),
                new Point(32,   31),
                new Point(78,   35),
                new Point(70,   37),
                new Point(19,   38),
                new Point(80,   39),
                new Point(58,   43),
                new Point(15,   46),
                new Point(259, 151),
                new Point(194, 158),
                new Point(299, 171),
                new Point(433, 171),
                new Point(414, 176),
                new Point(354, 177),
                new Point(449, 178),
                new Point(380, 180),
                new Point(445, 183)
            };


            float[,] expected =
            {
                {  3.254832E-07f,   1.12779E-05f, 1.551695E-05f },
                {  -9.57038E-06f, -3.555409E-07f,  0.009430919f },
                { -0.0003096815f,  -0.008560383f,    0.0500053f }
            };


            // Set a fixed seed to transform RANSAC into a deterministic algorithm
            Accord.Math.Random.Generator.Seed = 0;

            RansacFundamentalEstimator ransac = new RansacFundamentalEstimator(0.001, 0.99);

            float[,] actual = ransac.Estimate(points1, points2);


            string str = actual.ToCSharp();

            Assert.IsTrue(actual.IsEqual(expected, 1e-3f));
        }