2017-02-08 20 views
6

Próbuję wykryć Circle wewnątrz prostokąta w AForge. Udało mi się ustalić, że Rectangles nie może znaleźć circles wewnątrz Rectangle. Jak znaleźć kształt wewnątrz innego kształtu w AForge.Jak znaleźć koło wewnątrz prostokąta w AForge

string strPath = Server.MapPath("~/Recipt001.png"); 
Bitmap myBitmap = new Bitmap(strPath); 

//Some filters Grayscale, invert, threshold 

//Blod Filtering      


BlobCounter blobCounter = new BlobCounter(); 
blobCounter.ProcessImage(temp); 
blobCounter.ObjectsOrder = ObjectsOrder.YX; 
blobCounter.FilterBlobs = true; 

Blob[] blobs = blobCounter.GetObjectsInformation(); 
Graphics g = Graphics.FromImage(myBitmap); 
Pen redPen = new Pen(Color.Red, 2); 
SimpleShapeChecker shapeChecker = new SimpleShapeChecker(); 

// dictionary of color to highlight different shapes 
Dictionary<PolygonSubType, Color> colors = new Dictionary<PolygonSubType, Color>(); 

colors.Add(PolygonSubType.Unknown, Color.White); 
colors.Add(PolygonSubType.Trapezoid, Color.Orange); 
colors.Add(PolygonSubType.Parallelogram, Color.Red); 
colors.Add(PolygonSubType.Rectangle, Color.Green); 
colors.Add(PolygonSubType.Square, Color.Blue); 
colors.Add(PolygonSubType.Rhombus, Color.Gray); 

colors.Add(PolygonSubType.EquilateralTriangle, Color.Pink); 
colors.Add(PolygonSubType.IsoscelesTriangle, Color.Purple); 
colors.Add(PolygonSubType.RectangledTriangle, Color.SkyBlue); 
colors.Add(PolygonSubType.RectangledIsoscelesTriangle, Color.SeaGreen); 

for (int i = 0, n = blobs.Length; i < n; i++) 
{ 
    List<IntPoint> corners; 
    List<IntPoint> edgePoints = blobCounter.GetBlobsEdgePoints(blobs[i]); 
    Point center; 
    double radius; 

    if (shapeChecker.IsQuadrilateral(edgePoints, out corners)) 
    { 
     if (shapeChecker.CheckPolygonSubType(corners) == PolygonSubType.Rectangle) 
     { 
      g.DrawPolygon(redPen, ToPointsArray(corners)); 
     } 
    } 
} 

redPen.Dispose(); 
g.Dispose(); 
+0

Wygląda na to, że próbujesz zrobić kwadrat z rogami na obwodzie koła. Krąg znajdowałby się wtedy poza kwadratem, a koło powinno znajdować się po wewnętrznej stronie kwadratu. – jdweng

+0

@jdweng Nie, rozpoznałem prostokąty. Teraz te prostokąty mają w sobie kręgi. Teraz chcę, aby te kółka znalazły się wewnątrz prostokąta. –

+0

@jdweng Mam drwan wielobok na wykrytych prostokątach tylko do celów testowych. Teraz te kształty mają w sobie kręgi. –

Odpowiedz

1

Żaden z bibliotek przetwarzania obrazu, a nawet do przetwarzania obrazu w programie MATLAB umożliwia wyszukiwanie wewnątrz ROI (zwrot z inwestycji ROI - region intrest jak prostokąty lub koła). Pojęcie to: REGION CROP -> WYSZUKIWANIE OBIEKTÓW W REGIONIE

Najpierw zlokalizuj podstawowe prostokąty, następnie przycinaj obraz do prostokątów i przeprowadź w nich wyszukiwanie w kółku. W przeciwnym razie wyszukaj wszystkie kręgi i wszystkie prostokąty, a następnie zaklasyfikuj kręgi do należących do których prostokąta za pomocą prostych obliczeń matematycznych.

+0

cóż, już zrobiłem to rozwiązanie. Znalazłem prostokąty. Następnie przycinam go z obrazu i wykonuję proces na tym obrazie dla kół. Ale szukam rozwiązania w AForge. Zastanawiam się, czy Aforge może znaleźć rozwiązanie tego problemu bezpośrednio, a nie ten hack. –

+0

To nie jest hack, tak zaprojektowano biblioteki. Bądź oświecony, znalazłeś właściwą drogę. – SACn

+0

Dziękuję za rozwiązanie :). Szukam AForge'a i czytam ich forum oraz szukam szczegółów, jak zakładają to zachowanie. –