6

我有一组100个相同大小的二维图像切片。我已经使用 MATLAB 将它们堆叠起来以创建体积数据。虽然二维切片的大小为 480x488 像素,但图像堆叠的方向不够宽,无法在投影时以不同方向可视化体积。我需要沿切片进行插值以增加可视化的大小。

有人可以给我一个关于如何做的想法或提示吗?

编辑:带注释的投影显微镜图像

看着一张脸

普遍的看法

图 1 是投影体积的俯视图。

图 2 是投影体积的侧视图。

当我改变旋转角度并尝试以不同的方向可视化体积时,例如侧视图(图 2),就是我在图 2 中看到的。

我想通过沿图像切片进行插值来扩展侧视图。

4

3 回答 3

4

这是MATLAB 文档中关于如何使用isosurfaces可视化体积数据(类似于您的数据)的改编示例:

%# load MRI dataset: 27 slices of 128x128 images
load mri
D = squeeze(D);       %# 27 2D-images

%# view slices as countours
contourslice(D,[],[],1:size(D,3))
colormap(map), view(3), axis tight

%# apply isosurface
figure
%#D = smooth3(D);
p = patch( isosurface(D,5) );
isonormals(D, p);
set(p, 'FaceColor',[1,.75,.65], 'EdgeColor','none')
daspect([1 1 .5]), view(3), axis tight, axis vis3d
camlight, lighting gouraud

%# add isocaps
patch(isocaps(D,5), 'FaceColor','interp', 'EdgeColor','none');
colormap(map)

轮廓切片 isosurface_isocaps

于 2011-07-21T16:20:10.023 回答
3

interp3假设数据是均匀离散的,MATLAB 有一个可用于插值的函数。

查看文档

希望这可以帮助。

编辑:MATLAB 函数的interp3工作原理如下:

vi = interp3(x, y, z, v, xi, yi, zi);

我假设您的切片“堆栈”将数组定义x, y, z, v3D数组,其中x, y是平面中像素的坐标,z是每个切片的“高度”,v是实际的图像切片,可能是像素的“强度”值.

如果您想在中间值处插入新的图像切片,您可以在数组z中指定这些级别。zi数组xi, yi将再次表示平面中像素的坐标。

于 2011-07-21T06:03:57.903 回答
0

I created a function to interpolate along image slices. Below is the code:

    function res = interp_along_slices( vol, scale )
    % Interpolation along the image slices

    % Get the size of the volume
      [r c p] = size(vol);

    % Pre-allocate the array:
    % the third dimension is scale times the p
      vol_interp = zeros(r,c,scale*p);

    % interpolate along the image slices 
      for inr = 1:r;
          for jnr = 1:c;
              xi = vol(inr,jnr,:);
              vol_interp(inr,jnr,:) = interp(xi, scale); 
          end;
      end;

      res = vol_interp;

    end
于 2011-10-31T13:20:57.057 回答