沿着 2-D 图像切片插值

6
我有一组大小相同的100个二维图像切片。我使用MATLAB将它们堆叠起来创建成体积数据。虽然2D切片的大小为480x488像素,但是当投影时,由于图像堆叠的方向不够广泛,无法在不同的方向上可视化该体积。我需要沿着切片进行插值以增加可视化的大小。
请问是否能给我一些关于如何处理的想法或提示?
注:显微镜成像的投影图像
图1是投影体积的俯视图。
图2是投影体积的侧视图。
当我改变旋转角度并尝试在不同的方向上可视化该体积时,例如侧视图(图2),我所看到的就像图2一样。
我希望通过沿着图像切片进行插值来扩展侧视图。

你正在开发什么类型的应用程序?它是否与医学成像(例如CT)有关? - Alceu Costa
Alceu,我正在处理显微镜图像。 - Sequentialrant
3个回答

4
这是从MATLAB文档中改编的一个示例,演示如何使用等值面可视化体数据(类似于您的数据):
%# 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)

contourslice isosurface_isocaps


3

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

请查看文档

希望这可以帮到您。

编辑:MATLAB函数interp3的工作方式如下:

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

我假设您的“切片堆栈”将数组x,y,z,v定义为3D数组,其中x,y是平面中像素的坐标,z是每个切片的“高度”,v是实际图像切片,可能作为像素的“强度”值。
如果您想在中间z值处插值新的图像切片,则可以在zi数组中指定这些级别。数组xi,yi再次表示平面中像素的坐标。

谢谢你的建议,达伦。我基本上是想在切片之间添加切片。我不明白你所说的“均匀离散化”数据是什么意思。我对此还比较陌生。你能否详细解释一下,帮助我理解呢? - Sequentialrant
1
看到我的编辑以获取更多信息。如果这不起作用,也许可以稍微详细解释一下您的问题。在这种情况下,“均匀离散化”意味着数据是根据笛卡尔网格结构化的(与散布的三角测量相反) - 我相信您的问题是均匀的。 - Darren Engwirda
正如@DarrenEngwirda所解释的那样,2D图像切片具有统一的网格位置(像素位置和切片高度)。如果由于某种原因不是这种情况,您可以使用griddata3/TriScatteredInterp来插值散乱数据... - Amro
Darren和Amro,感谢你们解释“均匀离散化”的概念。关于插值,我有些困惑。我正在处理显微镜图像的可视化工作。我已经通过注释一些投影图像来编辑了我的帖子。希望能得到一些建议和帮助。 - Sequentialrant
你好达伦。我仍然无法弄清楚它。您可以帮助我更好地了解如何在这个特定应用中使用interp3吗? - Sequentialrant

0
我创建了一个函数来沿着图像切片进行插值。以下是代码:
    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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接