Erkennung von weißen FleckenC#

Ein Treffpunkt für C#-Programmierer
Anonymous
 Erkennung von weißen Flecken

Post by Anonymous »

Ich versuche, AForge.NET zu verwenden, um eine dicke weiße Linie über einem Bild zu erkennen.

Es ist wie eine Röhre, die ich erhalte, und ist mein gewünschtes Ergebnis nach der Anwendung eines Schwellenwertfilters.

Ich weiß, wie man Formen erkennt, und das mache ich bereits, aber das passt zu keiner Form, da es keine Kanten hat und kein Kreis ist.

Das habe ich Beispielcode für die Erkennung gleichseitiger Formen, aber ich weiß nicht, ob das relevant ist.

Code: Select all

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 edgePoints = blobCounter.GetBlobsEdgePoints(blobs[i]);
List 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 zu erkennen versuche:

Image


Wenn jemand eine Idee hat, wie ich diesen weißen Fleck mit AForge oder auf andere Weise mit C#/.NET erkennen kann, wäre ich wirklich dankbar it.

Der obige Code erkennt nur Kanten, also erkennt er die Form nur, wenn sie eine scharfe Kante hat, was selten der Fall sein wird.

BEARBEITEN

Ich habe es sozusagen mit der folgenden Methode zum Laufen gebracht

Code: Select all

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 geben als die Verwendung fester Breiten (da diese stark variieren können)

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post