CT的原始图像.dcm文件的读取

在做CT图像的深度学习研究时,需要用到大量的CT数据,我从TCIA上下载的CT图像是.dcm文件的,每个.dcm文件代表一个slice,如图所示,下载的是Head-neck数据,

用matlab读取时,使用到dicomread()函数,如下

filepath = '000000.dcm'
info = dicominfo(fullfile(filepath));   
image = dicomread(info);

这里只读取了一个slice,我们该如何批量读取.dcm文件呢?又如何把每层的图像数据进行排序?以下是参考代码:

主要有几点需要注意:

  1. 读取info中的层数信息,用于排序
  2. 把多余的空白数据删除


clear,clc

%% reading files path
folder = './4/';         %%% 所有slice的文件夹

ext = {'*.dcm'};         
filepaths = [];

for i = 1 : length(ext)
    filepaths = cat(1,filepaths,dir(fullfile(folder, ext{i})));   %%% 读取所有.dcm的文件
end

a = length(filepaths);
data = zeros(512,512,a);     %%% 图片大小
Num = zeros(1,a);

for i = 1:a 
    info = dicominfo(fullfile(folder,filepaths(i).name));      %%% 读取CT图像的扫描信息
    No = info.SliceLocation;                                   %%% 读取该层的序号
    Num(i) = floor(No);
end

value = min(Num(:));

%% extrating number of slices
for i = 1:a 
    info = dicominfo(fullfile(folder,filepaths(i).name));
    No = info.SliceLocation;
    Num0 = floor(No)+ abs(value)+1;                            %%% 对slicelocation进行从小到大的排序
    image = dicomread(info);
    data(:,:,Num0) = image;     % saving data, including blanks  
end

%% delete the blank
n_dim = size(data,3);
t = 1;
for j = 1: n_dim
    img = data(:,:,j);
    if mean(img)==0
        rem(t) = j;
        t  = t + 1;
    else   
    end
end

data(:,:,rem) = [];     %% 删掉空白的层
n = size(data,3);

temp = data;

%% show and save the result
for i = 1:n
    data(:,:,n-i+1) = temp(:,:,i);
end
for i = 1:n
    imshow(data(:,:,i),[])
end

save pat4.mat data    %%% 保存数据

 

  • 5
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值