重命名多帧 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 图像的主要内容,如果未能解决你的问题,请参考以下文章

如何在上传过程中重命名图像文件

重命名服务器目录上的图像文件

在 Joomla K2 中更改图像重命名

在颤动中重命名文件/图像

使用 fs 在 multer 中重命名上传的图像

在Python中基于csv重命名文件中的图像