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); } }
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))); }
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)))); }
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); }
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))); }
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]); }
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; }
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; }
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]); }
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]); }
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); } } }