将非各向同性体素转换为各向同性体素

4
我正在尝试注册两个脑图像体积(每个包括2D切片)。第一个体积(目标或移动体积)具有1.5的切片厚度和[1.5 1.5]的间距。对于第二个体积(参考体积),这些值分别为4和[0.9375 0.9375]。此外,切片数量也不同。第一个体积有96个切片,而第二个体积有44个切片。
我的一位朋友建议使体素各向同性,但我不知道该如何做到。我可以看到第一个体积是各向同性的,但第二个体积不是。我想知道我应该如何做到这一点?
此外,我将考虑每个体积的两个切片,并在其上应用特征提取方法。因此,这两个切片都应与大脑的同一层(相同场景)相关。考虑到切片数量的不同,我该怎么做?如何重新计算第一个体积的新切片,使其与第二个体积相同?

2
imresize是你的好朋友。 - Ander Biguri
你是指“imrsize”函数吗?但据我所知,imresize仅适用于2D图像。此外,它不考虑切片厚度。 - sara_123
2
你只需要在几个for循环中调整XY到XZ的大小。你只需要调整许多二维图像的大小。 - Ander Biguri
4
interp3也可以解决这个问题。 - A. Donda
1个回答

2

如果我正确理解您的问题,那么您想要对具有给定大小的体素的图像堆栈进行插值,以便您定义一个新的坐标系统,其中每个体素是各向同性的(即具有相等的高度、宽度和深度,即立方体体素)。如果是这样,可以使用以下方法:

(我将使用Matlab提供的MRI数据作为示例)

load mri D
D=double(squeeze(D));   % remove singleton dimension, convert to double
szD_a=size(D);          % get size of original image stack
vox_a = [.4, .4, .45];  % define size of voxel in original image stack
vox_b = [.25, .25, .25];% define size of voxel in target image stack
szD_b = ceil((size(D)-1).*vox_a./vox_b)+1; % set size of target image stack

% define coordinates of voxels in original image stack
[Xa,Ya,Za]=meshgrid(...
    [0:szD_a(1)-1]*vox_a(1),...
    [0:szD_a(2)-1].*vox_a(2),...
    [0:szD_a(3)-1].*vox_a(3));

% define coordinates of voxels in original image stack
[Xb,Yb,Zb]=meshgrid(...
    [0:szD_b(1)-1]*vox_b(1),...
    [0:szD_b(2)-1].*vox_b(2),...
    [0:szD_b(3)-1].*vox_b(3));

D_target = interp3(Xa,Ya,Za,D,Xb,Yb,Zb);

figure
for t=0:vox_b(3):max(Zb(:))
    subplot(1,2,1)
    imagesc(D(:,:,floor(t/vox_a(3))+1))
    subplot(1,2,2)
    imagesc(D_target(:,:,floor(t/vox_b(3))+1))
    drawnow
    pause(0.1)
end

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