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

如何将DICOM图像分割为图块?image_slicer函数适配问题求助

我明白你遇到的问题了——image_slicer这个工具主要是为PIL图像设计的,直接喂DICOM转出来的numpy数组肯定不兼容。不过没关系,有两种靠谱的解决办法,看你需求选:

方案1:把numpy数组转成PIL图像后用image_slicer

首先要处理DICOM的像素值,比如CT图像的HU值范围(-1024到3071左右)超出了PIL默认的8位图像范围,直接转换会导致显示异常或者信息丢失,所以得先做归一化映射:

import numpy as np
from PIL import Image
import image_slicer

# 假设你的DICOM数组是dcm_array
dcm_array = dcm_files[0]

# 第一步:将HU值归一化到0-255区间(可根据你的实际数据调整范围)
min_val = -1024  # CT图像中空气的HU值
max_val = 3071   # CT图像中骨骼的典型HU值上限
normalized_array = ((dcm_array - min_val) / (max_val - min_val)) * 255
# 转换为PIL支持的uint8类型
normalized_array = normalized_array.astype(np.uint8)

# 转成PIL图像对象
pil_image = Image.fromarray(normalized_array)

# 现在可以用image_slicer分割了,比如分成2x2共4块
tiles = image_slicer.slice(pil_image, 4, save=False)
# 手动保存每块图像
for i, tile in enumerate(tiles):
    tile.save(f"dicom_tile_{i}.png")

注意:如果是MRI等其他模态的DICOM,要调整对应的像素值范围,确保归一化逻辑合理。

方案2:直接用numpy手动分割(更适合保留原始医学数据)

如果不想转成图像格式,想保留原始的HU值或像素数据,直接用numpy操作更稳妥,完全不会丢失信息,适合后续医学分析任务。比如要把图像分成指定行数和列数的块:

import numpy as np

def slice_dicom_array(dcm_array, rows, cols):
    # 获取原始图像的高度和宽度
    img_h, img_w = dcm_array.shape
    # 计算每个块的基础尺寸(如果不能整除,最后一块会自动适配剩余区域)
    tile_h = img_h // rows
    tile_w = img_w // cols
    
    tiles_list = []
    for i in range(rows):
        for j in range(cols):
            # 计算当前块的坐标范围
            y_start = i * tile_h
            y_end = y_start + tile_h if i != rows-1 else img_h
            x_start = j * tile_w
            x_end = x_start + tile_w if j != cols-1 else img_w
            # 切割并保存块
            tile = dcm_array[y_start:y_end, x_start:x_end]
            tiles_list.append(tile)
    return tiles_list

# 用法示例:将图像分成3行4列的块
dcm_array = dcm_files[0]
tiles = slice_dicom_array(dcm_array, rows=3, cols=4)

# 查看每个块的形状,或保存为numpy文件
for idx, tile in enumerate(tiles):
    print(f"Tile {idx}: 形状 {tile.shape}")
    np.save(f"dicom_tile_{idx}.npy", tile)

内容的提问来源于stack exchange,提问作者aiwan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:34:39