Azzera filtri
Azzera filtri

how to save my 3d matrix in X,Y,Z coordinates

17 visualizzazioni (ultimi 30 giorni)
Mohannad Ajamieh
Mohannad Ajamieh il 11 Mag 2022
Risposto: Aman Banthia il 14 Set 2023
I have 134* 2d matrix (86*86 each) and they make 86*86*134 matrix.
I need to generate a point cloud of this matrix and that is why I must save the Matrix in xyz coordinates.
how can I save the matrix (I) in xyz table
my matrix (I) was generated by the following code
clear all
close all
names=dir('inter the name of your file\*.tiff');
for iii=1:size(names,1)
I(:,:,iii)=imread(strcat('inter the name of your file\',names(iii).name));
for j=1:size(names,1)
Img_3D=surface('XData',[0 355;0 355],'YData',[0 0;355 355],'ZData',[29.85*j 29.85*j;29.85*j 29.85*j], 'CData' ,flipdim(im2double(I(:,:,iii)),1),'FaceColor','texturemap','EdgeColor','none');
colormap(gray)
xlabel('x')
ylabel('y')
zlabel('z µm')
end
end

Risposte (1)

Aman Banthia
Aman Banthia il 14 Set 2023
Hi Mohannad,
I understand that you want to convert a 3d matrix into XYZ coordinates.
To save the matrix `I` in XYZ coordinates, you can use the `writematrix` function in MATLAB. Here is how you can save the matrix in an XYZ table format:
% Assuming I is your 3D matrix of size 86x86x134
% Reshape the matrix to a 2D matrix of size 7396x134
I_reshaped = reshape(I, [], size(I, 3));
% Generate XYZ coordinates
[X, Y, Z] = meshgrid(1:size(I, 1), 1:size(I, 2), 1:size(I, 3));
% Reshape the coordinates to a 2D matrix of size 7396x134
X_reshaped = reshape(X, [], size(I, 3));
Y_reshaped = reshape(Y, [], size(I, 3));
Z_reshaped = reshape(Z, [], size(I, 3));
% Combine the coordinates and intensity values
xyz_data = [X_reshaped(:), Y_reshaped(:), Z_reshaped(:), I_reshaped(:)];
% Save the data as an XYZ table
% Combine the coordinates and data into a matrix
xyz_data = [X_reshaped, Y_reshaped, Z_reshaped, data_reshaped];
% Save the data as a space-separated text file
dlmwrite('data.txt', xyz_data, 'delimiter', ' ');
In this code, the `I` matrix is reshaped into a 2D matrix, and XYZ coordinates are generated using `meshgrid`. Then, the XYZ coordinates and intensity values are combined into a single matrix `xyz_data`. Finally, the `writematrix` function is used to save the data as an XYZ table, where each row represents a point with its XYZ coordinates and intensity value.
You can adjust the file name and delimiter (`' '`) according to your requirements. Optionally, you can specify column headers in the XYZ table by providing the `VariableNames` argument in the `writematrix` function.
Please refer to the following MATLAB documentation to know more about the ‘meshgrid,’ ‘dlmwrite’ and ‘reshape’ functions:
Hope the above solution helps you.
Best Regards,
Aman Banthia

Community Treasure Hunt

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

Start Hunting!

Translated by