如何使用 surf 在 Matlab 中绘制高度信息?

How to plot height information in Matlab using surf?

我已经从 TIFF 图像中获取纬度、经度和高度信息并将其输入 Matlab,并使用 surfc 函数将其绘制为 surfc(X,Y,Z)

surfc 输出:

树的图片:

但是如何让 Z 显示为 轮廓(类似于圆锥体) 对应于图像中对象的 高度?

感谢您的回答

如果您将点作为笛卡尔坐标使用 plot3

plot3(X,Y,Z,'.');

如果 X 和 Y 是自变量,Z 是因变量(给定 X 和 Y 的相应高度),则使用 surfmesh

surf(X,Y,Z);
mesh(X,Y,Z);

否则请放一些您的数据和结果样本,以便我们更好地理解您的问题。

编辑: 您实际上是在获取等高线图,但 surfc 还应该绘制曲面。 看一下surfcdocumentation,你会发现它在一张图中结合了两个图(曲面和等高线)

[X,Y,Z] = peaks(30);
figure
surfc(X,Y,Z)

您可以更改冲浪的颜色映射。示例:

clear;clc;close all
tif4 = imread('RzwK3.tif');
THeight = rgb2gray(tif4(:,:,1:3));
imshow(THeight)

x = 1:size(THeight,1); % can be changed to coordinates
y = 1:size(THeight,2);
[X,Y] = ndgrid(x,y);

% make contour color on the surface
M = 4; % # color in contour
Cvec = parula(M); % any Mx3 RGB triplet
hs = surf(X,Y,THeight,'EdgeAlpha',.1);
colormap(Cvec)
colorbar

如果您的 Matlab 版本没有 parula 或其他颜色生成函数,您可以手动分配 Cvec。矩阵的每一行都是一个 RGB 颜色三元组,其值介于 0 和 1 之间(您可以将 Web RGB 颜色除以 256)并且矩阵中应该有 M 行。例子:下面是parula(4)的输出,可以通过替换这行代码手动输入。

Cvec = [
    0.2081    0.1663    0.5292; % R1 G1 B1
    0.0265    0.6137    0.8135; % R2 G2 B2
    0.6473    0.7456    0.4188; % R3 G3 B3
    0.9763    0.9831    0.0538]; %R4 G4 B4