Matlab 沿二维图像切片插值

Matlab 沿二维图像切片插值,matlab,2d,volume,interpolation,visualize,Matlab,2d,Volume,Interpolation,Visualize,我有一组大小相同的1002-D图像切片。我使用MATLAB对它们进行叠加,以创建体积数据。虽然二维切片的大小为480x488像素,但图像堆叠的方向不够宽,无法在投影时以不同方向显示体积。我需要沿切片进行插值,以增加可视化的大小 有人能给我一个关于如何做的想法或建议吗 编辑:投影显微镜图像 图1是投影体积的俯视图 图2是投影体积的侧视图 当我改变旋转角度,并尝试以不同的方向可视化体积时,例如侧视图(图2),如图2所示 我想通过沿图像切片插值来扩展侧视图。MATLAB有一个函数interp3,可

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

有人能给我一个关于如何做的想法或建议吗

编辑:投影显微镜图像

图1是投影体积的俯视图

图2是投影体积的侧视图

当我改变旋转角度,并尝试以不同的方向可视化体积时,例如侧视图(图2),如图2所示


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

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
将再次表示平面中像素的坐标。

下面是一个改编自的示例,介绍如何使用以下方法可视化体积数据(与您的类似):


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

    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

谢谢你的建议,达伦。我基本上是尝试在片之间添加片。我不明白你所说的“统一离散化”数据是什么意思。我对这方面还不太熟悉。你能帮我详细解释一下吗?更多信息请看我的编辑。如果这没有帮助,也许可以发布更多关于你的问题的细节。在这种情况下,“统一离散化”意味着数据是根据笛卡尔网格(例如,与分散的三角剖分相反)构造的-我相当确信您的问题是统一的。+1正如@DarrenEngwirda所解释的,2D图像切片具有统一的网格位置(像素位置和切片高度)。如果出于某种原因,情况并非如此,您可以使用
griddata3
/
TriScatteredInterp
插值散乱数据…Darren和Amro,感谢您对“统一离散化”的解释。关于插值,我感到七上八下。我正在研究显微镜图像的可视化。我已经通过注释一些投影图像编辑了我的文章。希望得到一些建议和帮助。你好,达伦。我还没弄明白。你能帮我更多地了解一下在这个特殊的应用程序中使用interp3吗?你在开发什么样的应用程序?它与医学成像(如CT)有关吗?阿尔丘,我正在研究显微镜图像。
    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