我想做类似的事情:3D terrain visualization with python and Mayavi2
作为输入,我有一个图像(地图),其像素的宽度和高度已定义。对于此图像/地图,我得到图像/地图所代表的表面的数字高程模型(范围)。范围包括最小/最大经度和纬度值。对于高程模型,我插入一个网格,其值与图像的像素值相同。
im # PIL Image object
pixel_x, pixel_y = im.size
ext = [lon_min, lon_max, lat_min, lat_max]
xstep = float(ext[1] - ext[0]) / float(pixel_x)
ystep = float(ext[3] - ext[2]) / float(pixel_y)
X, Y = np.mgrid[ext[0]:ext[1]:xstep,ext[2]:ext[3]:ystep]
Z = griddata(coords, elevations, (X, Y), method='cubic', fill_value=-1)
从X,Y,Z我绘制表面
surf = mlab.surf(X,Y,Z, color=(1.0,1.0,1.0))
现在我想将图像覆盖在表面上:
img = image_from_array(np.array(im))
texture_img = tvtk.Texture(interpolate = 1)
texture_img.input = img
surf.actor.enable_texture = True
surf.actor.tcoord_generator_mode = 'plane'
surf.actor.actor.texture = texture_img
这给我一个结果,如这里我使用了matplotlib lena版本:lena.png
在边界处重复纹理,而不是在整个表面区域上伸展(如我所愿)。我想要实现图像的任何像素都没有重复"。
我该怎么做才能防止纹理重叠"在边境?
我试图将X和Y值标准化为介于0和1之间,但这没有帮助。