5

非常に大きな画像セットで使用する 2D メディアン フィルター (3x3 ウィンドウ) にボトルネックがあり、それを試して最適化したいと考えています。scipy.ndimagemedian_filter とPILscipy.signalおよびをテストしましscikits-imageた。ただし、SO でブラウジングすると、C に高速な O(n) メディアン フィルターがあることがわかりました (一定時間のメディアン フィルター処理はC のローリング メディアン アルゴリズムを参照してください)。 weave.inline ? 代替ルートに関する提案はありますか?

4

3 に答える 3

3

これを試してください: Cのローリングメディアン-Turlach実装

http://ideone.com/8VVEa

使用法:

Mediator* m = MediatorNew(9);
for (...)
{
      MediatorInsert(m, value);
      median = MediatorMedian(m);
}

これはRアルゴリズムと同じですが、よりクリーンだと思います(実際、驚くほどそうです)。

これをラップするか、移植して Numba (または Cython) を使用することができます。Cython よりも Numba をお勧めします。それ単純な古い python コードであるためです。

既に scikits のものよりも高速に実行される場合は、これを scikits に追加することをお勧めします:)

于 2014-06-01T10:56:44.207 に答える
2

それでも興味がある場合は、numpy の reshape と median を試してみます。

a= some big array
a.reshape(N,3,3) #N being specific to your array
[numpy.median(m) for m in a]

これがtestetメソッドと比較してどのようにスケーリングするかはわかりませんが、Cで最適化したい場合は、リスト内包表記でforループを固定できます...

于 2012-04-02T13:26:30.887 に答える
1

基になるアルゴリズムはわかりませんが、scikits-image にはローリング メディアン フィルターがあります。

それ以外の場合は、 Cython (C/Python pidgin 言語)で作成することをお勧めします。numpy 配列を操作するための畳み込みの例/チュートリアルを必ず確認してください。

于 2012-03-26T15:17:35.207 に答える