我正在尝试检测此图像上的矩形:

使用此代码:
static void Main(string[] args)
{
// Open your image
string path = "test.png";
Bitmap image = (Bitmap)Bitmap.FromFile(path);
// locating objects
BlobCounter blobCounter = new BlobCounter();
blobCounter.FilterBlobs = true;
blobCounter.MinHeight = 5;
blobCounter.MinWidth = 5;
blobCounter.ProcessImage(image);
Blob[] blobs = blobCounter.GetObjectsInformation();
// check for rectangles
SimpleShapeChecker shapeChecker = new SimpleShapeChecker();
foreach (var blob in blobs)
{
List<IntPoint> edgePoints = blobCounter.GetBlobsEdgePoints(blob);
List<IntPoint> cornerPoints;
// use the shape checker to extract the corner points
if (shapeChecker.IsQuadrilateral(edgePoints, out cornerPoints))
{
// only do things if the corners form a rectangle
if (shapeChecker.CheckPolygonSubType(cornerPoints) == PolygonSubType.Rectangle)
{
// here i use the graphics class to draw an overlay, but you
// could also just use the cornerPoints list to calculate your
// x, y, width, height values.
List<Point> Points = new List<Point>();
foreach (var point in cornerPoints)
{
Points.Add(new Point(point.X, point.Y));
}
Graphics g = Graphics.FromImage(image);
g.DrawPolygon(new Pen(Color.Red, 5.0f), Points.ToArray());
image.Save("result.png");
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
但它不识别矩形(墙壁).它只识别大方块,当我减小minHeight和minWidth时,它会识别出写入时的梯形.
ade*_*ago 10
我提出了一种不同的算法方法,在用图像处理算法工作了近一年之后,我能说的是,为了创建一个有效的算法,你必须"反思"你如何像人类那样做,这是建议的方法:
我们并不关心纹理,我们关心边缘(矩形是边缘),因此我们将应用边缘检测>差异(http://www.aforgenet.com/framework/docs/html/d0eb5827- 33e6-c8bb-8a62-d6dd3634b0c9.htm),这给了我们:
我们想要夸大墙壁,因为人类我们知道我们正在寻找墙壁,但计算机并不知道这一点,因此,应用两轮形态学>扩张(http://www.aforgenet.com/framework/docs) /html/88f713d4-a469-30d2-dc57-5ceb33210723.htm),这给了我们:
我们只关心什么是墙和什么不是,应用二值化>阈值(http://www.aforgenet.com/framework/docs/html/503a43b9-d98b-a19f-b74e-44767916ad65.htm),我们得到:

(可选)我们可以应用blob提取来擦除标签("QUARTO,BANHEIRO"等)
我们应用Color> Invert,这只是因为下一步检测到白色而不是黑色.
应用Blob>处理>连接组件标签(http://www.aforgenet.com/framework/docs/html/240525ea-c114-8b0a-f294-508aae3e95eb.htm),这将为我们提供所有矩形,如下所示:
请注意,对于每个彩色框,您都有其坐标,中心,宽度和高度.因此,您可以使用该坐标从实际图像中提取剪辑.
PS:强烈建议使用AForge Image Processing Lab程序来测试你的算法.
| 归档时间: |
|
| 查看次数: |
6004 次 |
| 最近记录: |