2015-10-09 65 views
0

想象一下,我有兩個點陣列。其中之一是一個開放的多邊形,看起來像這樣。我可以使用什麼算法來區分封閉和開放的柵格多邊形?

Image 1

X ES是黑點和點( '') - 白色的。

第二點陣列包含一個封閉的多邊形:

Image 2

我需要一種算法,它允許我來確定給定點陣列是封閉的多邊形或開放一個的名稱。我需要這些信息來確定我是否可以填充填充它(我不能填充第一個例子,但是我可以填充第二個填充)。

調用的算法是什麼,它允許我區分兩種類型的多邊形?

更新1(10.10.2015 10:05 MSK):我需要區分封閉多邊形和開放多邊形,以防止洪水填充錯誤。

洪水填寫錯誤,是我申請當洪水填充到一個開放的多邊形像

..... 
..XXX 
.X..X 
X...X 

,並用完全充滿電網結束了:

XXXXX 
XXXXX 
XXXXX 
XXXXX 

我最初的想法是

  1. 取多邊形,
  2. 檢查,如果它是開放的或c如果關閉,則應用填充。現在

,我能做到這一點是不同的:

  1. 洪水填滿多邊形。
  2. 如果整個網格都被填充,那麼它是一個開放的網格,否則(洪水填充之後網格中至少有一個點是白色的),它是一個封閉的網格。

如果有辦法避免做洪水填充來決定,不管多邊形是打開還是關閉,請告訴我。

+2

我稱之爲「洪水填充算法」。也就是說,如果你從一個隨機角落開始填充填充並檢查每個像素,那麼如果你找到一個未填充的像素,它就處於封閉形狀的內部,否則它是一個開放的形狀。 – usr2564301

+0

有幾種方法可以做到這一點,但我不記得任何名稱,我沒有我的副本「岡薩雷斯和伍茲數字圖像處理」方便。一個簡單的方法是應用填充,然後檢查角落:如果有任何不是邊框或未填充的,那麼多邊形是開放的,您需要恢復填充。另一種方法是挑選周邊的任何相交點,然後通過檢查相鄰的NSEW像素來尋找更多線(您似乎不需要高於1的城市街區距離,或者換句話說,沒有NE/SW邊界)。繼續跟蹤,直到你到達先前的座標或不符合要求。賓果 – dandavis

+0

@Jongware看我的更新1.如果有辦法做到這一點沒有洪水灌裝,請告訴我。 –

回答