我在 python 中找不到相当于 matlab 的 smooth3 的东西。你如何在 python 中执行 3d 平滑?
问问题
2039 次
1 回答
2
最好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()
于 2013-09-21T02:43:10.723 回答