Sto cercando di utilizzare AForge.NET per rilevare una spessa linea bianca su un'immagine.AForge.NET White Blob detection
È come un tubo che ottengo ed è il risultato desiderato dopo l'applicazione di un filtro Soglia.
So come rilevare le forme e lo sto già facendo, ma questo non corrisponde a nessuna forma poiché non ha bordi e non è un cerchio.
Ho codice di esempio da rilevare forme equilatero, ma non so se questo è rilevante.
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();
}
Ecco l'immagine che sto cercando di rilevare
http://i206.photobucket.com/albums/bb29/cheater1034/pipe.png
Se qualcuno ha qualche idea di come posso rilevare che blob bianco con AForge o altrimenti utilizzando C# /. NET i' lo apprezzo davvero: O
Il codice sopra rileva solo i bordi, quindi rileverà la forma solo se ha un bordo tagliente, il che sarà raramente il caso.
EDIT
I sorta di averlo lavorare con il seguente metodo
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();
}
Ci deve essere un modo migliore di utilizzare larghezze fisse (perché possono variare grandemente)