Extract number and infromation from multiple image files ?
3 views (last 30 days)
Show older comments
Hi everybody
I have a folder with many images in a structure of name: "name_id_324_988_true_207_1.6", i want to take the part "324_988_true" to calculate, for example:
ls Defolder;
23l9p9_Sy3lMlT_265_332_false_270_1.32.jpg
38bvq6_dwJCL2R_126_665_true_6_0.5.jpg
i want to take the part "265_332_false" for each image and show the calculated number on the distribution table for example:
folder = 'Defolder';
S = dir(fullfile(folder,'*.jpg'));
N = {S.name};
[~,F] = cellfun(@fileparts,N,'uni',0);
V = str2double(F);
V1 = V';
all i got is a lot of NaN, please help, thank youu
Accepted Answer
Rik
on 27 Jun 2020
The code below should do what you need. Adapt as needed.
folder = 'Defolder';
S = dir(fullfile(folder,'*.jpg'));
N = {S.name};
%overwrite N so it works on my computer as well
N={'23l9p9_Sy3lMlT_265_332_false_270_1.32.jpg','38bvq6_dwJCL2R_126_665_true_6_0.5.jpg'};
c=cellfun(@MyFun,N,'UniformOutput',false);
celldisp(c)
function c=MyFun(str)
c=strsplit(str,'_');
c=c(3:5);
c{1}=str2double(c{1});
c{2}=str2double(c{2});
c{3}=strcmp(c{3},'true');
end
12 Comments
Rik
on 7 Jul 2020
Leave this function intact:
function c=MyFun(str)
c=strsplit(str,'_');
c=c(3:5);
c{1}=str2double(c{1});
c{2}=str2double(c{2});
c{3}=strcmp(c{3},'true');
c{4}=(c{1}/45)*c{2};
end
Then you can modify the code after cellfun:
folder = 'Defolder';
S = dir(fullfile(folder,'*.jpg'));
N = {S.name};
%overwrite N so it works on my computer as well
N={'23l9p9_Sy3lMlT_265_332_false_270_1.32.jpg','38bvq6_dwJCL2R_126_665_true_6_0.5.jpg'};
c=cellfun(@MyFun,N,'UniformOutput',false);
c=vertcat(c{:});
for n=1:size(c,2)
c{1,n}=cell2mat(c(:,n));
end
c(2:end,:)=[];
%you can also put more descriptive variable names here instead
plot(c{1},c{2},'*')
function c=MyFun(str)
c=strsplit(str,'_');
c=c(3:5);
c{1}=str2double(c{1});
c{2}=str2double(c{2});
c{3}=strcmp(c{3},'true');
c{4}=(c{1}/45)*c{2};
end
More Answers (1)
Stephen23
on 1 Jul 2020
D = 'Defolder';
S = dir(fullfile(D,'*.jpg'));
N = {S.name};
T = regexpi(N,'(\d+)_(\d+)_(true|false)','tokens','once');
T = vertcat(T{:});
M = str2double(T(:,1:2))
B = strcmpi(T(:,3),'true')
See Also
Categories
Find more on Get Started with MATLAB in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!