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