コード例 #1
0
        public void GetCorners(int threshold, int window)
        {
            MoravecCornersDetector mcd;

            // create corners detector's instance
            if (IsOdd(window))
            {
                mcd = new MoravecCornersDetector(threshold, window);
            }
            else
            {
                mcd = new MoravecCornersDetector(threshold, window - 1);                 // make it an odd number
                if (LogMessage != null)
                {
                    LogMessage("Changed Window Size to: " + (window - 1).ToString() + " Window Size must be odd!");
                }
            }

            // process image searching for corners
            List <IntPoint> corners = mcd.ProcessImage(AForge.Imaging.Image.FromFile(this.CurrentImage));

            if (ImageComplete != null)
            {
                ImageComplete(corners);
            }
        }
コード例 #2
0
        public IList<Point> GetCorners(Bitmap bitmap)
        {
            var mcd = new MoravecCornersDetector();
            var corners = mcd.ProcessImage(bitmap);

            return new List<Point>(corners.Select(x=>new Point(x.X, x.Y)));
        }
コード例 #3
0
        public IList <Point> GetCorners(Bitmap bitmap)
        {
            var mcd     = new MoravecCornersDetector();
            var corners = mcd.ProcessImage(bitmap);

            return(new List <Point>(corners.Select(x => new Point(x.X, x.Y))));
        }
コード例 #4
0
        public Bitmap DetectCorners(Bitmap image)
        {
            // Load image and create everything you need for drawing
            //Bitmap image = new Bitmap(@"myimage.jpg");
            Graphics   graphics = Graphics.FromImage(image);
            SolidBrush brush    = new SolidBrush(System.Drawing.Color.Red);

            System.Drawing.Pen pen = new System.Drawing.Pen(brush);

            // Create corner detector and have it process the image
            MoravecCornersDetector mcd     = new MoravecCornersDetector();
            List <IntPoint>        corners = mcd.ProcessImage(image);

            SortedDictionary <uint, int> histogram = new SortedDictionary <uint, int>();

            foreach (var item in corners.Where(x => x.Y == x.Y))
            {
                var helper = (uint)item.Y;
                helper /= 10;// so jetzt machen wir es ungenau!!!!

                if (histogram.ContainsKey(helper))
                {
                    histogram[helper]++; // anzahl erhöhen in welchem y-bereich es viele gibt
                }
                else
                {
                    histogram[helper] = 1;
                }
            }
            histogram.ToList();
            SortedList <uint, int> histogramSortedList = new SortedList <uint, int>(histogram);

            var sortedHistogram = histogramSortedList.OrderBy(x => x.Value);
            // list umdrehen, nach den meisten....
            List <KeyValuePair <uint, int> > tops = new List <KeyValuePair <uint, int> >();

            foreach (var item in sortedHistogram)
            {
                tops.Add(new KeyValuePair <uint, int>(item.Key, item.Value)); // hier nicht value sondern key
            }
            var hhh = tops.ToArray();

            // Top 10
            List <KeyValuePair <uint, int> > Top10 = new List <KeyValuePair <uint, int> >();

            for (int i = tops.Count; i > tops.Count - 10; i--)
            {
                Top10.Add(hhh[i - 1]);
            }

            pen.Width = 5;
            for (int i = 0; i < Top10.Count; i++)
            {
                graphics.DrawLine(pen, new Point(0, (int)Top10[i].Key * 10), new Point(image.Width, (int)Top10[i].Key * 10));
            }
            // Display
            return(image);
        }
コード例 #5
0
        public static IEnumerable <System.Drawing.Point> GetCornersMoravec(this Bitmap iBitmap)
        {
            MoravecCornersDetector mcd                 = new MoravecCornersDetector();
            List <IntPoint>        corner2s            = mcd.ProcessImage(iBitmap);
            CornersMarker          filterCornersMarker = new CornersMarker(mcd, Color.Red);
            var result2 = filterCornersMarker.Apply(iBitmap);

            return(corner2s.Select(x => new System.Drawing.Point(x.X, x.Y)));
        }
