2012-04-14 127 views
6

我有一個繪製圖像的畫布。正在尋找算法來尋找顏色區域的邊界

當用戶點擊圖片時,我需要找到用戶點擊的顏色區域。一個區域被定義爲一組與被點擊的像素具有相同顏色的四向連接像素。

我需要在表單中區,我可以用它來設置畫布上剪切路徑,這樣我就可以填補,比如面積,漸變等

是尋找有效率的算法一個邊界?比洪水填充算法更優化的東西(我不需要填充,我只需要在我的區域周圍找到一條路徑)。

+0

如果沒有單個邊界,例如,您希望發生什麼?點擊一個圓環,或[笑臉](http://phrogz.net/svg/svg_in_xhtml5.xhtml)的臉頰? – Phrogz 2012-04-14 18:00:08

+0

對於我的應用程序來說,獲得描述外部區域的路徑就足夠了,除非獲得描述外部區域和內部區域的一組路徑並不太昂貴。我懷疑我需要某種像素標記算法,然後是通過計算連接組件來統一標籤的階段。 – akonsu 2012-04-14 18:17:53

回答

4

我相信摩爾鄰域跟蹤算法會做你想做的。根據定義,摩爾鄰里看8連通性,但你應該能夠很容易地將其調整爲4連通性。如果您測試8連通性,您的結果區域最有可能會更好,但您的應用程序可能有特定要求。

維基百科擁有算法here的良好輪廓。過去我一直在努力,取得了巨大的成功 - 速度非常快。

+0

謝謝。這種方法唯一的問題是如何找到一個起始像素。在我的情況下,我需要追蹤一個區域的輪廓,並且它不是圖像中唯一的區域,所以我不能只從角落掃描圖像。 – akonsu 2012-04-14 22:37:40

+0

如果您在用戶的鼠標單擊位置開始迭代,則生成的輪廓將位於所需的區域。一般的想法是,你從左到右走,直到你點擊一個不同顏色的像素。在找到這樣一個像素時,您會以順時針方向查看所有鄰居,然後移動到當前區域的第一個像素。最終你會得到一個大綱。您不必從角落開始掃描圖像。 – Xenethyl 2012-04-14 23:00:55

+0

假設我點擊區域中間的某個白色像素(我想勾勒出一個白色區域),並且它的鄰域中沒有黑色像素(我的背景)。那我該怎麼辦? – akonsu 2012-04-14 23:03:38