首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >R语言实现DICOM文件的操作

R语言实现DICOM文件的操作

作者头像
一粒沙
发布2021-07-05 15:30:46
发布2021-07-05 15:30:46
2K10
代码可运行
举报
文章被收录于专栏:R语言交流中心R语言交流中心
运行总次数:0
代码可运行
放射学图像有6种主要格式--DICOM(医学数字成像和通信),NIFTI(神经影像信息技术),PAR / REC(飞利浦MRI扫描仪格式),ANALYZE(梅奥医学影像),NRRD(近原始光栅数据) )和MNIC。我们今天主要给大家介绍下DICOM格式医学数字成像和通信文件。DICOM是由美国国家电气制造商协会(NEMA)制定的标准。它定义了在医学成像中处理,存储,打印和传输信息的标准。这些是您可以在扫描仪或医院PACS(图片存档和通信系统)之外预期的文件格式。它包括文件格式和网络通信协议,该协议使用TCP / IP在能够以DICOM格式接收图像和患者数据的实体之间进行通信。DICOM文件由标题和同一文件(* .dcm)中的图像数据组成。标题的大小取决于提供的标题信息量。标题包含诸如患者ID,患者姓名,模态和其他信息的信息。它还定义了包含多少帧以及哪些分辨率。

今天给大家介绍在R语言中可以读取 dicom 数据的 R 语言包oro.dicom。首先,我们看下包的安装:

代码语言:javascript
代码运行次数:0
运行
复制
install.packages("oro.dicom")

接下来我们依次从数据的读取,保存,展示来进行解析此包:

1. DICOM数据的读取,我们直接看下实例:

代码语言:javascript
代码运行次数:0
运行
复制
#单个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文件进行校准,对应起来。

代码语言:javascript
代码运行次数:0
运行
复制
##多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")
代码语言:javascript
代码运行次数:0
运行
复制
##获取其中的一些信息
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])
代码语言:javascript
代码运行次数:0
运行
复制
##获取时间序列信息
seriesTime<- extractHeader(hk40$hdr, "SeriesTime", numeric=FALSE)
代码语言:javascript
代码运行次数:0
运行
复制
##时间格式转化

str2time(seriesTime)

2. DICOM文件的展示:

代码语言:javascript
代码运行次数:0
运行
复制
##单文件展示
image(t(abdo$img),col=grey(0:64/64), axes=FALSE, xlab="", ylab="")
代码语言:javascript
代码运行次数:0
运行
复制
##多文件展示

hk40n <-dicom2nifti(hk40)##格式转化
image(hk40n)
代码语言:javascript
代码运行次数:0
运行
复制
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")

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-06-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 R语言交流中心 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档