如何在Matlab中以堆栈样式绘制多个2D图像?

时间:2016-02-22 09:16:03

标签: matlab image-processing

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

中显示的图像一样

2 个答案:

答案 0 :(得分:5)

正如您所暗示的,对您的问题最有用的功能是: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]的网格/坐标系。只需替换数字即可构建所需的网格坐标。

答案 1 :(得分:0)

将它们全部安排在3D矩阵中。这将安排它们,以便获得stack(i,j,k),其中stack(i,:,:)为您提供特定图像,i是切片编号。完成后,使用this库。 Viewer3D几乎可以让您在交互式3D GUI中可视化所有内容并执行插值。但是,切片之间的数据应该存在正相关,否则3D图像似乎没有意义。