HI,i'm the beginner of the matlab ,i have a lot of grayscale image like fig1 ,and i want matlab loads this images and surf to the 3d-plot like fig2 , how should i do ? i try using surf()function but it doesn't work.

2 commentaires

jonas
jonas le 2 Juin 2018
What do you have on your z-axis?
Mac Tavish
Mac Tavish le 3 Juin 2018
You mean what's that or z axis dimension? z axis dimension is 15 mm

Connectez-vous pour commenter.

 Réponse acceptée

jonas
jonas le 2 Juin 2018
Modifié(e) : jonas le 2 Juin 2018

0 votes

Perhaps you are trying to pass a color image to surf, which does not work. Note that if you load a grayscale image, it will still be represented as RBG. Therefore you will have to first convert the image to grayscale.
A=imread('fig1.jpg');
B = rgb2gray( A );
surf(B,'edgecolor','none')
%optional
colormap(gray)
Note that x- and y-axis are pixel positions, as no dimensions were provided.

6 commentaires

Mac Tavish
Mac Tavish le 3 Juin 2018
Modifié(e) : Mac Tavish le 3 Juin 2018
Hi jonas thank for your answer. I put your code in matlab ,but it doesn't show anything like this
Am I doing wrog ? by the way do you know how to set the x- and y- and z-axis dimensions? i want xy-axis was 72mm*72mm and z axis is 15mm just like fig2 thank you.
Try
surf(double(B), 'edgecolor', 'none')
You are asking about setting specific sizes for the axis. Do you mean that you want the x axis to be 72 mm high when plotted on your display, and that it should maintain that 72 mm if plotted on a different system with a different display resolution?
Mac Tavish
Mac Tavish le 3 Juin 2018
Modifié(e) : Mac Tavish le 3 Juin 2018
Hi Walter , thanks for the code,it works great. The quation you ask me: I just want the x- and y-axis are pixel dimensions(0-355) be come a real dimensions (0-72mm) ,and shrink the z-axis high from(0-255) become(0-15mm)in the picture. like this:
I have a origin figure like fig1 i post, but i don't know how to set the x,y,z dimensions to get the result like this.
thanks!
numrow = size(B,1);
numcol = size(B,2);
Y = (1:numrow)./numrow * 72;
X = (1:numcol)./numcol * 72;
Z = double(B)./255) * 15;
surf(X, Y, Z, 'edgecolor', 'none')
axis equal
Mac Tavish
Mac Tavish le 3 Juin 2018
Perfect! It's really helpful ,you are so kind. Thank you Walter!
agung pratama
agung pratama le 21 Juil 2020
Is fig1 use a noise rremoval? and what is that?

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Images dans Centre d'aide et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by