我在 python 中找不到与 matlab 的 smooth3 等效的东西。你如何在 python 中执行 3d 平滑?
请您参考如下方法:
最好用scipy.ndimage为了这。它具有大量功能,并且可以让您出色地控制内存使用(例如,您可以就地执行所有这些操作,而无需制作副本)。
smooth3d 的默认过滤器等效于 scipy.ndimage.uniform_filter(data, 3) (“3”是过滤器的大小。3 是 matlab 的默认值)。
smooth3(data, 'gaussian') 的等效项是 scipy.ndimage.gaussian_filter(data, 3) .
请注意,scipy.ndimage 的函数适用于任何维度数据。为了便于可视化,我将在下面展示一个 2D 示例,但是对于 1D、3D、4D、10D 等,函数调用是相同的。
import numpy as np
import scipy.ndimage as ndimage
import matplotlib.pyplot as plt
raw_data = np.random.random((30,30))
fig, axes = plt.subplots(ncols=3)
axes[0].imshow(raw_data, interpolation='nearest')
axes[0].set(title='Raw Data', xticks=[], yticks=[])
axes[1].imshow(ndimage.uniform_filter(raw_data, 3), interpolation='nearest')
axes[1].set(title='Uniform Filter', xticks=[], yticks=[])
axes[2].imshow(ndimage.gaussian_filter(raw_data, 3), interpolation='nearest')
axes[2].set(title='Gaussian Filter', xticks=[], yticks=[])
fig.tight_layout()
plt.show()
