210812-dicom文件排序并重命名

引言

默写情况下,dcm文件导出后虽然名字为1001.dcm,1002.dcm,…,但是并非连续的,1002.dcm可能是第10层,为了后续后处理,前期可以将dcm文件序号和层数对应上
代码如下:

clc;clear;close all;
%%
patients = dir('data_czey/Y*');
for ii = 1:numel(patients)  % 遍历病人
    patientname = patients(ii).name;  
    disp(['-----------------',patientname,'-----------------'])  % 显示处理病人ID号
    dcmnames=dir(['data_czey/',patientname,'/*.DCM']);   % 列出该病人下所有dcm文件
    N_dcm=numel(dcmnames);
   %  DCM = zeros(512,512,N_dcm);  % 重新排序图像所用的矩阵
    IDX = zeros(1,N_dcm);  % 重新排序图像所用的索引
    for jj=1:N_dcm
        dcmname=dcmnames(jj).name;  
        filefullpath=fullfile('data_czey',patientname,dcmname); 
        % DCM(:,:,jj) = dicomread(filefullpath);  % 存储图像矩阵
        info = dicominfo(filefullpath);
        IDX(jj) = info.SliceLocation;  % 存储SliceLocation,用于排序
    end
    [~,idx] = sort(IDX,'descend');  % 根据存储SliceLocation排序,idx为排序后index
    for kk = 1:N_dcm
        index=sprintf('1%03d',kk);  % 输出1001.dcm格式
%         disp([index,'->',num2str(N_dcm+1-kk+1000)]);  % 输出辅助信息:变换后对应之前的index
        disp([dcmnames(idx(kk)).name,'->',index]);  % 输出辅助信息:输出前index->输出后index,配合ImageJ对应序号
        filesrc = ['data_czey/',patientname,'/',dcmnames(idx(kk)).name];  % 复制前的文件名
        outputpath=fullfile('data_czey_sort2',patientname);  % 复制后的文件名所在文件夹
        if ~exist(outputpath,'file')  % 不存在则创建
            mkdir(outputpath)
        end
%         fileold = [outputpath,'/',num2str(N_dcm+1-kk+1000),'.dcm'];  % 复制前的文件名
        fileout = [outputpath,'/',index,'.dcm'];  % 复制前的文件名        
        copyfile(filesrc,fileout)  % 复制(前面有重命名)
    end   
end
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值