You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从CT图像3D堆栈中提取100³规格的3D子体素?

提取CT 3D堆栈中100³子体素的方法

核心思路:直接用数组切片提取

不用meshgrid——它是用来生成坐标网格点的工具,适合绘图或采样点定位,而提取子体素直接用numpy的切片索引才是高效准确的方式。

1. 确定合法起始坐标范围

原数组维度为(1000,1000,500),要提取100×100×100的子体,每个维度的起始索引必须满足:

  • 第0轴(行):start_x ∈ [0, 900](1000-100)
  • 第1轴(列):start_y ∈ [0, 900](1000-100)
  • 第2轴(层):start_z ∈ [0, 400](500-100)

2. 代码实现示例

假设CT数据已读入为numpy数组ct_array(shape=(1000,1000,500)):

随机提取单个100³子体

import numpy as np

# 生成合法随机起始坐标
start_x = np.random.randint(0, 1000 - 100 + 1)
start_y = np.random.randint(0, 1000 - 100 + 1)
start_z = np.random.randint(0, 500 - 100 + 1)

# 切片提取子体
sub_volume = ct_array[start_x:start_x+100, start_y:start_y+100, start_z:start_z+100]
# 此时sub_volume的shape为(100,100,100)

规则滑动窗口提取(步长设为50为例)

step = 50
sub_volumes = []

# 遍历所有合法起始点
for x in range(0, 1000 - 100 + 1, step):
    for y in range(0, 1000 - 100 + 1, step):
        for z in range(0, 500 - 100 + 1, step):
            sub = ct_array[x:x+100, y:y+100, z:z+100]
            sub_volumes.append(sub)

# sub_volumes为包含所有子体的列表,每个元素都是(100,100,100)的数组

3. 为什么meshgrid效果不佳?

meshgrid的作用是生成三维坐标点网格(如X,Y,Z = np.meshgrid(x,y,z)),得到的是每个体素的坐标值,而非直接提取子体积。用它来提取子体需要先生成坐标索引再索引数组,步骤冗余且效率低下,远不如直接切片高效。

4. 注意事项

  • 确认数组维度顺序:若你的CT数据是(层,行,列)而非(行,列,层),需调整切片的轴顺序。
  • 检查数据类型:CT数据常用uint16类型,提取前确认数组dtype,避免后续处理出错。
  • 控制子体重叠:调整步长可实现重叠提取(如步长设为20,子体间会有80的重叠区域)。

内容的提问来源于stack exchange,提问作者Nilzon Aguirre Velasquez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 06:11:04