How to extract the cdata of a 2D surface from 3D surface and save it as a matrix?

8 vues (au cours des 30 derniers jours)
Hello, I generated a 3D surface. The task is to extract the cdata of a 2D surface from the 3D surface and save it as png files. For example, extract the surface (0,90). I attached the X and Y and Z values here. You can use the below codes to generate a 3D surface in my example:
%generate a 3D surface
figure(1);subplot(1,2,1);
surf(X,Y,Z);colormap jet;
shading interp;
%see the (0,90) 2D surface;
view(0,90);subplot(1,2,2);
3D 2D
This is my method to extract the 2D surface:
view(0,90);
c=getframe(gca);
imwrite(c.cdata,'myimage.png');
I know this is good method to get the gca cdata. However, I have to generate millions of images. This method is a little slow. Could I know a direct method to generate a cdata matrix from some calculation with X Y and Z instead of using getframe()??
By the way, could I know how to write the cdata matrix to png files using the function writematrix()?
Thank you very much!!!!!!!!

Réponse acceptée

Image Analyst
Image Analyst le 13 Mar 2022
Modifié(e) : Image Analyst le 13 Mar 2022
You can just assign the matrix directly, like (untested)
load("X.mat");
load("Y.mat");
load("Z.mat");
tic
outputImage = zeros(1, 500, 'uint8');
xs = round(rescale(X, 1, 500));
ys = round(rescale(Y, 1, 500));
zs = round(rescale(Z, 0, 255));
for k = 1 : numel(xs)
outputImage(ys(k), xs(k)) = zs(k);
end
imshow(outputImage, 'ColorMap', jet(256), ...
'XData', [min(X, [], 'all'), max(X, [], 'all')], ...
'YData', [min(Y, [], 'all'), max(Y, [], 'all')] ...
);
axis('on', 'image')
toc
  9 commentaires
Ke Zhang
Ke Zhang le 14 Mar 2022
Modifié(e) : Ke Zhang le 14 Mar 2022
I ran your code thanks. By the way, Could I know how to change the color in the four cornors to white? Thanks!
Image Analyst
Image Analyst le 14 Mar 2022
If you're doing deep learning, those Z images are just sitting in a folder that you have an imageDataStore set up to point to.
To set the corners to white, set the values to 255
Z(1,1) = 255;
Z(1,end) = 255;
Z(end, 1) = 255;
Z(end, end) = 255;
Z=cat(3,Z,Z,Z);
% Then save to disk so your imageDatastore will point to it.

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Red dans Help Center et File Exchange

Produits


Version

R2021b

Community Treasure Hunt

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

Start Hunting!

Translated by