Flashで輪郭抽出を行う方法はいくつかあるかと思いますが、
畳込みフィルターよりも、(ビジュアル的に)綺麗な輪郭抽出にチャレンジしてみました。


今回はPixelBenderで輪郭抽出アルゴリズムのひとつの、Sobelオペレータを実行しています。

Sobelオペレータについては、Web上にたくさんドキュンメントがあるかと思うので
僕のつたない説明より、そちらを参考にしていただいた方が良いかと思いますが
前後のピクセルの差分をもとにゴニョゴニョする感じです。


サンプル




pbjファイルはこちら

pbkソースはこんな感じ

< languageVersion: 1.0; >

kernel EdgeDetection

<
    namespace : "";
    vendor : "Shimada Kousho";
    version : 1;
    description : "detect edge";
>

{
    input image4 src;
    output float4 dst;
    
    void evaluatePixel()
    {
        float4 col = float4(0.0, 0.0, 0.0, 0.0);   
        float4 col_hx = float4(0.0, 0.0, 0.0, 0.0);   
        float4 col_hy = float4(0.0, 0.0, 0.0, 0.0);   
        
        //X方向の差分
        col_hx -= sampleNearest(src, outCoord() + float2(-1.0, -1.0));
        col_hx -= sampleNearest(src, outCoord() + float2(-1.0, 0.0)) * 2.0;
        col_hx -= sampleNearest(src, outCoord() + float2(-1.0, 1.0));
        col_hx += sampleNearest(src, outCoord() + float2(1.0, -1.0));
        col_hx += sampleNearest(src, outCoord() + float2(1.0, 0.0)) * 2.0;
        col_hx += sampleNearest(src, outCoord() + float2(1.0, 1.0));
        
        //Y方向の差分
        col_hy -= sampleNearest(src, outCoord() + float2(-1.0, -1.0));
        col_hy -= sampleNearest(src, outCoord() + float2(0.0, -1.0)) * 2.0;
        col_hy -= sampleNearest(src, outCoord() + float2(1.0, -1.0));
        col_hy += sampleNearest(src, outCoord() + float2(-1.0, 1.0));
        col_hy += sampleNearest(src, outCoord() + float2(0.0, 1.0)) * 2.0;
        col_hy += sampleNearest(src, outCoord() + float2(1.0, 1.0));

        //X方向差分とY方向差分の合成
        col.r = sqrt(pow(col_hx.r, 2.0) + pow(col_hy.r, 2.0));
        col.g = sqrt(pow(col_hx.g, 2.0) + pow(col_hy.g, 2.0));
        col.b = sqrt(pow(col_hx.b, 2.0) + pow(col_hy.b, 2.0));
        
        //モノクロ化
        float col_mono = 0.298912 * col.r + 0.586611 * col.g + 0.114478 * col.b;
        
        dst = float4(col_mono, col_mono, col_mono, 1.0);
    }
}

 
 

HTML5飯