Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 将非各向同性体素转换为各向同性体素_Matlab_Image Processing_3d_Image Registration - Fatal编程技术网

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

Matlab 将非各向同性体素转换为各向同性体素,matlab,image-processing,3d,image-registration,Matlab,Image Processing,3d,Image Registration,我正在尝试注册两个大脑图像卷(每个都包括2D切片)。第一个体积(目标或移动体积)的切片厚度和间距分别为1.5和[1.5 1.5]。对于第二个(参考体积),这些值分别为4和[0.9375 0.9375]。而且切片的数量也不同。第一卷有96个切片,第二卷有44个切片 我的一个朋友建议让体素各向同性,但我不知道怎么做。我可以看到第一个体积是各向同性的,但第二个不是。我想知道我该怎么做 此外,我将考虑每个卷的两个切片,并在其上应用特征提取方法。因此,这两个切片应该与大脑的同一层有关(同一场景)。考虑到不

我正在尝试注册两个大脑图像卷(每个都包括2D切片)。第一个体积(目标或移动体积)的切片厚度和间距分别为1.5和[1.5 1.5]。对于第二个(参考体积),这些值分别为4和[0.9375 0.9375]。而且切片的数量也不同。第一卷有96个切片,第二卷有44个切片

我的一个朋友建议让体素各向同性,但我不知道怎么做。我可以看到第一个体积是各向同性的,但第二个不是。我想知道我该怎么做


此外,我将考虑每个卷的两个切片,并在其上应用特征提取方法。因此,这两个切片应该与大脑的同一层有关(同一场景)。考虑到不同的切片数量,我应该做什么,以及如何重新计算第一卷的新切片,使其与第二卷相同?

如果我正确理解您的问题,这听起来像是你想用给定大小的体素对图像堆栈进行插值,以便定义一个新的坐标系,其中每个体素都是各向同性的(即具有相同的高度、宽度和深度,即立方体素)。如果是这样,政府可否提供帮助:

(我以matlabs提供的mri数据为例)


imresize
是你的朋友吗?你的意思是“imrsize”功能吗?但据我所知,imresize适用于二维图像。此外,它不考虑切片厚度。只是调整XY-XZ大小在几个for循环中。您只需要调整大量2D图像的大小。
interp3
也应该可以做到这一点。
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