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 Kommentare

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

Melden Sie sich an, um zu kommentieren.

 Akzeptierte Antwort

jonas
jonas am 2 Jun. 2018
Bearbeitet: jonas am 2 Jun. 2018

0 Stimmen

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 Kommentare

Mac Tavish
Mac Tavish am 3 Jun. 2018
Bearbeitet: Mac Tavish am 3 Jun. 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 am 3 Jun. 2018
Bearbeitet: Mac Tavish am 3 Jun. 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 am 3 Jun. 2018
Perfect! It's really helpful ,you are so kind. Thank you Walter!
agung pratama
agung pratama am 21 Jul. 2020
Is fig1 use a noise rremoval? and what is that?

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Community Treasure Hunt

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

Start Hunting!

Translated by