コード例 #6
0
        public void BagOfVisualWordsConstructorTest3()
        {
            Accord.Math.Random.Generator.Seed = 0;

            var images = GetImages();

            MoravecCornersDetector moravec  = new MoravecCornersDetector();
            CornerFeaturesDetector detector = new CornerFeaturesDetector(moravec);

            var bow = new BagOfVisualWords <CornerFeaturePoint>(detector, numberOfWords: 10);

            bow.ParallelOptions.MaxDegreeOfParallelism = 1;

#pragma warning disable 612, 618
            var points = bow.Compute(images, 1e-3);
#pragma warning restore 612, 618
            double[] vector = bow.GetFeatureVector(images[0]);

            Assert.AreEqual(10, bow.NumberOfWords);
            Assert.AreEqual(6, points.Length);
            Assert.AreEqual(10, vector.Length);

            Assert.AreEqual(2800, points[0].Count);
            Assert.AreEqual(4532, points[1].Count);
            Assert.AreEqual(2282, points[2].Count);
            Assert.AreEqual(1173, points[3].Count);
            Assert.AreEqual(4860, points[4].Count);
            Assert.AreEqual(5730, points[5].Count);

            Assert.AreEqual(596, points[0][0].Descriptor[0]);
            Assert.AreEqual(51, points[0][0].Descriptor[1]);
            Assert.AreEqual(points[0][0].Descriptor[0], points[0][0].X);
            Assert.AreEqual(points[0][0].Descriptor[1], points[0][0].Y);

            Assert.AreEqual(461, points[3][7].Descriptor[0]);
            Assert.AreEqual(8, points[2][3].Descriptor[1]);

            Assert.AreEqual(991, points[2][52].Descriptor[0]);
            Assert.AreEqual(82, points[1][11].Descriptor[1]);

            Assert.AreEqual(430, points[0][42].Descriptor[0]);
            Assert.AreEqual(135, points[4][125].Descriptor[1]);
        }
コード例 #7
0
ファイル: Form1.cs プロジェクト: Slavedogg/PennX
        public void DetectCorners()
        {
            // Load image and create everything you need for drawing
            Bitmap     image    = new Bitmap(pbCapture.Image);
            Graphics   graphics = Graphics.FromImage(image);
            SolidBrush brush    = new SolidBrush(Color.Red);
            Pen        pen      = new Pen(brush);

            // Create corner detector and have it process the image
            MoravecCornersDetector mcd     = new MoravecCornersDetector();
            List <IntPoint>        corners = mcd.ProcessImage(image);

            // Visualization: Draw 3x3 boxes around the corners
            foreach (IntPoint corner in corners)
            {
                graphics.DrawRectangle(pen, corner.X - 1, corner.Y - 1, 3, 3);
            }

            // Display
            pbCapture.Image = image;
        }
コード例 #8
0
        public mAnalyzeCornersMoravec(Bitmap InitialBitmap, Color CornerColor, int DiffThreshold)
        {
            BitmapType = mFilter.BitmapTypes.None;

            MoravecCornersDetector cMethod = new MoravecCornersDetector();

            cMethod.Threshold = DiffThreshold;

            Effect = new CornersMarker(cMethod, CornerColor);

            Effect.Detector = cMethod;


            List <IntPoint> corners = cMethod.ProcessImage(InitialBitmap);

            foreach (IntPoint corner in corners)
            {
                Points.Add(new wPoint(corner.X, InitialBitmap.Height - corner.Y));
            }

            filter = Effect;
        }
コード例 #9
0
        public void BagOfVisualWordsConstructorTest3()
        {
            MoravecCornersDetector moravec  = new MoravecCornersDetector();
            CornerFeaturesDetector detector = new CornerFeaturesDetector(moravec);

            var bow = new BagOfVisualWords <CornerFeaturePoint>(detector, numberOfWords: 10);

            var points = bow.Compute(images, 1e-3);

            double[] vector = bow.GetFeatureVector(images[0]);

            Assert.AreEqual(10, bow.NumberOfWords);
            Assert.AreEqual(6, points.Length);
            Assert.AreEqual(10, vector.Length);

            Assert.AreEqual(2800, points[0].Count);
            Assert.AreEqual(4532, points[1].Count);
            Assert.AreEqual(2282, points[2].Count);
            Assert.AreEqual(1173, points[3].Count);
            Assert.AreEqual(4860, points[4].Count);
            Assert.AreEqual(5730, points[5].Count);

            Assert.AreEqual(596, points[0][0].Descriptor[0]);
            Assert.AreEqual(51, points[0][0].Descriptor[1]);
            Assert.AreEqual(points[0][0].Descriptor[0], points[0][0].X);
            Assert.AreEqual(points[0][0].Descriptor[1], points[0][0].Y);

            Assert.AreEqual(461, points[3][7].Descriptor[0]);
            Assert.AreEqual(8, points[2][3].Descriptor[1]);

            Assert.AreEqual(991, points[2][52].Descriptor[0]);
            Assert.AreEqual(82, points[1][11].Descriptor[1]);

            Assert.AreEqual(430, points[0][42].Descriptor[0]);
            Assert.AreEqual(135, points[4][125].Descriptor[1]);
        }
