Clear Filters
Clear Filters

Applying Function to Structure

3 views (last 30 days)
itend
itend on 21 Aug 2017
Commented: itend on 22 Aug 2017
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 :)

Accepted Answer

Walter Roberson
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
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
itend
itend on 22 Aug 2017
Thank you so much for your help!!!

Sign in to comment.

More Answers (0)

Community Treasure Hunt

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

Start Hunting!