【问题标题】:Interpolating along the 2-D image slices沿二维图像切片插值
【发布时间】:2012-07-12 17:52:49
【问题描述】:

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

有人可以给我一个想法或提示吗?

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

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

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

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

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

【问题讨论】:

  • 您正在开发什么样的应用程序?是否与医学影像(例如 CT)有关?
  • Alceu,我正在研究显微镜图像。

标签: matlab 2d volume interpolation visualize


【解决方案1】:

这是来自MATLAB documentation 的一个改编示例,关于如何使用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)

【讨论】:

    【解决方案2】:

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

    查看documentation

    希望这会有所帮助。

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

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

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

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

    【讨论】:

    • 感谢达伦的建议。我基本上是在尝试在切片之间添加切片。我无法理解您所说的“统一离散化”数据是什么意思。我对此很陌生。请您详细说明一下,帮助我理解。
    • 查看我的编辑以获取更多信息。如果这没有帮助,可能会发布有关您的问题的更多详细信息。在这种情况下,“统一离散化”意味着数据是根据笛卡尔网格构造的(例如,与分散的三角剖分相反)-我相当有信心您的问题是统一的。
    • +1 正如@DarrenEngwirda 解释的那样,2D 图像切片具有统一的网格位置(像素位置和切片高度)。如果由于某种原因不是这种情况,您可以使用griddata3/TriScatteredInterp 插入分散数据...
    • Darren 和 Amro,感谢您对“统一离散化”的解释。关于插值,我不知所措。我正在研究显微镜图像的可视化。我通过注释一些投影图像来编辑我的帖子。希望得到一些建议和帮助。
    • 你好,达伦。我仍然无法弄清楚。你能帮我了解更多关于在这个特定应用程序中使用 interp3 的信息吗?
    【解决方案3】:

    我创建了一个沿图像切片进行插值的函数。下面是代码:

        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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-10
      • 2021-12-03
      • 1970-01-01
      • 2017-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多