使用跨步技巧實現高效移動平均濾波器
此查詢探討如何使用跨步技巧來開發比上一篇文章中所描述的基於卷積的方法。目標是為 scipy.ndimage.filters.convolve 相對較慢的任務過濾大型浮點陣列。
最初的方法採用跨步技巧來產生一系列表示頂部、中間和底部的數組3x3 過濾器內核的行。然後對這些數組進行求和並平均以產生每個像素的濾波器輸出。然而,提問者尋求一種更有效的方法,可以直接取得整個陣列的內核元素的總和或單一值。
使用多維跨步技巧的改進方法
增強的解決方案涉及應用多維跨步技巧來創建原始數組的視圖,其中每個元素代表所需大小的移動視窗。這允許對最後一個軸多次應用任意函數,有效地計算滑動視窗上的移動平均值或其他所需的統計度量。
程式碼範例
<code class="python">import numpy as np def rolling_window(array, window): """Multidimensional moving window function""" # Validate window dimensions if not hasattr(window, '__iter__'): return rolling_window_lastaxis(array, window) for i, win in enumerate(window): if win > 1: array = array.swapaxes(i, -1) array = rolling_window_lastaxis(array, win) array = array.swapaxes(-2, i) return array filtsize = (3, 3) array = np.arange(100).reshape((10, 10)) windowed_array = rolling_window(array, filtsize) blurred_array = windowed_array.mean(axis=-1).mean(axis=-1)</code>
增強解決方案的優點
限制
儘管如此儘管有優點,但值得注意的是,對多維移動視窗使用跨步技巧可能會導致記憶體使用量增加。因此,應仔細考慮可用資源和輸入數組的大小。
與scipy.ndimage 的比較
雖然步幅技巧提供了靈活性和向量化優勢、 scipy.ndimage 函數通常更節省內存,並且針對多維圖像處理任務進行了優化。對於大型數組,建議使用 scipy.ndimage.uniform_filter 作為應用移動平均濾波器的更快、更穩健的選項。
以上是如何透過跨步技巧增強移動平均濾波器的實現?的詳細內容。更多資訊請關注PHP中文網其他相關文章!