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

11 views (last 30 days)
秋葉
秋葉 on 12 Nov 2022
Commented: 秋葉 on 18 Nov 2022
プログラミング初心者です。
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
Atsushi Ueno
Atsushi Ueno on 12 Nov 2022
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

Find more on Read, Write, and Modify Image in Help Center and File Exchange

Products


Release

R2022a

Community Treasure Hunt

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

Start Hunting!