質問

私は、これはプログラミングに非常に関連していないけど、私はコンボリューション行列は、PHPのGDの機能のためにどのように動作するかを知っておく必要があります。私はGoogleで多くのことを検索しましたが、それをうまく説明して何かを見つけることができません。

役に立ちましたか?

解決

私は、ここでは、コンボリューションフィルタの背後にある理論の負荷に行ってきました。

<のhref = "https://stackoverflow.com/questions/1696113/how-do-i-gaussian-blur-an-image-without-using-any-in-built-gaussian-functions/1696200#私は、内蔵ガウス関数を使用せずに画像をぼかすガウスはどうすればよい1696200" >?の

他のヒント

動作は重みが行列によって与えられるその周囲画素の加重平均と各画素を置き換えます。ここでは例のコンボリューション行列があります:

1 1 1
1 1 1
1 1 1

これがないと、その画素を中心とする3×3ブロックの平均値と各ピクセルを置き換えるあります。ここでは別のです。

0 0 0
0 1 0
0 0 0

この行列は何もしません、それはあなたの元バックを与えます。

重みがあまりにも、否定することができます。この行列は、次の画素への画素の平均値を減算します:

 0 -1  0
-1  4 -1
 0 -1  0

コンボリューション行列を使用すると、効果をぼかしとシャープに微調整でくださいすることができます。あなたは、チューニングの方向性と、それは十分な大きさだ場合、コンボリューション行列を使用して、フィルタの周波数応答をすることができます。しかし、それは通常、間に合わせのn-ボケとシャープのために使われてます。

私はPHPのために特別にわからないが、一般的に畳み込み行列は、画像処理の効果の特定の種類を実装するために使用されます。

GD HTTP上でPHPマニュアルから取られた

簡単な例:// WWW .php.net /マニュアル/ EN / function.imageconvolution.phpするます:

あなたが持っているとしましょう。このようなマトリックスます:

$M = array(array( 2,  0,  0),
           array( 0, -1,  0),
           array( 0,  0, -1));

は、画像への畳み込み行列を適用すると、その画像内の(x、y)に位置する画素毎に、出力に対応する画素となる

$I = $in_image;
$out_image[x,y] = $I[x-1,y-1]*$M[0][0] + $I[x,y-1]*$M[0][1] + $I[x+1,y-1]*$M[0][2]
                + $I[x-1,y]  *$M[1][0] + $I[x,y]  *$M[1][1] + $I[x+1,y]  *$M[1][2]
                + $I[x-1,y+1]*$M[2][0] + $I[x,y+1]*$M[2][1] + $I[x+1,y+1]*$M[2][2];

言い換えれば、畳み込み行列は、ソース画素とその周囲画素の線形結合として、各結果のピクセルを計算するために使用されます。

除数パラメータが何かによって、全体の結果を分割するために使用される(これは通常、マトリックスのすべての値の和である)およびオフセットされ、最終的な出力値に定数項を追加するために使用されます。

畳み込み行列は、独立して、画像のピクセルの各チャネル上で動作する。
だから、最初にチャンネルを学ぶ必要があります。
メニューFilters->その他 - >カスタムに行く:次に、あなたがPhotoshopのを持っている場合、対話的にこの行列を「再生」することができます。マトリックスの中心アイテムは、他のすべての周辺画素を表し、現在のピクセルを表します。そして、一番下にある「スケール」の値を忘れないでください。
私はあなたが簡単にこの行列が機能する方法を理解することができ、と思います。
あなたはこの事ここのを見ていることがあります。それだけでなく、コンボリューション行列を説明します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top