3

我在 python 中找不到相当于 matlab 的 smooth3 的东西。你如何在 python 中执行 3d 平滑?

4

1 回答 1

2

最好scipy.ndimage用于此。它有大量的功能,它让你可以很好地控制内存使用(例如,你可以在原地完成所有这些操作,而无需制作副本)。

默认过滤器的等效项smooth3dscipy.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 回答