下の階層にある大量の​フォルダ内にあるdi​comファイルを読み​込んで、1つのmat​ファイルに保存したい​です。

プログラミング初心者です。
myfolderの中の複数のフォルダにある大量のdicomファイルを全て読み込んで、1つのmatファイルにまとめるため以下のようなスクリプトを書いたのですが、「dicomファイルが読み込めません」というエラーが出てきてしまします。
どのようにスクリプトを変えればよいかご教授いただけますと幸いです。
% path to files
pname = '/Volumes/SSD/myfolder/*/'; %
%%
list_dicom = dir([pname,'*.dcm']);
gg=size(list_dicom,1); % N of slices
for j = 1:gg
data(:,:,j) = dicomread([pname,list_dicom(j).name]);
end
save([pname,'all_data.mat'],'data');

 Accepted Answer

Atsushi Ueno
Atsushi Ueno on 12 Nov 2022
> どのようにスクリプトを変えればよいかご教授いただけますと幸いです。
  • ワイルドカードを含むパス名やファイル名は、dir 関数には通用しますが dicomread 関数には通用しません
  • dicomファイルは複数フォルダに散在するのに対し、matファイルをどこに保存するか不明確です
以上の問題点を解消する為、下記の通り変更しました。
  • dicomread 関数はワイルドカードを認識しないので、絶対パス(フォルダ名+区切り文字+ファイル名)を指定
  • save 関数によるmatファイルの保存先を特定 (区切り文字には filesep を使用しています)
% path to files
pname = '/Volumes/SSD/myfolder/*/'; %
%%
list_dicom = dir([pname,'*.dcm']);
gg=size(list_dicom,1); % N of slices
for j = 1:gg
data(:,:,j) = dicomread([list_dicom(j).folder,filesep,list_dicom(j).name]); % ここを変更
end
save(['/Volumes/SSD/myfolder',filesep,'all_data.mat'],'data'); % ここを変更

3 Comments

ありがとうございます。
教えていただいたスクリプトを動かしてみたのですが、
data(:,:,j) = dicomread([list_dicom(j).folder,filesep,list_dicom(j).name]); % ここを変更
の部分で、
左辺のサイズが 87x144 で右辺のサイズが 0x0 であるため、代入を実行できません。
というエラーが出てきてしましました。
これは、どのように対処すればよいのでしょうか。
data{j} = dicomread([list_dicom(j).folder,filesep,list_dicom(j).name]);
%%%%↑ ↑ ここを変更
複数のイメージを重ねて一つの3次元行列にするには、イメージデータのサイズ(画像の大きさ)が一致している必要があります。dataを行列からセル配列に変更する事を検討してください。
秋葉
秋葉 on 18 Nov 2022
返信遅くなってしまいました。
無事実行できました。ありがとうございました。

Sign in to comment.

More Answers (0)

Categories

Products

Release

R2022a

Asked:

on 12 Nov 2022

Commented:

on 18 Nov 2022

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!