2008-10-31 71 views
2

我正在尋找一種方法以編程方式重新產生以下影響:如何製作Photoshop筆畫效果?

給輸入圖像:
input http://www.shiny.co.il/shooshx/ConeCarv/q_input.png

我要反覆應用「中風」的效果。
第一步看起來是這樣的:
step 1 http://www.shiny.co.il/shooshx/ConeCarv/q_step1.png

第二步是這樣的:
alt text http://www.shiny.co.il/shooshx/ConeCarv/q_step2.png

等。

我認爲這將涉及某種邊緣檢測,然後以某種方式跟蹤邊緣。
有沒有一種已知的算法可以高效穩健地完成此操作?

回答

5

基本上,一個自定義的算法將是,根據this thread

採取的3×3鄰域周圍的像素,閾值α通道,然後查看是否有任何像素周圍的8個像素都具有不同的alpha值。如果是這樣,在給像素中心繪製一個給定半徑的 圓。做內部/外部,由閾值alpha通道調製(否定做另一邊)。如果圓半徑大於一個像素(它可能是),則必須將閾值設爲較大的鄰域。


這是通過使用灰度形態運算來實現。這也是用於展開/收縮選擇的相同技術。基本上,要選擇一個選擇(或一個alpha通道)的中心,人們會做的是首先製作兩個單獨的選擇副本。第一個選擇將被擴大到中風的半徑,而第二個選擇將被收縮。然後通過從第一個減去第二個選擇來獲得筆畫的不透明度。

爲了執行內部和外部筆劃,您將縮小/擴大兩倍的半徑,並減去與原始選擇相交的部分。

應該指出,最一般的形態學算法需要O(m * n)運算,其中m是圖像的像素數,n是「結構元素」中元素的數量。但是,對於某些特殊情況,這可以針對O(m)操作進行優化(例如,如果結構元素是矩形或菱形)。