コード例 #10
0
        public void BagOfVisualWordsConstructorTest3()
        {
            MoravecCornersDetector moravec = new MoravecCornersDetector();
            CornerFeaturesDetector detector = new CornerFeaturesDetector(moravec);

            var bow = new BagOfVisualWords<CornerFeaturePoint>(detector, numberOfWords: 10);

            var points = bow.Compute(images, 1e-3);

            double[] vector = bow.GetFeatureVector(images[0]);

            Assert.AreEqual(10, bow.NumberOfWords);
            Assert.AreEqual(6, points.Length);
            Assert.AreEqual(10, vector.Length);

            Assert.AreEqual(2800, points[0].Count);
            Assert.AreEqual(4532, points[1].Count);
            Assert.AreEqual(2282, points[2].Count);
            Assert.AreEqual(1173, points[3].Count);
            Assert.AreEqual(4860, points[4].Count);
            Assert.AreEqual(5730, points[5].Count);

            Assert.AreEqual(596, points[0][0].Descriptor[0]);
            Assert.AreEqual(51, points[0][0].Descriptor[1]);
            Assert.AreEqual(points[0][0].Descriptor[0], points[0][0].X);
            Assert.AreEqual(points[0][0].Descriptor[1], points[0][0].Y);

            Assert.AreEqual(461, points[3][7].Descriptor[0]);
            Assert.AreEqual(8, points[2][3].Descriptor[1]);

            Assert.AreEqual(991, points[2][52].Descriptor[0]);
            Assert.AreEqual(82, points[1][11].Descriptor[1]);

            Assert.AreEqual(430, points[0][42].Descriptor[0]);
            Assert.AreEqual(135, points[4][125].Descriptor[1]);
        }
コード例 #11
0
        void TD()
        {
            if (!Triang.Checked)
            {
                return;
            }

            if ((int)PartCount.Value == 1)
            {
                return;
            }

            Polygon p = new Polygon();

            List <Vertex> corners;

            if (UserDeepSearch.Checked)
            {
                MoravecCornersDetector scd = new MoravecCornersDetector();
                corners = scd.ProcessImage(finalImage).Select(x => new Vertex(x.X, x.Y)).ToList();
            }
            else
            {
                SusanCornersDetector scd = new SusanCornersDetector();
                corners = scd.ProcessImage(finalImage).Select(x => new Vertex(x.X, x.Y)).ToList();
            }

            corners.ForEach(delegate(Vertex v)
            {
                p.Add(v);
            });

            triangulated = (Mesh)p.Triangulate();


            using (Graphics graphics = Graphics.FromImage(finalImage))
            {
                foreach (Triangle t in triangulated.Triangles)
                {
                    PointF[] points =
                    {
                        new PointF((float)t.GetVertex(0).X, (float)t.GetVertex(0).Y),
                        new PointF((float)t.GetVertex(1).X, (float)t.GetVertex(1).Y),
                        new PointF((float)t.GetVertex(2).X, (float)t.GetVertex(2).Y),
                    };

                    int ColR = imageBits[0, (int)points[0].Y, (int)points[0].X] +
                               imageBits[0, (int)points[1].Y, (int)points[1].X] +
                               imageBits[0, (int)points[2].Y, (int)points[2].X];

                    int ColG = imageBits[1, (int)points[0].Y, (int)points[0].X] +
                               imageBits[1, (int)points[1].Y, (int)points[1].X] +
                               imageBits[1, (int)points[2].Y, (int)points[2].X];

                    int ColB = imageBits[2, (int)points[0].Y, (int)points[0].X] +
                               imageBits[2, (int)points[1].Y, (int)points[1].X] +
                               imageBits[2, (int)points[2].Y, (int)points[2].X];


                    Brush brush = new SolidBrush(Color.FromArgb(ColR / 3, ColG / 3, ColB / 3));
                    graphics.FillPolygon(brush, points);
                }
            }
        }