効率的な移動平均フィルターにストライドを使用する
最近、ストライドベースのアプローチが、移動平均フィルターの実装効率の点で注目を集めています。これに関連して、従来の畳み込みベースの方法を超えて、ストライドを利用してそのようなフィルターのパフォーマンスを向上させる方法を検討します。具体的には、焦点ピクセルごとに周囲の 9 ピクセルを考慮する 8 近傍接続移動平均フィルターの実装に焦点を当てています。
ストライドを使用すると、配列の最上位行に対応する元の配列のビューを作成できます。フィルターカーネル。垂直軸に沿ってロール操作を適用すると、カーネルの中央の行を取得し、それを最初に作成したビューに追加できます。このプロセスを繰り返してカーネルの最下行を取得し、これらの行の合計をフィルター サイズで割って各ピクセルの平均を計算します。
このアプローチを説明するために、次の実装を考えてみましょう。
import numpy, scipy filtsize = 3 a = numpy.arrange(100).reshape((10, 10)) b = numpy.lib.stride_tricks.as_strided(a, shape=(a.size, filtsize), strides=(a.itemsize, a.itemsize)) for i in range(0, filtsize - 1): if i > 0: b += numpy.roll(b, -(pow(filtsize, 2) + 1) * i, 0) filtered = (numpy.sum(b, 1) / pow(filtsize, 2)).reshape((a.shape[0], a.shape[1]))
より一般的に言えば、指定された次元に沿ってローリング ウィンドウ操作を実行する関数を定義すると、多次元配列であっても移動平均フィルターを効率的に実装できます。ただし、ストライドベースのアプローチは特定のケースでは利点がありますが、複雑な多次元フィルタリング タスクでは、scipy.ndimage モジュールによって提供されるような特殊な関数の方が優れたパフォーマンスを提供できる可能性があることに注意することが重要です。
以上がストライドは画像処理における移動平均フィルターの効率を向上させることができますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。