Пример #1
0
        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);
                    }
                }
            }
        }