Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 在三维体积内创建三维圆柱体_Python 3.x_Numpy - Fatal编程技术网

Python 3.x 在三维体积内创建三维圆柱体

Python 3.x 在三维体积内创建三维圆柱体,python-3.x,numpy,Python 3.x,Numpy,我有3d卷。其形状为(399 x 512 x 512)。它的体素间距为0.484704 x 0.484704 x 0.4847 现在,我想在这个体积内定义一个圆柱体,长度为5mm,直径为1mm,内部强度为1,外部强度为0 我在互联网上看到了一个定义圆柱体的代码: from mpl_toolkits.mplot3d import Axes3D def data_for_cylinder_along_z(center_x,center_y,radius,height_z): z = np

我有3d卷。其形状为(399 x 512 x 512)。它的体素间距为0.484704 x 0.484704 x 0.4847

现在,我想在这个体积内定义一个圆柱体,长度为5mm,直径为1mm,内部强度为1,外部强度为0

我在互联网上看到了一个定义圆柱体的代码:

from mpl_toolkits.mplot3d import Axes3D  
def data_for_cylinder_along_z(center_x,center_y,radius,height_z):
    z = np.linspace(0, height_z, 50)
    theta = np.linspace(0, 2*np.pi, 50)
    theta_grid, z_grid=np.meshgrid(theta, z)
    x_grid = radius*np.cos(theta_grid) + center_x
    y_grid = radius*np.sin(theta_grid) + center_y
    return x_grid,y_grid,z_grid

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

Xc,Yc,Zc = data_for_cylinder_along_z(0.2,0.2,0.05,0.1)
ax.plot_surface(Xc, Yc, Zc, alpha=0.5)

plt.show()
但是,我不知道如何定义3d体积内的圆柱体,以保持所有条件(长度5mm,直径1mm,内部强度1,外部强度0)为真。我还想自动定义圆柱体的中心。这样我就可以在3d体积内的任何位置定义圆柱体,保持其他条件为真。有人能举个例子吗?
提前多谢。

解决此问题的一个简单方法是单独执行每个检查,然后只保留满足所有约束的体素

如果使用体素的所有中心构建栅格:p(399 x 512 x 512 x 3),则(i,j,k)处的每个体素将与其实际位置(x,y,z)相关联

这有点棘手,但应该是这样的:

np.stack(np.meshgrid(np.arange(0, shape[0]),
                     np.arange(0, shape[1]),
                     np.arange(0, shape[2]), indexing='ij'), axis=3)
如果减去圆柱体的中心(center_x,center_y,center_z),则留下每个(i,j,k)体素的相对位置p_rel(399 x 512 x 512 x 3)

当你有了这些,你可以一个接一个地应用你的每个测试。对于半径和高度为_Z的Z向圆柱体,其形状如下:

# constrain the Z-axis
not_too_high = P_rel[:,:,:,2]<= (0.5*height_z)
not_too_low = P_rel[:,:,:,2]>= (-0.5*height_z)

# constrain the radial direction
not_too_far = np.linalg.norm(P_rel[:,:,:,:2],axis=3)<=radius

voxels_in_cyl = not_too_high & not_too_low & not_too_far
#约束Z轴
不太高=相对高度[:,:,:,2]=(-0.5*高度)
#约束径向

not_too_far=np.linalg.norm(P_rel[:,:,:,:2],axis=3)我实际上是用这个想法工作的,而不是代码片段。但它可以工作:)嗨,测试过的实际代码片段。当打印体素时,我得到布尔值!在给定圆心、高度和半径的情况下,是否可以给出一个完整的示例来定义圆柱体?非常有帮助。圆柱体内部的体素为1,外部的体素为0-这听起来像是一个“完整”的定义!您可以将其用作遮罩,以获取内部体素的坐标(
P\u rel[voxels\u in\u cyl]
),或将其转换为用例所需的任何形式