簡體   English   中英

使用scipy.weave.inline進行快速2D中值濾波

[英]Using scipy.weave.inline for fast 2D median filtering

我在用於大量圖像的2D中值濾鏡(3x3窗口)中有一個瓶頸,我想嘗試對其進行優化。 我已經測試了scipy.ndimage過濾器以及PILscipy.signalscikits-image 但是,在SO中瀏覽時,我了解到C中有一個快速的O(n)中值過濾器(恆定時間中值過濾,請參閱C中的滾動中值算法 ),我想知道是否可以使用scipy在Python中實現它。 weave.inline嗎? 關於替代路線有什么建議嗎?

試試這個: 在C中滾動中位數-Turlach實現

http://ideone.com/8VVEa

用法:

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

我相信這與R算法相同,但更加簡潔(實際上令人驚奇的是)。

您可以將其包裝或移植並使用Numba(或Cython)。 我想我推薦Numba勝過Cython,如果沒有別的,因為它純朴的python代碼。

我建議將其添加到scikits中,如果它比scikits中的運行速度快:)

如果您仍然感興趣,我會嘗試numpy的重塑和中位數:

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

我不知道它與您的睾丸方法相比如何擴展,但是如果您想使用C進行優化,則可以在列表理解中固定for循環...

我不知道底層算法,但是scikits-image具有滾動中值濾波器

否則,建議使用Cython (C / Python pidgin語言)編寫它。 確保檢查出卷積示例/教程以使用numpy數組。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM