2016-02-22 41 views
2

在Matlab中,我想绘制几个二维图像(I(x,y)格式的二维矩阵中的所有数据)。我知道一个单一的情节,imagesc(我)可以实现所需的图像。但是,现在,我得到了一些图像,并希望将它们放在堆栈格式中,就像Examples中的图像如何在Matlab中以堆栈样式绘制多个2D图像?

+0

你想要什么叫切片,检查这个问题http://stackoverflow.com/questions/29625091/plotting-a-3d-matrix-in-slices-matlab –

回答

4

正如你所暗示的,你的问题最有用的功能是:slice。您还应该阅读本Mathworks文章:Exploring Volumes with Slice Planes,因为它提供了有关如何使用切片的更多示例。

对于你的情况,你有每个切片的数据(每个图像是一个切片),你只需要将它们打包在一起,以便Matlab将它们解释为体积数据。

由于您没有提供任何样本数据来处理,我必须生成一个小样本。我将使用Matlab的功能flow生成容积数据,并提取4幅图像(4片)出来的:

%% Generate sample images 
[x,y,z,v] = flow; %// x,y,z and v are all of size [25x50x25] 

im1 = v(:,:,5); %// extract the slice at Z=5. im1 size is [25x50] 
im2 = v(:,:,10); %// extract the slice at Z=10. im2 size is [25x50] 
im3 = v(:,:,15); %// extract the slice at Z=15. im3 size is [25x50] 
im4 = v(:,:,20); %// extract the slice at Z=20. im4 size is [25x50] 

hf = figure ; 
subplot(221);imagesc(im1);title('Z=5'); 
subplot(222);imagesc(im2);title('Z=10'); 
subplot(223);imagesc(im3);title('Z=15'); 
subplot(224);imagesc(im4);title('Z=20'); 

%// This is just how I generated sample images, it is not part of the "answer" ! 

它给你4张简单的图片: enter image description here


现在是真正的乐趣。堆栈所有的图像在一个矩阵,就好像他们只是切片:

M(:,:,1) = im1 ; 
M(:,:,2) = im2 ; 
M(:,:,3) = im3 ; 
M(:,:,4) = im4 ; 

您现在有一个矩阵M [25x50x4]如果你有太多的图片,你可以制定一个循环来堆叠他们

从那里开始,只需拨打slice即可获得您想要的照片。查看文档以探索所有可能的渲染选项。一个简单的例子是:

hf2 = figure ; 
hs = slice(M,[],[],1:4) ; 
shading interp 
set(hs,'FaceAlpha',0.8); 

主要生产: enter image description here


注:这里使用了默认的索引,这应该是对你有好处描述(简单地堆积一些图片)的问题。如果你想让你的体积具有真实的坐标,你可以用ndgrid建立一个坐标系统。例如:

[xs,ys,zs] = ndgrid(1:25 , 1:50 , 1:4) ; 

将创建尺寸为[25x50x4]的网格/坐标系。只需替换数字即可构建所需的网格坐标。

+0

谢谢。它很好地工作。 –

0

将它们全部排列在3D矩阵中。这将安排他们,你会得到stack(i,j,k),其中stack(i,:,:)给你一个特定的图像和i是切片号码。一旦完成,使用this库。 Viewer3D几乎可以让您在交互式3D图形界面中将所有内容都可视化,并且还可以执行插值。但是,切片之间的数据应该存在正相关关系,否则3D图像看起来没有意义。