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

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();
}
Mobile version