Weiße blob-Erkennung

Ich versuche zu verwenden AForge.NET zu erkennen, dass eine Dicke weiße Linie, die über ein Bild.

Es ist wie Pfeife, die ich bekommen und es ist mein gewünschtes Ergebnis nach der Anwendung eines Schwellwert-filter.

Weiß ich, wie die Umrisse zu erkennen, und ich mache das schon, aber das passt nicht unter jeder Form, da es keine Kanten und ist nicht ein Kreis.

Habe ich Beispielcode von der Erkennung ein gleichseitiges Dreieck Formen, aber ich weiß nicht, ob das relevant ist.

public void DetectQuadrilateralType(Bitmap bitmap)
{
    BlobCounter blobCounter = new BlobCounter();
    blobCounter.ProcessImage(bitmap);
    Blob[] blobs = blobCounter.GetObjectsInformation();
    //Graphics object to draw
    Pen pen;
    Graphics g = Graphics.FromImage(bitmap);
    SimpleShapeChecker shapeChecker = new SimpleShapeChecker();

    for (int i = 0; i < blobs.Length; i++)
    {
        List<IntPoint> edgePoints = blobCounter.GetBlobsEdgePoints(blobs[i]);
        List<IntPoint> corners;

        if (i < edgePoints.ToArray().Length && i > -1)
        {
            try
            {
                if (shapeChecker.IsConvexPolygon(edgePoints, out corners))
                {
                    PolygonSubType subType = shapeChecker.CheckPolygonSubType(corners);

                    pen = new Pen(colors[subType], 2);
                    g.DrawPolygon(pen, ToPointsArray(corners));
                    pen.Dispose();
                }
            }
            catch (Exception e) { }
        }
    }
    g.Dispose();
}

Hier ist das Bild, das ich versuche zu erkennen:

Weiße blob-Erkennung

Wenn jemand hat eine Idee, wie ich erkennen kann, dass der weiße blob mit AForge oder sonst mit C#/.NET ich würde es wirklich schätzen.

Den code oben nur erkennt Kanten, so werde es erkennen nur die Form, wenn es eine scharfe Kante hat, dem wird selten der Fall sein.

BEARBEITEN

Ich habe irgendwie das es funktioniert mit der folgenden Methode

public void DetectBigBlobs(Bitmap bitmap)
{
    BlobCounter blobCounter = new BlobCounter();
    blobCounter.ProcessImage(bitmap);
    Rectangle[] rects = blobCounter.GetObjectsRectangles();
    //Graphics object to draw
    Pen pen = new Pen(Color.Red, 2);
    Graphics g = Graphics.FromImage(bitmap);

    foreach (Rectangle rect in rects)
    {
        if (rect.Width > 200 && rect.Height > 150)
        {
            g.DrawRectangle(pen, rect);
        }
    }

    pen.Dispose();
    g.Dispose();
}

Es muss einen besseren Weg, als mit eine Feste Breite (weil Sie kann stark variieren)

InformationsquelleAutor bbedward | 2012-03-20
Schreibe einen Kommentar