画像分類を対象フォルダ内のすべての画像に適用させたい
Show older comments
以下のコードでフォルダ内の画像一枚に対しては作成済のSVMを適用させ分類結果を示せるようにできたのですが、フォルダ内の画像を一括で分類させるための操作がわからないです。
教えていただけると幸いです。
function [] = Predict(img)
load classifier.mat;
figure;
img = imread("A");
imshow(img);
img=rgb2gray(img);
glcm_feature = getGLCMFeatures(img);
lvl = graythresh(img);
img = im2bw(img, lvl);
% imshow(img);
% figure
img=imresize(img,[256 256]);
[hog_4x4, ~] = extractHOGFeatures(img,'CellSize',[4 4]);
testFeature = [hog_4x4 glcm_feature];
predictedLabel = predict(classifier, testFeature);
str = ['分類結果' predictedLabel];
dim = [0.25 0.0004 0.2 0.2];
annotation('textbox', dim, 'string', str, 'fontsize', 20, 'color', 'g','edgecolor', 'none');
end
Answers (1)
Shunichi Kusano
on 13 Dec 2021
0 votes
imagedatastore使うのが良いかと思います。フォルダ内の指定拡張子の画像をストア化しておいて、readで一枚ずつ読み込めます。詳しくは下のドキュメントをご覧ください。
4 Comments
YT
on 13 Dec 2021
Shunichi Kusano
on 13 Dec 2021
可能です。
読み取り自体はwhile文で回すことになると思いますが、
preds = [];
while hasData(ds) % ds:データストアのオブジェクト
img = read(ds); % 一枚ずつ読み取り
preds = [preds Predict(img)]; % predsアレイに結果をくっつけていく
end
plot(x,preds) % x:画像の番号(あらかじめ作っておく想定)
このような感じでできるかと思います。上のサンプルコードに肉付けして作成いただければと思います。
YT
on 14 Dec 2021
Shunichi Kusano
on 14 Dec 2021
matlab online でも大丈夫なはずですが、コードはどのように書いていますでしょうか。
例えば私のケースではdrive上のフォルダにBloodSmearImagesというフォルダがあり、その中に各クラスの画像を保存した3つのフォルダを配置しています。BloodSmearImages/ooo,BloodSmearImages/xxx,BloodSmearImages/+++という感じの3フォルダです。このケースでは
ds = imageDatastore('BloodSmearImages','IncludeSubfolders',true);
で各フォルダ内の画像を網羅したデータストアができます。
Categories
Find more on Deep Learning Toolbox in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!