2014-10-10 744 views
1

有沒有辦法從輪廓中移除小線段?OpenCV - 如何從輪廓中移除小線段?

例如,在此圖像中,最大的輪廓由綠色指定,它的近似被藍色規定:

enter image description here

由於輪廓是點的集合,我想我們可以做一些東西去除紅色圓圈中的輪廓線段。例如通過檢測和去除小線或小的子輪廓或其他方式。但我不知道我該怎麼做。

請記住我想在找到輪廓後刪除它們,而不是在此之前。你知道我可以如何移除它們嗎?或者有什麼想法?

+0

我該如何去做就是坐下來寫一張紙,做一個草圖,並在數學上定義這些異常值的條件,例如,在任何一個座標系中跳躍都可以做(在這裏查看你在異常點中有多少點會有幫助)。然後簡單地過濾尖峯。試過這樣的事情? – 2014-10-10 14:46:01

+0

你是如何解決它的? – tobes 2015-02-27 14:12:58

+1

@tobes我無法以常規方式刪除它們,我嘗試通過'grabcut'找到前景,然後查找它的輪廓。 – hasanghaforian 2015-02-27 18:52:28

回答

0

我發現contourArea可以很好地去除小的,孤立的輪廓。這個片段說明你可能會對如何進行:

findContours(edges, contours, hierarchy, CV_RETR_CCOMP, CV_CHAIN_APPROX_SIMPLE); 

...

// Prune contours 
vector<vector<Point> > prunedContours; 
for (size_t i = 0; i< contours.size(); i++) 
    { 
     if (contourArea(contours[i]) > minArea) 
     { 
      prunedContours.push_back(contours[i]); 
     } 
    } 

如果「循環」或外部輪廓區域是關注的大輪廓的一部分,看看approxPolyDP。可能粗略近似的原始輪廓可以忽略無關特徵。

+0

如果你看到圖片,你可以看到近似也有不需要的線條。 – hasanghaforian 2014-10-10 14:52:47

+0

我假設你已經增加了approxPolyDP的epsilon值?綠色輪廓應該在足夠高的「epsilon」下「退化」爲四邊形多邊形。此外,藍色輪廓似乎在左下角有一個循環。這表明你還沒有按區域修剪你的原始輪廓列表。 – Throwback1986 2014-10-10 15:40:22