0

ad/d(n*x) 演算子のステンシルを生成するにはどうすればよいですか?

画像の線導関数を計算する必要があるプログラムを書いています。d/dx に関して最も単純な微分近似を計算する場合は、次の操作を実行できます。

diff[x] = -1.0 * image[x] + image[x+1]

導関数のより正確な計算が必要な場合は、ステンシルのサイズを大きくして、次のように再計算することができます。

diff[x] = -3./2 * image[x] + 2*image[x+1] - 1./2 * image[x+2]

これらの係数を取得する際に有限差分法を使用しています。

ここで、d/d(3*x) に関して導関数を取得したいとします。元のステンシルを次のように単純に引き伸ばすことができます。

diff[x] = -1.0 * image[x] + image[x+3]

ただし、ここでは image[x+1] と image[x+2] からの情報を使用していないため、微分近似を大幅に改善できます。この情報を使用してより正確なステンシルを生成するにはどうすればよいですか?

4

2 に答える 2

1

あなたの問題についての私の理解から、希望の解像度(たとえば、3で割った値)でサブサンプリングされた画像を生成し、元の導関数計算方法を適用することを提案します。サブサンプリング手順では、最初に画像にローパス フィルターを適用することにより、適切なアンチエイリアス処理を行う必要があります (たとえば、ボックスまたはガウスぼかしを使用)。

于 2013-03-11T11:49:25.143 に答える
1

2 つの提案:

  • まず、一般に、中心計算を使用します。したがって、高次の一次導関数は次のようになります。0.5*(image[x+1]-image[x-1])

  • 次に、連鎖式を使用して「3xに関して」を導き出します。最も単純な形式では、正式には、df/dy = df/dx*dx/dyつまり、dImage/d(3x) = dImage/dx*(1/3) 簡単に言うと、3 で割るだけです。

于 2013-03-11T21:06:49.533 に答える