使用步幅實現高效的移動平均濾波器
最近,基於步幅的方法因其在實現移動平均濾波器方面的效率而受到關注。在這種情況下,我們探索如何利用步幅來增強此類濾波器的性能,超越更傳統的基於卷積的方法。具體來說,我們專注於實現一個 8 鄰域連接的移動平均濾波器,該濾波器考慮每個焦點像素周圍的 9 個像素。
使用步幅,我們可以建立與頂行對應的原始陣列的視圖。過濾器核心。透過沿著垂直軸應用滾動操作,我們可以獲得內核的中間行並將其新增至最初建立的視圖。重複此過程以獲得內核的底部行,然後將這些行的總和除以濾波器大小以計算每個像素的平均值。
為了說明此方法,請考慮以下實現:
import numpy, scipy filtsize = 3 a = numpy.arrange(100).reshape((10, 10)) b = numpy.lib.stride_tricks.as_strided(a, shape=(a.size, filtsize), strides=(a.itemsize, a.itemsize)) for i in range(0, filtsize - 1): if i > 0: b += numpy.roll(b, -(pow(filtsize, 2) + 1) * i, 0) filtered = (numpy.sum(b, 1) / pow(filtsize, 2)).reshape((a.shape[0], a.shape[1]))
更一般地說,定義一個沿指定維度執行滾動視窗操作的函數,即使在多維數組中也可以有效實現移動平均濾波器。然而,值得注意的是,雖然基於步幅的方法在特定情況下具有優勢,但對於複雜的多維過濾任務,像 scipy.ndimage 模組提供的專門函數仍然可以提供卓越的性能。
以上是跨步可以提高影像處理中移動平均濾波器的效率嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!