public void TestDetectorColor() { Image <Bgr, byte> box = EmguAssert.LoadImage <Bgr, byte>("box.png"); Image <Gray, byte> gray = box.Convert <Gray, Byte>(); SURFDetector surf = new SURFDetector(400); OpponentColorDescriptorExtractor opponentSurf = new OpponentColorDescriptorExtractor(surf); SIFTDetector sift = new SIFTDetector(); OpponentColorDescriptorExtractor opponentSift = new OpponentColorDescriptorExtractor(sift); //using (Util.VectorOfKeyPoint kpts = surf.DetectKeyPointsRaw(gray, null)) using (Util.VectorOfKeyPoint kpts = new VectorOfKeyPoint()) { sift.DetectRaw(gray, kpts); for (int i = 1; i < 2; i++) { using (Mat surfDescriptors = new Mat()) { opponentSurf.Compute(box, kpts, surfDescriptors); //EmguAssert.IsTrue(surfDescriptors.Width == (surf.SURFParams.Extended == 0 ? 64 : 128) * 3); } //TODO: Find out why the following test fails using (Mat siftDescriptors = new Mat()) { sift.Compute(gray, kpts, siftDescriptors); EmguAssert.IsTrue(siftDescriptors.Cols == sift.GetDescriptorSize()); } int siftDescriptorSize = sift.GetDescriptorSize(); using (Mat siftDescriptors = new Mat()) { opponentSift.Compute(box, kpts, siftDescriptors); EmguAssert.IsTrue(siftDescriptors.Cols == siftDescriptorSize * 3); } } } }