2017-02-08 17 views
6

Я пытаюсь обнаружить круг внутри прямоугольника в AForge. Я успешно определил Rectangles, но не удалось найти circles внутри. Rectangle. Как найти форму внутри другой формы в AForge.Как найти круг внутри Прямоугольник в 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

Похоже, вы пытаетесь сделать квадрат с углами по окружности круга. Затем круг будет за пределами квадрата, и вам нужно, чтобы круг находился внутри квадрата. – jdweng

+0

@jdweng Нет, я распознал прямоугольники. Теперь эти прямоугольники имеют круги внутри. Теперь я хочу получить эти круги внутри прямоугольника. –

+0

@jdweng Я разработал многоугольник на обнаруженных прямоугольниках только для целей тестирования. Теперь у этих фигур есть круги внутри них. –

ответ

1

Ни одна из библиотек обработки изображений и даже обработка изображений в среде MATLAB не позволяет вам искать ROI внутри ROI (ROI - область intrest как из прямоугольников или кругов). Концепция CROP REGION -> ПОИСК ОБЪЕКТОВ В РЕГИОНЕ

Итак, сначала найдите первичные прямоугольники, затем обведите изображение в прямоугольники и выполните поиск по кругу внутри них. В противном случае найдите все круги и все прямоугольники, а затем классифицируйте круги, принадлежащие к тому прямоугольнику, которые используют простые математические данные.

+0

хорошо, я уже сделал это решение. Я нашел прямоугольники. Чем я обрезаю его из образа и делаю процесс на этом изображении для кругов. Но я ищу решение в AForge. Интересно, что у Афонха могло быть решение этой проблемы прямо, а не на этот хак. –

+0

Это не взлом, так как библиотеки разработаны. Итак, просветите, что вы нашли правильный путь. – SACn

+0

Спасибо за ваше решение :). Я ищу AForge и читаю их форум и изучая детали, как они предполагают такое поведение. –