ディレクトリの下の階層も全て含めてmatlabに読み込ませるには?
47 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
プログラミング初心者です。
matlabで画像処理を行なおうと思っており、ディレクトリを(画像等が入っている)下の階層含め、すべて読み込ませようと思ったのですが、どうやらうまくいっていないようです。
.mファイルのみ読み取ることができて、matlab上でコードを書けるのですが、画像等も読み込ませる必要がございますので、ご教示頂けますと幸いです。
0 commentaires
Réponse acceptée
Shunichi Sekiguchi
le 1 Fév 2019
Modifié(e) : Shunichi Sekiguchi
le 1 Fév 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 commentaires
Shunichi Sekiguchi
le 2 Fév 2019
そのような構造であれば、一番下に書いた以下のコードで読み込むことができると思います
名前を付けたcellにそれぞれの画像が読み込まれます
-2とするのは、
MainFolderInfo.name
が余分な部分を含んでいるからです,みてみてください
% {'.'; '..'; 'A'; 'B'}
のように,AとBというファイル以外に,.と..を含んでいることが分かるかと思います.
でもその部分は書き方を変えるといらないので,以下のコードに書く形がいいかと思います.
% malicious01(肺炎)の情報を取得
MainFolderInfo = dir('main/data/malicious01(肺炎)');
% データの数
data_num = length(MainFolderInfo) - 2;
% cellを作成
data_cell_haien = cell(data_num, 1);
for num = 1:data_num
img_name = MainFolderInfo(num + 2).name
file_name = strcat('main/data/malicious01(肺炎)/', img_name);
data_cell_haien{num, 1} = imread(file_name);
end
% malicious02(肺がん)の情報を取得
MainFolderInfo = dir('main/data/malicious02(肺がん)');
% データの数
data_num = length(MainFolderInfo) - 2;
% cellを作成
data_cell_haigan = cell(data_num, 1);
for num = 1:data_num
img_name = MainFolderInfo(num + 2).name
file_name = strcat('main/data/malicious02(肺がん)/', img_name);
data_cell_haigan{num, 1} = imread(file_name);
end
% malicious03(肺がん)の情報を取得
MainFolderInfo = dir('main/data/malicious03(肺気胸)');
% データの数
data_num = length(MainFolderInfo) - 2;
% cellを作成
data_cell_kikyou = cell(data_num, 1);
for num = 1:data_num
img_name = MainFolderInfo(num + 2).name
file_name = strcat('main/data/malicious03(肺気胸)/', img_name);
data_cell_kikyou{num, 1} = imread(file_name);
end
% benignの情報を取得
MainFolderInfo = dir('main/data/benign');
% データの数
data_num = length(MainFolderInfo) - 2;
% cellを作成
data_cell_benign = cell(data_num, 1);
for num = 1:data_num
img_name = MainFolderInfo(num + 2).name
file_name = strcat('main/data/benign/', img_name);
data_cell_benign{num, 1} = imread(file_name);
end
Plus de réponses (1)
Shunichi Sekiguchi
le 1 Fév 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
Voir également
Catégories
En savoir plus sur Simscape Electrical dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!