python – 仅沿一个轴平滑2D数组

python – 仅沿一个轴平滑2D数组,第1张

概述我想知道是否有人可以帮助我将 the smoothing example in the SciPy cookbook扩展到2D问题. 该脚本非常适用于平滑1D功能,并且它们还为两个轴上的2D平滑提供代码(即模糊图像). 但是,我想将此函数应用于2D数据集,但仅沿一个轴(x方向).我可以循环执行此 *** 作,方法是检查y中的每个切片,应用1D卷积,然后重建阵列.但这似乎是糟糕的编码技术. 因此,我想知道如 我想知道是否有人可以帮助我将 the smoothing example in the SciPy cookbook扩展到2D问题.

该脚本非常适用于平滑1D功能,并且它们还为两个轴上的2D平滑提供代码(即模糊图像).

但是,我想将此函数应用于2D数据集,但仅沿一个轴(x方向).我可以循环执行此 *** 作,方法是检查y中的每个切片,应用1D卷积,然后重建阵列.但这似乎是糟糕的编码技术.

因此,我想知道如何在2D中做到这一点?我想我需要制作一个2D内核,权重只沿一个方向变化,但我不知道该怎么做,或者使用哪个卷积函数(numpy.convolve,scipy.signal.convolve,scipy.ndimage.filters .convolve1d等)

解决方法 也许最简单的选择是使用 scipy.ndimage.filters中的一个1D过滤器:

from scipy import ndimagefrom scipy.misc import lenaimg = lena()# a uniform (Boxcar) filter with a wIDth of 50Boxcar = ndimage.uniform_filter1d(img,50,1)# a Gaussian filter with a standard deviation of 10gauss = ndimage.gaussian_filter1d(img,10,1)

你也可以使用这样的过滤器的非1D版本:ndimage.gaussian_filter(img,(0,10))(即,对于你不想平滑的轴,将过滤器宽度设置为0).

要使任意内核平滑,可以使用scipy.ndimage.convolve1d

import numpy as npkern = np.hanning(50)   # a Hanning window with wIDth 50kern /= kern.sum()      # normalize the kernel weights to sum to 1hanning = ndimage.convolve1d(img,kern,1)

以下是各种输出的外观:

from matplotlib import pyplot as pltfig,ax = plt.subplots(2,2,figsize=(8,8))ax[0,0].imshow(img)ax[0,0].set_Title('Original')ax[0,1].imshow(Boxcar)ax[0,1].set_Title('Boxcar filter (wIDth = 50)')ax[1,0].imshow(gauss)ax[1,0].set_Title(r'Gaussian filter ($\sigma$= 10)')ax[1,1].imshow(hanning)ax[1,1].set_Title(r'Hanning window (wIDth = 50)')for aa in ax.flat:    aa.set_axis_off()fig.tight_layout()plt.show()

总结

以上是内存溢出为你收集整理的python – 仅沿一个轴平滑2D数组全部内容,希望文章能够帮你解决python – 仅沿一个轴平滑2D数组所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1193432.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存