matlab纹理反转,MATLAB中的纹理映射

请注意,您最初尝试使用的函数

TRISURF将返回一个修补对象的句柄.如果你看看

'FaceColor' property for patch objects,你可以看到没有’texturemap’选项.该选项仅对

'FaceColor' property of surface objects有效.因此,您将需要找到一种将三角形表面绘制为表面对象而不是贴图对象的方法.这里有两种方法来解决这个问题:

如果你的数据是统一的网格…

如果您的表面数据的坐标表示均匀的网格,以便z是从x轴的xmin到xmax的长方形集合,y轴的ymin到ymax,则可以使用SURF而不是TRISURF :

Z = ... %# N-by-M matrix of data

x = linspace(xmin,xmax,size(Z,2)); %# x-coordinates for columns of Z

y = linspace(ymin,ymax,size(Z,1)); %# y-coordinates for rows of Z

[X,Y] = meshgrid(x,y); %# Create meshes for x and y

C = imread('image1.jpg'); %# Load RGB image

h = surf(X,Y,Z,flipdim(C,1),... %# Plot surface (flips rows of C, if needed)

'FaceColor','texturemap',...

'EdgeColor','none');

axis equal

为了说明上述代码的结果,我将数据初始化为Z =峰;使用内置的样本图像“peppers.png”,并将x和y值设置为跨越1到16.在以下纹理映射表面:

如果您的数据不均匀间隔…

如果您的数据不是有规律的间隔,您可以创建一组规则间隔的X和Y坐标(如上所述使用MESHGRID),然后使用其中一个函数GRIDDATA或TriScatteredInterp来插值来自不规则的Z值的常规网格一组z值.我在my answer to another SO question讨论如何使用这两个功能.这是一个精简版的代码,你发布使用TriScatteredInterp:

x = ... %# Scattered x data

y = ... %# Scattered y data

z = ... %# Scattered z data

xmin = min(x);

xmax = max(x);

ymin = min(y);

ymax = max(y);

F = TriScatteredInterp(x(:),y(:),z(:)); %# Create interpolant

N = 50; %# Number of y values in uniform grid

M = 50; %# Number of x values in uniform grid

xu = linspace(xmin,xmax,M); %# Uniform x-coordinates

yu = linspace(ymin,ymax,N); %# Uniform y-coordinates

[X,Y] = meshgrid(xu,yu); %# Create meshes for xu and yu

Z = F(X,Y); %# Evaluate interpolant (N-by-M matrix)

C = imread('image1.jpg'); %# Load RGB image

h = surf(X,Y,Z,flipdim(C,1),... %# Plot surface

'FaceColor','texturemap',...

'EdgeColor','none');

axis equal

在这种情况下,您必须首先为矩阵Z的大小选择N和M的值.为了说明上述代码的结果,我初始化了x,y和z的数据,如下所示,并使用内置示例图像“peppers.png”:

x = rand(1,100)-0.5; %# 100 random values in the range -0.5 to 0.5

y = rand(1,100)-0.5; %# 100 random values in the range -0.5 to 0.5

z = exp(-(x.^2+y.^2)./0.125); %# Values from a 2-D Gaussian distribution

这导致以下纹理映射表面:

请注意,表面附近有锯齿状边缘.这些地方,TriScatteredInterp的点数太少,不足以适应内插曲面.因此,这些点的Z值为NaN,导致表面点未绘制.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值