使用高级跨步实现更高效的移动平均滤波器
简介:
计算移动大型数据集上的平均过滤器的计算成本可能很高。虽然使用卷积滤波器的标准实现可能很慢,但高级跨步技术提供了更有效的解决方案。
建议的技术:
建议的技术涉及使用 NumPy 的 stride_tricks.as_strided( ) 函数创建一个与原始数组上的移动窗口相对应的数组。通过垂直和水平滚动该数组,可以有效地对内核值求和以计算每个像素的平均值。
实现:
以下代码演示了以下代码的实现该技术:
<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>
优点:
与传统卷积滤波器相比,该技术具有多个优点:
局限性:
替代方法:
以上是高级跨步如何提高移动平均滤波器的效率?的详细内容。更多信息请关注PHP中文网其他相关文章!