2008年9月2日星期二

ConvolutionFilter

自 Flash 8 加了濾鏡功能以來,我都沒去好好的看看這方面的語法,想必許多書上應該都有教到這部份,如果你早就已經知道的話,就不用看了,或是發現我以下的說明有錯的話,再指正我一下吧。

[ConvolutionFilter 用途]

簡單來說:將每個像素,以他周邊的其他像素加進來一起運算,算出最後的像素值。

詳細來說:要使用該像素周邊的哪些像素值,是以一陣列來決定,陣列中心點為自己,如:

[0, 0, 0,
0, 1, 0,
0, 0, 0]

表示中心像素(也就是該像素自己啦)的加權為 1,周邊為 0。若:

[0, 1, 0,
1, 1, 1,
0, 1, 0]

表示,運算過程除了要使用自己的像素之外,還要使用上(x, y-1)、下(x, y+1)、左(x-1, y)、右(x+1, y) 四個像素來一起運算,這五個像素的加權都為 1(都只乘上1次的使用次數)。

算出來的值,可以給予一個除數 divisor 來避免像素值太超過,譬如上述的

[0, 1, 0,
1, 1, 1,
0, 1, 0]

若是給予的除數是 5 的話,意義上來說就等於是將這個位置的像素值與上下左右的像素值加總平均。

算出來的值,還可以再給予一個偏移量 bias,直接對像素做加減。

[套進語法]

Help 提到的語法:

public function ConvolutionFilter(matrixX:Number = 0, matrixY:Number = 0, matrix:Array = null
, divisor:Number = 1.0, bias:Number = 0.0
, preserveAlpha:Boolean = true, clamp:Boolean = true, color:uint = 0, alpha:Number = 0.0)

若是一般我們只使用 3x3 矩陣,表示只使用每個像素周邊一圈的像素值一起來運算:

(x-1, y-1), (x, y-1), (x+1, y-1),
(x-1, y), (x, y), (x+1, y),
(x-1, y+1), (x, y+1), (x+1, y+1)

則函式的第一 matrixX 第二 matrixY 參數都是填入 3,第三參數 matrix 就是填入每個像素的權數,最後加總的結果用 divisor 來除,並加上 bias 偏量。

[看範例學比較快]

要學 ConvolutionFilter 的語法觀念,也就是說要知道每個參數的用途,最好的方式就是使用官方提供的範例檔案來看執行效果:

http://livedocs.adobe.com/flash/9.0/main/fl_filters_example.pdf
http://www.adobe.com/support/documentation/en/flash/samples/

這個範例檔案中包含了大部分的內建濾鏡,不過我們只需要用來看看 ConvolutionFilter 的部份:



[數種應用]

根據範例程式碼

正常

只有中心加權為 1。



Shift pixels left

以右邊像素取代此座標的像素。



Shift pixels up

以下面像素取代此座標的像素。



Blur

此座標加上四邊像素除五的平均值。



Enhance

強調中心像素的比重,而且 -40 的偏量使結果變暗。



Sharpen

強調中心像素,造成銳利化。



Add Contrast

增加對比的作法,像素乘兩倍後,再減掉一倍的 255。



Emboss

浮雕,加重右下角的加權,減少左上角的加權。



Edge detect

強調邊緣。



Horizontal edge detect

強調水平邊緣。



Vertical edge detect

強調垂直邊緣。



若不想強調上方邊緣(天鵝背部羽毛較亮),也可改成強調下方邊緣(天鵝腹部羽毛較亮),只要改矩陣即可。



[關鍵問題]

學會如何使用 ConvolutionFilter 之後,我覺得關鍵的問題在於,要如何知道不同濾鏡背後的演算法,這才是重點。

我還需要找找看有沒有好心人士有在網路上 PO 這些演算法,易懂易實做的才好。

1 意見:

boss802 提到...

這個功能好
但是缺點是Flash內建的濾鏡太少了,想搞怪的話就要自己寫語法來設定

之前為了弄出一個把圖片變成黑白的功能(去飽和),就讓我傷腦筋半天。

後來是在網路上找到配方之後才用的出來

關於我






* ben {dot} chang {at} ben {dot} idv {dot} tw
* FriendFeed

贊助我1元美金:

Plurk

標籤雲