2015-10-20 36 views
1

我目前正在使用C#和AForge.NET進行字符識別的程序,現在我正在努力處理blob。消除另一個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 BlobImage

正如你所看到的,幾乎所有的字符都被識別出來。不幸的是,某些角色包括斑點內的斑點,例如, 「g」,「o」或「d」。

我想消除另一個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); 
} 

...但它沒有成功可言。

也許你們有些人可以幫助我嗎?

+0

形態充盈怎麼樣? –

回答

0

你可以嘗試通過檢查他們的角落指數矩形內檢測長方形, 我有我有類似的問題寫了這一個MATLAB代碼:

這裏是代碼的片段是:

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

Intersection = true; else

`Intersection = false;` 

end

  • 當X和Y是外接矩形的左上角的索引; W和H分別是寬度和高度。

如果相交變量變爲true,則表示具有交集的框。您可以使用此代碼進一步自定義。

謝謝你

+0

工作完美!謝謝 –