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
网友评论