Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image processing 消除另一个blob中的blob_Image Processing_Character_Ocr_Aforge_Blobs - Fatal编程技术网

Image processing 消除另一个blob中的blob

Image processing 消除另一个blob中的blob,image-processing,character,ocr,aforge,blobs,Image Processing,Character,Ocr,Aforge,Blobs,我目前正在使用C#和AForge.NET开发一个字符识别程序,现在我正在努力处理斑点 这就是我创建blob的方式: BlobCounter bcb = new BlobCounter(); bcb.FilterBlobs = true; bcb.MinHeight = 30; bcb.MinWidth = 5; bcb.ObjectsOrder = ObjectsOrder.XY;

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

这就是我创建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);
}
执行后,我的参考图像如下所示:

如您所见,几乎所有字符都可以识别。不幸的是,有些字符在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);
}
foreach(矩形中的矩形)
{
对于(int i=0;i<(rects.Length-1);i++)
{
if(rects[i].包含(rects[i+1]))
rects[i]=Rectangle.Union(rects[i],rects[i+1]);
}
g、 DrawRectangle(笔、矩形);
}
……但它一点也不成功


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

你们可以通过检查矩形的角索引来检测矩形中的矩形, 我有一个MATLAB代码,我为类似的问题编写了:

下面是代码片段:

function varargout=isBoxMerg(参考框、测试框、isNewBox)

X=ReferenceBox;Y=测试盒

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)>=X2&&(Y2+H2)>=Y1&&(Y1+H1)>=Y2&&(X1+W1)>=X2&(X2+W2)>=X1)

Intersection=true
else

`Intersection = false;`
end

  • 其中X和Y是边界矩形的左上角索引;W和H分别为宽度和高度
在上面的if Intersection变量变为true时,表示框具有交集。您可以使用此代码进行进一步的自定义


谢谢

您可以通过检查矩形的角点索引来检测矩形中的矩形, 我有一个MATLAB代码,我为类似的问题编写了:

下面是代码片段:

function varargout=isBoxMerg(参考框、测试框、isNewBox)

X=ReferenceBox;Y=测试盒

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)>=X2&&(Y2+H2)>=Y1&&(Y1+H1)>=Y2&&(X1+W1)>=X2&(X2+W2)>=X1)

Intersection=true
else

`Intersection = false;`
end

  • 其中X和Y是边界矩形的左上角索引;W和H分别为宽度和高度
在上面的if Intersection变量变为true时,表示框具有交集。您可以使用此代码进行进一步的自定义


谢谢

形态填充怎么样?形态填充怎么样?效果很好!谢谢你工作得很好!非常感谢。