重命名多帧 dicom 图像
Posted
技术标签:
【中文标题】重命名多帧 dicom 图像【英文标题】:Rename multi-frame dicom images 【发布时间】:2015-05-11 00:15:00 【问题描述】:我有一个包含 110 个图像的 dicom 文件,它们的名称是随机的。我正在尝试根据它们的 SliceLocations (n
) 重命名它们并使用 dcm 扩展名重写它们,即 n(1).dcm, n(2).dcm, ...
任何建议将不胜感激。
我试过了
image_list=dir('*.dcm');
for i=1:110
img=dicomread(image_list);
imgHdr = dicominfo(image_list(i).name);
for j = size(img,4);
dicomwrite(img(:,:,:,j),['n(' int2str(j) ').dcm'],imgHdr,'CreateMode','Copy');
end
end
【问题讨论】:
【参考方案1】:切片位置 (0020,1041) 是图像平面模块的可选属性。无法保证标签将具有任何价值。您最好的选择是使用图像位置(患者)(0020、0032)属性。这将具有图像左上角(传输的第一个体素的中心)的 x、y 和 z 坐标。有关进一步说明,请参阅DICOM standard PS 3.3 - 2011 (PDF),附件 C.7.6.2.1。
【讨论】:
感谢@LEADtools 支持,如果我想根据深度重命名它们怎么办? 图像位置(患者)属性中只有一个值(轴向)会在切片(平行切片)之间发生变化。您可以使用该值来计算切片位置/位置。每个图像帧图像位置(患者)指定图像相对于基于患者的坐标系的原点,其中 x 轴向患者的左侧增加。 y 轴向患者的后侧增加。 z 轴朝向患者头部增加。这应该适用于 CT 堆栈,但对于 MR,您可能会发现具有多个堆栈的单个系列。【参考方案2】:注意: 此答案适用于“帧”,而不是“切片”。对于 DICOM 文件,这两者显然是不同的东西。
如果您在问题中不需要确切的命名方案,一个方便的选择是在dicomwrite
函数中使用'MultiframeSingleFile'
选项:
X = dicomread('MultiFrameFile.dcm');
dicomwrite(X,'n.dcm','MultiframeSingleFile',false);
这将生成名为'n_01.dcm'
、'n_02.dcm'
、...的文件
否则,您可以将简单的for
循环与int2str
结合使用:
X = dicomread('MultiFrameFile.dcm');
for i = size(X,4);
dicomwrite(X(:,:,:,i),['n(' int2str(i) ').dcm']);
end
【讨论】:
感谢@horchler 的帮助。抱歉,我没有说清楚,我有 110 个 dicom(切片),所以我试图根据它们的深度位置(切片位置)重命名它们。我尝试了您的方式并进行了一些修改(更新了问题),但输出只有一个 dcm。以上是关于重命名多帧 dicom 图像的主要内容,如果未能解决你的问题,请参考以下文章