matplotlib 将二维圆图像转换为三维圆柱体对象

sr4lhrrt  于 2023-05-29  发布在  其他
关注(0)|答案(1)|浏览(145)

我写了以下代码来生成随机数据:

xx, yy = np.meshgrid(np.linspace(0, 1, 32), np.linspace(0, 1, 32))
X = xx
Y = yy
Z = np.random.rand(32, 32)

##### MASK : SQUARE IMAGE => CIRCLE IMAGE ######
N = 32
m = (N-1)/2
mask = np.ones((N,N))
D = 80
a = D/N
for i in range(N):
    for j in range(N):
        if (i-m)**2+(j-m)**2 < (D/2/a)**2:
            mask[i][j] = 0
################################################
plt.imshow(np.ma.masked_array(Z, mask))
#plt.contourf(X, Y, np.ma.masked_array(Z, mask), zdir='z', offset=0.5, levels=100)
plt.show()

输出:

我想将图像转换为圆柱体对象。这就像有多个(相同的)堆叠的圆形图像。

***另一示例:***1.[

]

2.[

]

aydmsdu9

aydmsdu91#

如果您只想创建一个像素数据堆栈,这应该适合您

z_height = 100
mask3 = np.stack([Z*(1-mask)]*z_height, axis=2)

这只是沿着z轴重复带有随机数据z_height次的圆,并将结果分配给一个新的数组mask3
请注意,我冒昧地简化了任务。您创建的遮罩数组实际上并不包含任何像素数据,因此我将Z乘以遮罩的倒数。
您也可以将1而不是0分配给您想要保留的掩码位置,然后您可以简化上面的代码。
如果你想要一个纹理网格,这是一个完全不同的故事,将需要一些更多的工作,我不能迅速鞭打这样:D

编辑:

下面是上面代码的输出:

相关问题