如何使用 surf 可视化 3D 场景
我有一个从磁盘加载的图像作为纹理,以及一个具有相应深度的相同大小的矩阵 d 。
如何使用 surf
将图像显示为 3D 模型?简单地拍摄
surf(depthMatrix, img);
并不能得到很好的结果,因为
- 相机看起来不是从 z 方向的 xy 平面
- 它看起来相当黑
- 它看起来并不那么平滑,尽管当我使用 imshow 显示它时我的深度矩阵实际上被平滑了(深度矩阵,[]);
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您可以使用纹理映射在表面上显示图像,如下所示:
并解决您的 3 点:
您可以通过按 按钮,可打开交互式 3-D 旋转。您还可以使用函数 ROTATE3D 打开交互式旋转,或者您可以使用函数 VIEW 来更改相机视图,而无需使用鼠标。< /p>
你的图看起来是黑色的,因为默认情况下边缘被绘制为黑线,并且可能有很多。
您可以调整轴缩放和限制以使您的表面显得更光滑。例如,
axis equal
将使所有 3 个轴的数据单位相同,因此您的 z 轴(范围从 0 到 25)将显着扁平化,因为其他两个轴的跨度范围为数百个。或者,在调用 SURF 时,您可以指定 x 和 y 数据用于这些轴上的值,这最终可以帮助您更好地调整这些轴和 z 轴之间的相对缩放比例。You can use texture mapping to display your image on your surface like so:
And to address your 3 points:
You can adjust your camera angle with the mouse by pressing the button on the figure, which turns on interactive 3-D rotation. You can also turn interactive rotation on using the function ROTATE3D, or you can change the camera view without the mouse using the function VIEW.
Your plot was looking black because edges are drawn as black lines by default, and there were probably a lot of them.
You can adjust the axis scaling and limits to make your surface appear smoother. For example,
axis equal
will make data units the same for all 3 axes, so your z axis (which ranges from 0 to 25) will be flattened significantly since your other two axes span ranges in the hundreds. Alternatively, in your call to SURF you can specify x and y data to use for the values on those axes, which can ultimately help you to better adjust the relative scaling between those axes and the z axis.