public void ProcessImageTest()
{
// Load an Image
Bitmap img = Accord.Imaging.Image.Clone(Properties.Resources.sample_trans);
// Extract the interest points
var surf = new SpeededUpRobustFeaturesDetector(0.0002f, 5, 2);
surf.ComputeDescriptors = SpeededUpRobustFeatureDescriptorType.None;
List<SpeededUpRobustFeaturePoint> points = surf.ProcessImage(img);
// Describe the interest points
SpeededUpRobustFeaturesDescriptor descriptor = surf.GetDescriptor();
descriptor.Compute(points);
Assert.AreEqual(8, points.Count);
SpeededUpRobustFeaturePoint p;
p = points[0];
Assert.AreEqual(0, p.Laplacian);
Assert.AreEqual(25.3803387, p.X, 1e-2);
Assert.AreEqual(14.7987738, p.Y, 1e-2);
Assert.AreEqual(1.98713827, p.Scale, 1e-2);
Assert.AreEqual(0.0, p.Response, 1e-2);
Assert.AreEqual(4.78528404, p.Orientation, 1e-2);
p = points[1];
Assert.AreEqual(1, p.Laplacian, 1e-2);
Assert.AreEqual(20.4856224, p.X, 1e-2);
Assert.AreEqual(20.4817181, p.Y, 1e-2);
Assert.AreEqual(1.90549147, p.Scale, 1e-2);
Assert.AreEqual(0.0, p.Response, 1e-2);
Assert.AreEqual(4.89748764, p.Orientation, 1e-2);
p = points[2];
Assert.AreEqual(0, p.Laplacian, 1e-2);
Assert.AreEqual(14.7991896, p.X, 1e-2);
Assert.AreEqual(25.3776169, p.Y, 1e-2);
Assert.AreEqual(1.9869982, p.Scale, 1e-2);
Assert.AreEqual(0.0, p.Response, 1e-2);
Assert.AreEqual(3.07735944, p.Orientation, 1e-2);
p = points[6];
Assert.AreEqual(1, p.Laplacian, 1e-2);
Assert.AreEqual(22.4346638, p.X, 1e-2);
Assert.AreEqual(41.4026527, p.Y, 1e-2);
Assert.AreEqual(2.83586049, p.Scale, 1e-2);
Assert.AreEqual(0.0, p.Response, 1e-2);
Assert.AreEqual(3.13142157, p.Orientation, 1e-2);
descriptor.Extended = true;
descriptor.Invariant = false;
descriptor.Compute(points);
p = points[5];
Assert.AreEqual(1, p.Laplacian, 1e-3);
Assert.AreEqual(41.4027748, p.X, 1e-3);
Assert.AreEqual(22.4343891, p.Y, 1e-3);
Assert.AreEqual(2.83486962, p.Scale, 1e-3);
Assert.AreEqual(0.0, p.Response, 1e-3);
Assert.AreEqual(4.72728586, p.Orientation, 1e-3);
}