gpt4 book ai didi

python - 在 python 中将 2D 切片合并到 3D 体积

转载 作者:太空宇宙 更新时间:2023-11-03 12:06:25 29 4
gpt4 key购买 nike

看似简单的问题,没有图像处理/处理经验的人其实没那么容易。

我不只是想将 2D 阵列堆叠在一起,而是通过合并多个由空白分隔的二进制 2D 切片来创建 3D 体积。

例子:
用零定义一个 3D 矩阵:

A = np.zeros((100,100,100))

A 的第一个切片中放置一个矩形区域:

A[0,25:75,25:75] = 1

A最后一片中间的值设置为1:

A[99,50,50] = 1

我现在如何线性合并这两个切片,以便结果是 3D 体积内的“金字塔”。

预先感谢您提出任何建议。

编辑:目的是能够通过在多个切片中定义多个 2D 感兴趣区域来选择不同的感兴趣体积。还想象一下,例如,在切片 0 中定义一个大圆圈,在切片 50 中定义一个小圆圈,然后在切片 100 中再次定义一个更大的圆圈。感兴趣的结果体积应该是一个“沙漏结构”。

最佳答案

您应该评估第一个切片的每个点与最后一个切片的每个点之间的距离和角度,而对于每一步,您应该以恒定角度线性减小距离。

A = np.zeros((100,100,100))
A[0,25:75,25:75] = 1
A[99,50,50] = 1

from math import sin, cos, atan2
dim = 100
for i99,j99 in np.swapaxes(np.where(A[dim-1]==1),0,1):
for i0,j0 in np.swapaxes(np.where(A[0]==1),0,1):
di = (i0-i99)
dj = (j0-j99)
dist = (di**2 + dj**2)**0.5
ang = atan2(dj,di)
for t in range(1,dim-1):
ndist = dist * (1 - t/dim)
pi = round(sin(ang)*ndist) + i99
pj = round(cos(ang)*ndist) + j99
A[t][pi][pj] = 1

现在我们应该检查我们的代码

在 [2] 中:

A[96][48:53,48:53]

输出[2]:

array([[ 0.,  0.,  0.,  0.,  0.],
[ 0., 1., 1., 1., 0.],
[ 0., 1., 1., 1., 0.],
[ 0., 1., 1., 1., 0.],
[ 0., 0., 0., 0., 0.]])

关于python - 在 python 中将 2D 切片合并到 3D 体积,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30802269/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com