[英]Using scipy.weave.inline for fast 2D median filtering
我在用於大量圖像的2D中值濾鏡(3x3窗口)中有一個瓶頸,我想嘗試對其進行優化。 我已經測試了scipy.ndimage
過濾器以及PIL
, scipy.signal
和scikits-image
。 但是,在SO中瀏覽時,我了解到C中有一個快速的O(n)中值過濾器(恆定時間中值過濾,請參閱C中的滾動中值算法 ),我想知道是否可以使用scipy在Python中實現它。 weave.inline嗎? 關於替代路線有什么建議嗎?
試試這個: 在C中滾動中位數-Turlach實現
用法:
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循環...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.