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

3 ビュー (過去 30 日間)
秋葉
秋葉 2022 年 11 月 12 日
コメント済み: 秋葉 2022 年 11 月 18 日
プログラミング初心者です。
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');

採用された回答

Atsushi Ueno
Atsushi Ueno 2022 年 11 月 12 日
> どのようにスクリプトを変えればよいかご教授いただけますと幸いです。
  • ワイルドカードを含むパス名やファイル名は、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 件のコメント
Atsushi Ueno
Atsushi Ueno 2022 年 11 月 12 日
data{j} = dicomread([list_dicom(j).folder,filesep,list_dicom(j).name]);
%%%%↑ ↑ ここを変更
複数のイメージを重ねて一つの3次元行列にするには、イメージデータのサイズ(画像の大きさ)が一致している必要があります。dataを行列からセル配列に変更する事を検討してください。
秋葉
秋葉 2022 年 11 月 18 日
返信遅くなってしまいました。
無事実行できました。ありがとうございました。

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeConvert Image Type についてさらに検索

製品


リリース

R2022a

Community Treasure Hunt

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

Start Hunting!