首页 > 其他分享 >医学图像处理教程(二)——医学图像读取,存储和不同对象互相转换

医学图像处理教程(二)——医学图像读取,存储和不同对象互相转换

时间:2022-11-02 13:01:12浏览次数:43  
标签:direction sitk 读取 dicom image 图像处理 医学 图像 print

今天将给大家分享医学图像读取,包括dicom图像和非dicom图像,图像的存储以及修改图像信息后产生的变化结果,最后再介绍如何将SimpleITK的图像数据与Numpy的数据进行互相转换。

1、读取dicom序列文件

这里采用ImageSeriesReader()来读取dicom序列图像,只需要输入dicom的目录路径就可以读取图像。

# read dicom series image
dicom_input_dir = "E:\Data\other\LIDC_nodul"


print("Reading Dicom directory:", dicom_input_dir)
reader = sitk.ImageSeriesReader()
dicom_names = reader.GetGDCMSeriesFileNames(dicom_input_dir)
reader.SetFileNames(dicom_names)
image = reader.Execute()

2、读取非dicom格式文件

这里采用ReadImage()来去读非dicom格式的图像,只需要输入非dicom格式的文件名就可以读取图像。

# read image
image = sitk.ReadImage("srcdicom.mha")

3、输出图像信息

图像除了像素信息外,还有图像大小,图像spacing信息,图像方向信息,图像原点信息。

# show dicom series image message
size = image.GetSize()
print("Image size:", size)
spacing = image.GetSpacing()
print("Image spacing:", spacing)
direction = image.GetDirection()
print("Image direction:", direction)
origin = image.GetOrigin()
print("Image origin:", origin)

医学图像处理教程(二)——医学图像读取,存储和不同对象互相转换_数据

4、写成非dicom格式文件

这里我们采用简单的文件写入函数WriteImage()函数来完成图像写到磁盘,函数只需要输入图像,输出文件名字。

# write dicom image
sitk.WriteImage(image, "srcdicom.mha")

5、修改图像方向信息就会改变图像的方向

这里我们做个信息修改来看一下是如何影像图像的。采用SetDirection()手动来改变相对世界坐标的方向矩阵值,将x和y方向换个位置,其它信息都不改动,输出图像如下所示。可以看到修改direction后图像的发生了旋转。在实际使用时要小心使用,不能随便修改。我们直接使用默认图像的direction方向信息即可,无需额外做处理操作。

# modify dicom image direction
image.SetDirection((0, 1, 0, 1, 0, 0, 0, 0, 1))
sitk.WriteImage(image, "newdirection.mha")
print(" modify dicom image direction")
size = image.GetSize()
print("Image size:", size)
spacing = image.GetSpacing()
print("Image spacing:", spacing)
direction = image.GetDirection()
print("Image direction:", direction)
origin = image.GetOrigin()
print("Image origin:", origin)

医学图像处理教程(二)——医学图像读取,存储和不同对象互相转换_ico_02

6、SimpleITK图像数据转成Numpy矩阵数据

我们用函数GetArrayFromImage()函数,可以将sitk的图像矩阵转换成我们熟悉的numpy格式的多维矩阵,也就跟常规的RGB图像一样的矩阵形式。我们输出矩阵的大小,发现矩阵大小与sitk图像大小不一样,sitk图像大小顺序是x,y,z三个方向的大小,而numpy矩阵的大小顺序是z,y,x三个方向的大小,大家在这个地方一定要注意索引位置。

# sitk image to numpy data
np_array = sitk.GetArrayFromImage(image)
print("np_array size:", np_array.shape)

7、Numpy矩阵数据转成SimpleITK图像数据

我们用函数GetImageFromArray()函数,可以将numpy格式的多维矩阵转换成sitk的图像格式,当然了前面也说到过sitk图像不仅仅有像素信息,还有origin,spacing和direction的信息,所以这里我们需要对该sitk图像对象的这些信息进行显示的赋值处理才可以,通过SetOrigin(),SetSpacing(),SetDirection()来完成相应赋值。最后我们通过前面介绍的图像输出函数将生成的sitk图像保存成文件。

# numpy data to sitk image
sitk_image = sitk.GetImageFromArray(np_array)
sitk_image.SetOrigin(origin)
sitk_image.SetSpacing(spacing)
sitk_image.SetDirection(direction)

医学图像处理教程(二)——医学图像读取,存储和不同对象互相转换_数据_03


如果有任何问题,随时给我留言我会及时回复的。本节所有代码如下所示。

