【发布时间】:2019-10-01 11:01:13
【问题描述】:
如何对matplotlib 中的图形应用高斯模糊?
更具体地说,我在matplotlib 图中绘制了以下图像:
使用以下代码生成:
import numpy as np
import matplotlib.pyplot as plt
from scipy.ndimage import gaussian_filter
x = np.linspace(0, 3*np.pi, 100)
ys = []
for i in range(20):
ys.append(np.sin(x) + (np.random.rand(100)-0.5)*np.random.rand())
new_y = ys[0]
new_x = x
for i in range(1, 20):
new_x = np.concatenate([new_x, x])
new_y = np.concatenate([new_y, ys[i]])
fig, ax = plt.subplots()
ax.hist2d(new_x, new_y, bins=50, cmap='inferno')
plt.show()
如何绘制此图像的高斯模糊版本?任何帮助将不胜感激。
我尝试过的:
我尝试在实际显示之前从图中抓取数据,将其转换为 numpy 数组,将高斯模糊应用于 numpy 数组,然后使用 plt.imshow 绘制模糊数组。
import numpy as np
import matplotlib.pyplot as plt
from scipy.ndimage import gaussian_filter
x = np.linspace(0, 3*np.pi, 100)
ys = []
for i in range(20):
ys.append(np.sin(x) + (np.random.rand(100)-0.5)*np.random.rand())
new_y = ys[0]
new_x = x
for i in range(1, 20):
new_x = np.concatenate([new_x, x])
new_y = np.concatenate([new_y, ys[i]])
fig, ax = plt.subplots()
ax.hist2d(new_x, new_y, bins=50, cmap='inferno')
fig.canvas.draw()
data = np.fromstring(fig.canvas.tostring_rgb(), dtype=np.uint8, sep='')
data = data.reshape(fig.canvas.get_width_height()[::-1] + (3,))
data2 = gaussian_filter(data, sigma=5)
plt.imshow(data2)
plt.pause(5)
但是,这显然对生成的图像没有任何影响。
【问题讨论】:
-
不要调用
ax.hist2d,而是使用np.hiostogram2d,如下所示,然后对其应用模糊处理。
标签: python numpy matplotlib image-processing scipy