Próbuję użyć AForge.NET do wykrycia grubej białej linii na obrazku.Wykrywanie białych plam AForge.NET
To jest jak rura, którą dostaję i jest moim pożądanym rezultatem po zastosowaniu filtru Progu.
Wiem, jak wykrywać kształty i robię to, już, ale to nie pasuje pod dowolnym kształtem, ponieważ nie ma krawędzi i nie jest okręgiem.
Mam przykładowy kod wykrywający kształty równoboczne, ale nie wiem, czy to istotne.
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();
}
Oto obraz Próbuję wykryć
http://i206.photobucket.com/albums/bb29/cheater1034/pipe.png
Jeśli ktoś ma jakiś pomysł jak mogę wykryć tę białą plamę z AForge lub w inny sposób przy użyciu C# /. NET i” naprawdę to doceniamy: O
Powyższy kod wykrywa tylko krawędzie, więc wykrywa kształt tylko wtedy, gdy ma ostry brzeg, co rzadko ma miejsce.
EDIT
I jakby się pracowało z następującym sposobem
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();
}
Musi być lepszy sposób niż przy użyciu stałych szerokościach (ponieważ mogą one znacznie różnić)