import SimpleITK as sitk


# read dicom series image
dicom_input_dir = "E:\Data\other\LIDC_nodul"


print("Reading Dicom directory:", dicom_input_dir)
reader = sitk.ImageSeriesReader()
dicom_names = reader.GetGDCMSeriesFileNames(dicom_input_dir)
reader.SetFileNames(dicom_names)
image = reader.Execute()


# read image
# image = sitk.ReadImage("srcdicom.mha")


# show dicom series image message
size = image.GetSize()
print("Image size:", size)
spacing = image.GetSpacing()
print("Image spacing:", spacing)
direction = image.GetDirection()
print("Image direction:", direction)
origin = image.GetOrigin()
print("Image origin:", origin)


# write dicom image
sitk.WriteImage(image, "srcdicom.mha")


# modify dicom image direction
image.SetDirection((0, 1, 0, 1, 0, 0, 0, 0, 1))
sitk.WriteImage(image, "newdirection.mha")
print(" modify dicom image direction")
size = image.GetSize()
print("Image size:", size)
spacing = image.GetSpacing()
print("Image spacing:", spacing)
direction = image.GetDirection()
print("Image direction:", direction)
origin = image.GetOrigin()
print("Image origin:", origin)


# sitk image to numpy data
np_array = sitk.GetArrayFromImage(image)
print("np_array size:", np_array.shape)


# numpy data to sitk image
sitk_image = sitk.GetImageFromArray(np_array)
sitk_image.SetOrigin(origin)
sitk_image.SetSpacing(spacing)
sitk_image.SetDirection(direction)
sitk.WriteImage(sitk_image, "sitk_image.mha")





标签:direction,sitk,读取,dicom,image,图像处理,医学,图像,print
From: https://blog.51cto.com/u_12707048/5816228

相关文章

  • python 读取excel
    练习#coding:utf-8"""#@Time:2022/10/2517:47#@Author:GinaGao#@File:#@Software:PyCharm#@Descript:pipinstall-ihttps://pypi.tuna.tsinghua......
  • spark读取文件方式
    一、调用hadoopfile方法读取TXT文件,针对复杂的分割方式,例如|+|,;等valgbkPath=s"/bdtj/line/DD_OUT_NOW_LV_$month.txt"//文件路径//将gbkPath以参数的形式传入进行读取......
  • Java读取共享文件夹下面的文件(利用smb协议)
    一、开启smb协议1.1控制面板->程序->启用或关闭window功能->smb1.0二、设置共享文件2.1选择你想要共享的文件夹设置everyone或者指定的用户授权给某个用户。需要密......
  • 深度学习从入门到精通——VOC 2012数据读取(pytorch)
    fromtorch.utils.dataimportDatasetimportosimporttorchimportjsonfromPILimportImagefromlxmlimportetreeclassVOC2012DataSet(Dataset):"""读取解析PASC......
  • Spring Boot读取Yml配置文件的3种方法
    1 基础用法,使用@Value注解直接注入配置信息@Value("${spring.datasource.username}")privateStringname;2 使用注解@Autowired注入Environment类@......
  • 大佬们,这种嵌套字典类型的数据,我想把它读取到df里,如何操作?
    大家好,我是皮皮。一、前言前几天在Python最强王者交流群【WYM】问了一个Pandas处理的问题,提问截图如下:原始数据:temp=dict()temp[64001]={64002:1.0,64003:1.0......
  • Go开发 之 Go如何读取Mysql数据
    目录​​1、简介​​​​2、下载包,并创建包路径​​​​3、引用包​​​​4、举例说明​​​​5、效果图​​1、简介Go语言是个很方便的具有动态写法的静态语言,读取mysql是g......
  • Python开发 之 批量读取文件中指定字符
    目录​​1、背景​​​​2、待读取文件​​​​3、读取每一句中的汉字​​1、背景从指定的NLP生成的文件中读取指定的字符。2、待读取文件是以":"作为分隔符的数据,每一行以......
  • 开启iTunes访问文件权限,读取Documents本地txt文件
    一、开启iTunes访问沙盒文件夹权限在Info.plist文件中添加UIFileSharingEnabled这个Key,并设置该值为 YES 即可在填写完 UIFileSharingEnabled并回车后,发现会自动......
  • Spark SQL读取parquet文件
        Parquet是一种流行的列式存储格式,可以高效地存储具有嵌套字段的记录,还可以针对相同类型的列进行压缩。介绍:使用:......