MATLAB Answers

ディレクトリの下の階​層も全て含めてmat​labに読み込ませる​には?

71 views (last 30 days)
ssk
ssk on 1 Feb 2019
Commented: ssk on 2 Feb 2019
プログラミング初心者です。
matlabで画像処理を行なおうと思っており、ディレクトリを(画像等が入っている)下の階層含め、すべて読み込ませようと思ったのですが、どうやらうまくいっていないようです。
.mファイルのみ読み取ることができて、matlab上でコードを書けるのですが、画像等も読み込ませる必要がございますので、ご教示頂けますと幸いです。

Accepted Answer

Shunichi Sekiguchi
Shunichi Sekiguchi on 1 Feb 2019
Edited: Shunichi Sekiguchi on 1 Feb 2019
コメントが一部不適切でした...
いえ,それはmainの中に入っているfileの情報を取得していることになります
また,DICOMファイルであれば
が参考になります.
mainの中の画像ファイルを取得したいとのことであれば,以下のコードのようにできます.
これで,data_cellの中にすべての画像が格納されます.
% main folderの情報を取得
MainFolderInfo = dir('main')
% 配列構造で入っているので
% 以下のような感じ
% {'.'; '..'; 'A'; 'B'}
% データの数
data_num = length(MainFolderInfo);
data_cell = cell(data_num - 2, 1);
for num = 3:data_num
img_name = MainFolderInfo(num).name
file_name = strcat('main/', img_name);
data_cell{num - 2, 1} = imread(file_name); % dicom file であれば dicomread()です
end
  3 Comments
ssk
ssk on 2 Feb 2019
ご回答誠にありがとうございます。
頂いたコードをもとに(imreadの部分をdicomreadに変えて)DICOMファイルの読み込みを試してみたところ、workspaceにdata_cell_haienというものは作られたのですが、中身に画像は入っておりませんでしたのでご教示いただけますと幸いです。
また、仮にdataフォルダを消して、mainフォルダの下に直接malicious、benignファイルが来るようにした場合、以下のようにコードが変化するというご認識でよろしいでしょうか?
data_num = length(MainFolderInfo) - 1;
img_name = MainFolderInfo(num + 1).name

Sign in to comment.

More Answers (1)

Shunichi Sekiguchi
Shunichi Sekiguchi on 1 Feb 2019
ディレクトリごと読み込ませるために
また画像を読み込む際は
が参考になるかと思います.
impreadをして画像を読み込む際,Pathが必要になります.
Pathというのは,実行するmファイルから,その画像までの移動するフォルダの名前になります
例えば,mainフォルダの下にAというフォルダがあったとします.
そしてその中にa.pngがあったとすると,
% まずこれでmain foldの中のa, bが見える
dir main
% main folderの中を取得
MainFolderInfo = dir('main')
% 配列構造で入っているので
% 以下のような感じ
% {'.'; '..'; 'A'; 'B'}
% folderの名前を取得
FolderName = MainFolderInfo(3).name
% 名前の足し算
path = strcat('main/', FolderName)
% folder Aの情報を取得
AFolderInfo = dir(path)
% これも先ほどと同様に見えるので
% 以下のような感じ
% {'.'; '..'; 'a.jpg'}
% よって3番目から名前を取得する
img_name = AFolderInfo(3).name
img_path = strcat( path, '/', img_name)
imread(img_path)
で読み込むことができます.
もし,画像の名前を連番等にしている場合はわざわざこのようなことをしなくてもそのdataまでのPathを指定してあげればfor文等でまとめて読み込めます.
% main/Aの中の1.png ~ 100.pngを読み込む場合
for c = 1:100
% pathの指定
img = imread(strcat('main/A/', num2str(c), '.png'))
end
  1 Comment
ssk
ssk on 1 Feb 2019
Sekiguchiさま、詳細なご説明頂き誠にありがとうございます。
大量の連番ではないDICOMファイル(benign tumor、malicious tumorのclassification済)のものがあり、これからCNNを使ってみようかなと思うのですが、
dir main
% main folderの中を取得
MainFolderInfo = dir('main')
上記の方法で画像を取得できる認識でお間違えないでしょうか。
どうぞよろしくお願いいたします。

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!