GeneralConvolution

GeneralConvolution (clip, int "bias", string "matrix", float "divisor", bool "auto")

このフィルタは、RGB32 のクリップに対して、行列コンボリューション*1を実行します。

clip RGB32 クリップ
bias (デフォルト: 0) 全体的な出力の強さを調節するための付加的なバイアス
matrix (デフォルト: "0 0 0 0 1 0 0 0 0") -256 から 256 までの 9 個ないし 25 個の整数からなる 3x3 または 5x5 の行列
divisor (デフォルト: 1.0) コンボリューションの出力をこの値で割る(bias を追加する前に計算される)
auto (デフォルト: true) 自動スケーリング機能を有効にする。自動スケーリングは、結果を行列の成分の合計で割る。divisor の値は、この自動スケーリングの倍率に追加で適用される。成分の合計が 0 なら、auto は無効になる。

divisor は、通常、行列の成分の合計です。しかし、合計が 0 のとき、ピクセル値を訂正するために、divisorbias の設定を使用することができます。コンボリューションの結果、ピクセル値が負になる場合、bias が役に立ちます。bias を追加したあと、ピクセルは 0(もし 255 より大きいなら 255)でクリッピングされます。

縁の周辺では、行列に情報を提供するために、エッジのピクセルが単に反復されます。

いくつかの使用例:

# ぼかし:

GeneralConvolution(0, "
   10 10 10 10 10
   10 10 10 10 10
   10 10 16 10 10
   10 10 10 10 10
   10 10 10 10 10 ", 256, False)
# 水平方向のエッジ検出(ゾーベル法):

GeneralConvolution(128, "
    1  2  1
    0  0  0
   -1 -2 -1 ", 8)
# 垂直方向のエッジ検出(ゾーベル法):

GeneralConvolution(128, "
   1  0 -1
   2  0 -2
   1  0 -1 ", 8)
# 置換(単に「1」の位置を
# 左、右、上、下へ移動させる)

GeneralConvolution(0,"
   0 1 0
   0 0 0
   0 0 0 ")
# 0.5 ピクセル上と置換*2(自動スケーリング):

GeneralConvolution(0,"
   0 1 0
   0 1 0
   0 0 0 ")
# 0.5 ピクセル右と置換*3(手動スケーリング):

GeneralConvolution(0,"
   0   0   0
   0 128 128
   0   0   0 ", 256, False)
# シャープフィルタ:

GeneralConvolution(0,"
   0   -1   0
  -1    5  -1
   0   -1   0 ", 1, True)

この場合、新しいピクセル値 y(m,n) は、以下の計算式によって与えられる
y(m,n) = (-1*x(m-1,n) - 1*x(m,n-1) + 5*x(m,n) - 1*x(m,n+1)
         - 1*x(m+1,n))/(-1-1+5-1-1)/1.0 + 0
# 黒のレベルのクリッピングと 25% の明るさ増を伴う、軽いぼかしフィルタ:

GeneralConvolution(-16,"
   0   12   0
  12  256  12
   0   12   0 ", 0.75 ,True)

この場合、新しい画素の値 y(m,n) は、以下の計算式によって与えられる
y(m,n) = ( 12*x(m-1,n) + 12*x(m,n-1) + 256*x(m,n) + 12*x(m,n+1)
         + 12*x(m+1,n) )/(12+12+256+12+12)/0.75 - 16

その他のいくつかの例が、こちらにあります。

更新履歴:

v2 初版
v2.55 divisor と auto を追加

原文 Date: 2008/05/28 21:24:49
日本語訳 $Date: 2008/08/13 02:48:39 $