1

畳み込み行列(単なる 2D double[][])を取り、それを画像に適用するJavaコードがあります。ぼかしの角度 (度) と大きさを指定して、モーション ブラーを与えるマトリックスを作成する方法を見つけようとしています。

マグニチュード = 1 (中央のピクセルが各方向に 1 ピクセルずつブラーされる) のブラーのマトリックスの例、45 度のモーション ブラーは次のとおりです。

0      0    1/3
0     1/3    0
1/3    0     0

マグニチュードは行列のサイズ (サイズ = 2*マグニチュード + 1) を決定し、セルの 1 行は移動方向にゼロではありません。

私が問題を抱えているのは、角度が与えられたマトリックスでゼロ以外のセルを特定するために必要な数学/コードです。

疑似 (または実際の) コードは非常に役立ちます。

4

2 に答える 2

1

Matlab と Octave には、畳み込み用のカーネルを作成するための "fspecial" と呼ばれる組み込み関数があります。'motion' フラグをマグニチュードと角度と共に渡すことで、イメージにモーション ブラーを適用するために使用できる構成カーネル (マトリックス) が出力されます。https://octave.sourceforge.io/image/function/fspecial.html

残念ながら、このカーネルを作成するための機能は、他の言語にはないようです。私が考えることができる最善の方法は、角度と大きさを線の開始点と終了点 (x,y) に変換することです。次に、Xiaolin Wu アルゴリズムhttps://rosettacode.org/wiki/Xiaolin_Wu%27s_line_algorithmを使用して、グレースケールのアンチエイリアス ラインを描画できます。

画像で畳み込む前にカーネルが正規化されるように、すべての要素を要素の合計で割る必要があります。

于 2020-07-10T16:03:19.580 に答える
1

モーション ブラーの場合、ゼロ以外の要素はすべて 1 つの線に沿って表示されます。それがあなたの例が機能する理由です。[1/n 1/n (ntimes)... 1/n] は水平方向にぼやけますが、転置は垂直方向にぼやけます。任意の角度については、必要な角度で線を最もよく近似するゼロ以外の要素を入力するだけです。

編集。

たとえば、ピクセル インデックスの一部の関数を最小化して、そのピクセルが非ゼロであるべきかどうかを判断しようとする場合があります。|(i - 3*j)| < 小さい数値、勾配 3 の線に沿ったピクセルを検索します。

于 2013-03-22T21:09:59.160 に答える