2013-04-10 55 views
1

假設您獲得了vector<vector<bool>>(方形區域),其中1對應於「填充」框。有沒有方法可以在O(n)時間內找到整個區域?例如,該載體將具有兩個完整區域:查找圖像中的不同部分

0 0 1 1 1 0 0 0 
0 0 0 0 1 0 0 0 
0 0 0 0 0 1 0 0 
0 0 0 0 0 0 0 0 
0 1 0 0 1 0 0 0 
0 0 1 0 1 0 0 0 
0 0 0 1 0 0 0 0 
0 0 0 0 0 0 0 0 
+0

你的例子中的「整個地區」是什麼?什麼是n?像素數量? – 2013-04-10 05:39:05

+0

是的。在這種情況下n是64,因爲矩陣是8×8。整個區域是包含1的區域。由於1在2個不同的地方連接,所以有2個地區(即你可以對角連接)。 – 2013-04-10 05:41:43

回答

3

這稱爲8連接region growing。這是圖像處理中的標準技術,您可以選擇種子像素並「增長」。這可以用BFS在線性時間內完成在像素數:

  • 保持與邊緣隊列,把那裏的初始種子
  • 從隊列中取出一個元素調用它當前點並添加到您的「區域」列表
  • 推到隊列中的當前點是一個鄰居,從來沒有推到隊列中,你已經被推到了隊列
  • 結束時隊列爲空的點。

區域列表包含一個區域,將其設置爲零。找到另一顆種子並再次運行,直到找不到種子。

+0

這種情況下的初始種子是什麼?它只是任何像素(可能是第一個)? – 2013-04-10 07:07:05

+0

找到1的第一個位置。 – carlosdc 2013-04-10 07:08:05

+0

什麼是邊緣? – 2013-04-10 07:11:17