Applying Function to Structure
    4 views (last 30 days)
  
       Show older comments
    
Currently, here is my code:
% Specify the folder where the files live.
myFolder = 'C:\Users\Irwin\Desktop\Matlab\Scintillator_project\advanced';
% Check to make sure that folder actually exists.  Warn user if it doesn't.
if ~isdir(myFolder)
  errorMessage = sprintf('Error: The following folder does not exist:\n%s', 
  myFolder);
  uiwait(warndlg(errorMessage));
  return;
end
% Get a list of all files in the folder with the desired file name pattern.
filePattern = fullfile(myFolder, '*.spe'); 
theFiles = dir(filePattern);
for k = 1 : length(theFiles)
  baseFileName = theFiles(k).name;
  fullFileName = fullfile(myFolder, baseFileName);
  fprintf(1, 'Now reading %s\n', fullFileName);
end
I currently have a structure in which each entry contains a .spe file. I would like to apply the function readSPE https://www.mathworks.com/matlabcentral/fileexchange/35940-readspe to each entry in the structure to convert them from .spe format to a 3D array.
Please help!
Thanks :)
0 Comments
Accepted Answer
  Walter Roberson
      
      
 on 21 Aug 2017
        
      Edited: Jan
      
      
 on 21 Aug 2017
  
      In terms of your existing code, you would just add a readSPE(fullFileName) after your fprintf().
If you want to use more compact code then
filePattern = fullfile(myFolder, '*.spe'); 
dinfo = dir(filePattern);
filenames = fullfile(myFolder, {dinfo.name});
output = arrayfun(@readSPE, filenames, 'uniform', 0);
6 Comments
  Walter Roberson
      
      
 on 22 Aug 2017
				filt_order = 3;   
% Get a list of all files in the folder with the desired file name pattern.
filePattern = fullfile(myFolder, '*.spe'); % Change to whatever pattern you need.
theFiles = dir(filePattern);
num_files = length(theFiles);
filt_results = cell(num_files, 1);
for k = 1 : num_files
  baseFileName = theFiles(k).name;
  fullFileName = fullfile(myFolder, baseFileName);
  fprintf(1, 'Now reading %s\n', fullFileName);
  this_spe = readSPE(fullFileName);
  filt_result{k} = medfilt1(this_spe, filt_order, 3);
end
You cannot use imagesc or anything similar to create images from them. The result of median filtering is going to be 3 dimensional if the input is 3 dimensional. You need to decide how you want to create the images of the 3D arrays:
- as iso surfaces using isosurface()
- as slices, using slice()
- using the R2017a voxelViewer() app
- as animation
- as voxels, using some other routine
More Answers (0)
See Also
Categories
				Find more on Matrix Indexing 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!

