ola*_*ndo 4 matlab texture-mapping
我[x,y]=meshgrid(1:N,1:M)在常规2D N x M网格上定义了一组点.我有另一组点[u,v]是原始网格的一些变形,即[u,v]=f(x,y)'(但是我没有实际f导致变形的点).如何将纹理映射到由" u,v?"定义的"变形"网格?即,如果给出具有宽高比的图像,N/M我该如何将其映射到变形网格?
我想你要求获得原始纹理的样本[u,v].你可以使用interp2.
假设纹理样本在z,你想要新的样本z2.要在原型中插入原始纹理[u,v],请使用:
z2 = interp2(x,y,z,u,v);
另一方面,如果要将"变形"纹理映射回规则间隔的网格[x2,y2],请使用griddata:
[x2,y2] = meshgrid(1:N2,1:M2);
z2 = griddata(u,v,z,x2,y2);
更新:
下面是一些示例代码,展示了如何使用实际数据执行此操作.使用标准化坐标可以更轻松.
% get texture data
load penny
z = P;
% define original grid based on image size
[m,n] = size(z);
[a,b] = meshgrid(linspace(0,1,n), linspace(0,1,m));
% define new, differently sized grid
m2 = 256;
n2 = 256;
[x,y] = meshgrid(linspace(0,1,n2), linspace(0,1,m2));
% define deformed grid
u = sqrt(x);
v = y.^2;
% sample the texture on the deformed grid
z2 = interp2(a,b,z,u,v);
% plot original and deformed texture
figure
subplot(2,1,1)
surface(a,b,z,'EdgeColor','none')
axis ij image off
colormap gray
title('original')
subplot(2,1,2)
surface(x,y,z2,'EdgeColor','none')
axis ij image off
colormap gray
title('deformed')
这就是结果:

| 归档时间: | 
 | 
| 查看次数: | 2728 次 | 
| 最近记录: |