【问题标题】:Matlab's slice() function not working as desiredMatlab 的 slice() 函数无法按预期工作
【发布时间】:2012-07-04 08:18:20
【问题描述】:

我想使用以下代码行在[4:4:52] 的 13 个z 位置绘制离散二维图像。

a=100;
[mesh.x,mesh.y,mesh.z] = meshgrid(1:1:100,1:1:100,4:4:52);
a_unifdist=0;
b_unifdist=10;
noise=a_unifdist+(b_unifdist-a_unifdist).*rand(100,100,13);
c = (a./mesh.x)+noise;
slice(c,1:100,1:100,4:4:52);

但是,我得到了从 1 到 13 的 13 个连续图,而不是 13 个离散位置,如下所示:

谁能告诉我我的错误是什么?我希望图像堆叠在 z 轴上的 [4:4:52] 位置。谢谢。

【问题讨论】:

  • Amro:谢谢。实际上,我是从那篇帖子中了解到slice() 的功能。然而,这个问题是关于实际图像而不是矩阵(这是我的问题)。
  • 顺便说一句,你不应该使用 mesh 作为变量名(它已经是 MATLAB 函数的名称)

标签: matlab 3d plot volume-rendering discrete-space


【解决方案1】:

也许你的意思是:

slice(mesh.x, mesh.y, mesh.z, c, [], [], 4:4:52)

这是一个比随机数据更有趣的例子:

load mri
D = double(squeeze(D));

h = slice(D, [], [], 1:size(D,3));
set(h, 'EdgeColor','none', 'FaceColor','interp')
alpha(.1)

【讨论】:

  • 没错!显然,它将底部的前三张图像显示为彩色,但其余 10 张图像显示为黑色。如何纠正?
  • @S_H:抱歉,已修复。如果数据太密集,您可以沿 x/y 方向进行二次采样:c(1:4:end,1:4:end,:) 等等 mesh.xmesh.ymesh.z
  • Amro:很抱歉,我不明白您的最后评论。你能解释一下这是什么意思吗?我将变量名mesh 更改为Grid
  • @S_H:首先,我修正了第一行,希望你看到编辑。现在切片应该为您的情况正确呈现。至于我的评论,我的意思是,如果您发现情节过于拥挤,请尝试降低网格的分辨率;不要在meshgrid 调用中使用1:100 生成x/y,而是将其简化为1:4:100
  • 啊,我明白了。现在已经修好了。谢谢!
猜你喜欢
  • 2018-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多