MATLAB Answers

How to sort the struct array after reading number of images using dir command

7 views (last 30 days)
Hi,
I am reading images thru 'dir' command from a folder but those are unsorted , I am expecting them as sorted....
file2=dir(file); // file contains path to the folder where I stored the images
for k = 1 : numel(file2)
im = imread(file2(k).name);
folder1=sprintf('%s%s%s%d',targetfolder,index,fi,j);
imwrite(im,[folder1,'.jpg']);
j=j+1;
end
  5 Comments
Stephen Cobeldick
Stephen Cobeldick on 21 Feb 2018
@Mohammad Bhat: that is an unusual error. Line 15 of natsortfiles (that I wrote) is a comment, with no executable code anywhere near it. Nowhere in any of the Mfiles of that FEX submission is there anything called endfirst. An internet search did not locate anything related to the term "endfirst".
Are you sure that you downloaded the function from the link that I gave you?
I wonder if this is an undocumented beta-feature: what MATLAB version are you using?

Sign in to comment.

Accepted Answer

Stephen Cobeldick
Stephen Cobeldick on 21 Feb 2018
Edited: Stephen Cobeldick on 18 Apr 2021
"I am reading images thru 'dir' command from a folder but those are unsorted , I am expecting them as sorted...."
The order of the output of dir is determined by the OS and is not specified.
You can sort filenames very easily by using my FEX submission natsortfiles, which provides an alphanumeric sort for filenames (i.e. so that any numbers in the filenames are sorted into numeric order). You will need to download it, unzip it, and place the Mfiles on the MATLAB Search Path (e.g. in the current directory):
It is easy to use, and there are example in the Mfile and HTML documentation. Here is a basic working example:
D = 'C:\Test';
S = dir(fullfile(D,'*.txt'));
S = natsortfiles(S); % alphanumeric sort by filename
for k = 1:numel(N)
filename = fullfile(D,S(k).name)
...
end
  17 Comments
Stephen Cobeldick
Stephen Cobeldick on 22 Feb 2018
@Mohammad Bhat: please put both the code that you are running, natsortfiles and natsort files into a zip file and upload them into a new comment (not an answer).
Most importantly: please show the outputs to these commands:
which fileparts -all
which cellfun -all
Have you named any variable, function, or mfile fileparts ?

Sign in to comment.

More Answers (1)

Mohammad Bhat
Mohammad Bhat on 22 Feb 2018
Edited: Stephen Cobeldick on 22 Feb 2018
After following these steps, It worked for another function
https://in.mathworks.com/matlabcentral/fileexchange/10959-sort-nat--natural-order-sort
D = 'C:\Users\Hp\Desktop\3';
S = dir(fullfile(D,'*.jpg'));
C = {S.name};
[cs,index] = sort_nat(C);
cs
I am attaching '.mat' file after saving result
  10 Comments
Mohammad Bhat
Mohammad Bhat on 23 Feb 2018
Bingo, yes I checked now, I was doing a mistake, you guessed it correctly, thanks a lot.

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!