如何使用surf来可视化3D场景

3

我有一张从磁盘加载的图像作为纹理,并且有一个相同大小的矩阵d,其中包含对应的深度。

如何使用surf将图像显示为3D模型?只需要执行以下操作:

surf(depthMatrix, img);

由于以下原因,结果不够理想:

  1. 相机视角不在x-y平面内,而是在z方向上
  2. 看起来相当黑暗
  3. 即使使用imshow(depthMatrix, []);显示时,深度矩阵实际上已经被平滑处理,但它看起来并不那么平滑。

图像外观

1个回答

4
您可以使用纹理映射来在表面上显示您的图像,如下所示:
surf(depthMatrix,img,...           %# depthMatrix is z data, img is an image
     'FaceColor','texturemap',...  %# Use texture mapping
     'EdgeColor','none');          %# Turn off edge coloring

针对您的三个问题:

  1. 您可以通过在图像上按下alt text按钮来使用交互式3D旋转,从而用鼠标调整相机角度。您也可以使用ROTATE3D函数打开交互式旋转,或者使用VIEW函数在没有鼠标的情况下更改相机视图。

  2. 您的绘图看起来很黑,因为默认情况下边缘是用黑线绘制的,而且可能有很多这样的边缘。

  3. 您可以调整坐标轴的比例和限制,以使表面更平滑。例如,axis equal将使所有3个轴上的数据单位相同,因此,您的z轴(范围从0到25)将被显著压扁,因为您的其他两个轴跨越数百范围。或者,在调用SURF时,您可以指定用于这些轴上的值的x和y数据,从而最终帮助您更好地调整这些轴与z轴之间的相对比例。


看起来好多了。谢谢!如何将相机旋转到从底部观察模型,也许带有一些角度以便深度可见? - Etan
如何使用旋转工具将底部边缘放置在屏幕上方边缘的后面? - Etan
@Etan:在打开3D旋转后,当鼠标指针悬停在坐标轴上时,按住左键并移动鼠标,坐标轴会随之旋转。只需将其旋转到所需位置即可。或者,您可以使用VIEW函数尝试不同的方位角和俯仰角值组合,直到获得所需效果为止。 - gnovice

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接