MATLAB: How to convert a 3D array into 4-column table (x y z value)

matrix manipulation

For example, I have the following (reading slices of DICOM images):
for ii = 1:length(files)
% get fileName
fileName = strcat(myPath, files(ii).name);
metaData{ii} = dicominfo(fileName);
sliceNum = metaData{ii}.SOPInstanceUID(end-2:end);
imgData(:,:,ii) = dicomread(fileName);
writematrix(imgData(:,:,ii), strcat(myPath, exportName, '-', sliceNum, '.csv'))
end
The format is as follows: imgData(x,y,z) = value
Where imgData is a 3D array of values such that imgData(:,:,z) will give me a 512×512 array of values.
If imgData(1,2,3) = 4, I want a 2D array to have the following:
x y z value
1 2 3 4
What is the best way to convert the index of the data into a column?

Best Answer

[m,n,p]=size(imgData);
[x,y,z]=ndgrid(1:m,1:n,1:p);
out=[x(:),y(:),z(:),imgData(:)];