【问题标题】:Eliminating blob inside another blob消除另一个 blob 中的 blob
【发布时间】:2015-10-20 12:49:46
【问题描述】:

我目前正在开发一个使用 C# 和 AForge.NET 进行字符识别的程序,现在我正在努力处理 blob。

这就是我创建 blob 的方式:

BlobCounter bcb = new BlobCounter();
            bcb.FilterBlobs = true;
            bcb.MinHeight = 30;
            bcb.MinWidth = 5;
            bcb.ObjectsOrder = ObjectsOrder.XY;
            bcb.ProcessImage(image);

我还用矩形标记了它们:

Rectangle[] rects;
rects = bcb.GetObjectsRectangles();
Pen pen = new Pen(Color.Red, 1);
Graphics g = Graphics.FromImage(image);

foreach (Rectangle rect in rects)
{
     g.DrawRectangle(pen, rect);
}

执行后,我的参考图像如下所示:

BlobImage

如您所见,几乎所有字符都可以识别。不幸的是,某些字符在 blob 中包含 blob,例如“g”、“o”或“d”。

我想消除另一个 blob 中的 blob。

我尝试调整矩形的绘制以实现我的目标:

foreach (Rectangle rect in rects)
{

    for (int i = 0; i < (rects.Length - 1); i++)
    {
         if (rects[i].Contains(rects[i + 1]))
             rects[i] = Rectangle.Union(rects[i], rects[i + 1]);

    }
    g.DrawRectangle(pen, rect);
}

...但它根本没有成功。

也许你们中的一些人可以帮助我?

【问题讨论】:

  • 形态填充呢?

标签: image-processing character ocr aforge blobs


【解决方案1】:

您可以尝试通过检查矩形的角索引来检测矩形内的矩形, 我有一个针对类似问题编写的 MATLAB 代码:

这里是sn-p的代码是:

function varargout = isBoxMerg(ReferenceBox,TestBox,isNewBox)

X = ReferenceBox; Y = TestBox;

X1 = X(1);Y1 = X(2);W1 = X(3);H1 = X(4); X2 = Y(1);Y2 = Y(2);W2 = Y(3);H2 = Y(4);

if ((X1+W1)&gt;=X2 &amp;&amp; (Y2+H2)&gt;=Y1 &amp;&amp; (Y1+H1)&gt;=Y2 &amp;&amp; (X1+W1)&gt;=X2 &amp;&amp; (X2+W2)&gt;=X1)

Intersection = true; else

`Intersection = false;`

end

  • 其中 X 和 Y 是边界矩形的左上角索引; W 和 H 分别是宽度和高度。

在上面,如果 Intersection 变量变为 true,则表示框有交集。您可以使用此代码进行进一步的定制。

谢谢

【讨论】:

  • 完美运行!谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-09-24
  • 1970-01-01
  • 1970-01-01
  • 2013-12-08
  • 1970-01-01
  • 2021-06-27
  • 2015-01-27
相关资源
最近更新 更多