首頁  >  文章  >  後端開發  >  高階跨步如何提高移動平均濾波器的效率?

高階跨步如何提高移動平均濾波器的效率?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-10-19 10:28:02966瀏覽

How Can Advanced Striding Enhance the Efficiency of Moving Average Filters?

使用高階跨步實現更有效率的移動平均濾波器

簡介:

簡介:

簡介:

簡介:

簡介:
<code class="python">import numpy as np

filtsize = 3
a = numpy.arange(100).reshape((10,10))
b = np.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]))</code>

簡介:

    簡介:
  • 簡介:
  • 介紹計算移動大型資料集上的平均濾波器的計算成本可能很高。雖然使用卷積濾波器的標準實作可能很慢,但高階跨步技術提供了更有效的解決方案。
  • 建議的技術:

建議的技術涉及使用 NumPy 的 stride_tricks.as_strided( ) 函數建立一個與原始陣列上的移動視窗相對應的陣列。透過垂直和水平滾動該數組,可以有效地對內核值求和以計算每個像素的平均值。

實現:
  • 以下代碼演示了以下代碼的實現該技術:
  • 優點:
與傳統卷積濾波器相比,此技術具有多個優點:

記憶體效率:
    as_strided 陣列是原始陣列的視圖,因此不需要將整個資料集複製到新數組中。
  • 計算效率:
  • 滾動和求和操作可以使用 NumPy 的最佳化函數可以有效地執行。
可自訂的核心大小和形狀: filtsize 參數可輕鬆調整濾鏡大小和形狀。 限制:邊緣處理:所提出的技術無法正確處理邊緣像素。可能需要後處理步驟來解決此問題。 多維數組:此技術最適合一維數組。對於多維數組,記憶體使用量和計算成本可能會變得非常高。 替代方法:Numba JIT 編譯:Just-in-時間編譯可以進一步提升此技術的效能。 SciPy 的 ndimage 模組:對於多維數組,SciPy 的uniform_filter()函數提供了更有效率、更全面的解決方案。

以上是高階跨步如何提高移動平均濾波器的效率?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn