今天给大家介绍在R语言中可以读取 dicom 数据的 R 语言包oro.dicom。首先,我们看下包的安装:
install.packages("oro.dicom")
接下来我们依次从数据的读取,保存,展示来进行解析此包:
1. DICOM数据的读取,我们直接看下实例:
#单个DICOM数据的读取
fname <-system.file(file.path("dcm", "Abdo.dcm"),package="oro.dicom")
abdo <- readDICOMFile(fname)
names(abdo)
head(abdo$hdr)
tag是4个字节表示的 前两字节是组号后两字节是元素号 比如0008(组号) 0018(元素号)。我们获取dicom里面的数据,就是根据tag,来知道这个dataElement里面是否是我们需要的数据,然后读取该dataElement里面的数据。tag总共大约有2000个,但是我们常用的数据比如0002组描述设备通讯,0008组描述特征参数,0010组描述患者信息,0028组描述图像信息参数。通过这些数据我们就可以对多期的DICOM文件进行校准,对应起来。
##多DICOM文件的读取
fname<-"C:/data/test"
hk40 <-readDICOM(fname)
unlist(lapply(hk40,length))#查看文件数量
hk40.info <-dicomTable(hk40$hdr)##获取文件信息
write.csv(hk40.info,file="hk40_header.csv")
##获取其中的一些信息
load(system.file("hk-40/hk40.RData",package="oro.dicom"))
hk40.info <-dicomTable(hk40$hdr)##获取文件信息
sliceloc.col<- which(hk40$hdr[[1]]$name == "SliceLocation")
sliceLocation<- as.numeric(hk40.info[, sliceloc.col])
##获取时间序列信息
seriesTime<- extractHeader(hk40$hdr, "SeriesTime", numeric=FALSE)
##时间格式转化
str2time(seriesTime)
2. DICOM文件的展示:
##单文件展示
image(t(abdo$img),col=grey(0:64/64), axes=FALSE, xlab="", ylab="")
##多文件展示
hk40n <-dicom2nifti(hk40)##格式转化
image(hk40n)
orthographic(hk40n,col.crosshairs="green")##添加坐标,定位
3. 图像的存储
##jpeg保存
jpeg("hk40n_image.jpeg",width=480, height=480, quality=95, bg="black")
image(hk40n,zlim=c(0,1024))
dev.off()
###NIfTI保存
writeNIfTI(hk40n,"asa.nifti")