PIL保存dicom slice为16位灰度图

2020-01-15  本文已影响0人  Williamongh
from PIL import Image

# img 为利用SimpleITK读取的医学影像 volume
img = sitk.GetArrayFromImage(img)
# 查询所需切片
for i in slices:
    img_i = Image.fromarray(img[i]).convert('I;16B')   # 转化格式为16位灰度图
    img_i.save('%d.tiff' % i)  # 16位灰度图仅支持保存为tiff格式

注意, 将图片转换为I;16B, 是为了节省保存空间, 否则会默认保存32位的I灰度图片类型下. 若有此需求, 一定要使用 img_i = Image.fromarray(img[i]).convert('I;16B'), 而不是 img_i = Image.fromarray(img[i], mode='I;16B'). 前者是保持灰度值不变的情况下, 将numpy数据转变为Image. 而后者会将灰度值缩放至[0, 65535]. 以上是通过np.unique(img)观察出来的.

其实直接存成numpy矩阵也可以, 但是存成图片格式, 方便后续直接使用torchvision.transformer, 尽管图片是全黑的, 无法肉眼阅读. 至于是否8位灰度图就足够了, 有没有必要保存成16位, 还有待验证.

准备后续同时保存一个加窗的8位带mask图片, 以方便肉眼阅片.

Reference
https://www.cnblogs.com/dylancao/p/9134790.html
https://www.xuebuyuan.com/882710.html

上一篇 下一篇

猜你喜欢

热点阅读