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