计算三维图像上的第一,第二,第三导数

时间:2016-03-21 10:36:41

标签: image matlab 3d derivative

我真的有问题用matlab计算3d图像上的第一,第二,第三衍生物。

我有60片dicom格式的膝盖mri,我想计算衍生物。

当我们想要在x或y方向上计算导数时,对于2d图像

,例如我们在x方向上使用sobel或其他算子来计算x方向上的导数。

但在3d图像中我有60片dicom格式,我如何计算x,y,z方向上的一阶,二阶和三阶导数。 我实现这样的一阶导数:

F是具有所有切片的3d矩阵。 [k,l,m] =大小(F);

但我认为这不是真的。请帮助我,我真的需要你的答案。

我们如何计算x,y,z方向上的一阶,二阶,三阶导数。?

案例'x'

D(1,:,:) = (F(2,:,:) - F(1,:,:));
D(k,:,:) = (F(k,:,:) - F(k-1,:,:));
D(2:k-1,:,:) = (F(3:k,:,:)-F(1:k-2,:,:))/2;

案例'y'

D(:,1,:) = (F(:,2,:) - F(:,1,:));
D(:,l,:) = (F(:,l,:) - F(:,l-1,:));
D(:,2:l-1,:) = (F(:,3:l,:)-F(:,1:l-2,:))/2;

案例'z'

D(:,:,1) = (F(:,:,2) - F(:,:,1));
D(:,:,m) = (F(:,:,m) - F(:,:,m-1));
D(:,:,2:m-1) = (F(:,:,3:m)-F(:,:,1:m-2))/2;

2 个答案:

答案 0 :(得分:0)

更高维度的“一阶导数”称为梯度向量。有许多公式可以在数值上逼近梯度,最近的一篇论文中讨论了一种最精确的方法:Leclaire等人的“对GPU进行快速评估的2D和3D各向同性离散梯度算子的高阶空间推广”

多维度中的高阶导数是张量。 “二阶导数”特别是秩-2张量,有6个独立分量,其中最低阶逼近

Dxx(x,y,z) = (F(x+1,y,z) - 2*F(x,y,z) + F(x-1,y,z))/2
Dyy(x,y,z) = (F(x,y+1,z) - 2*F(x,y,z) + F(x,y-1,z))/2
Dzz(x,y,z) = (F(x,y,z+1) - 2*F(x,y,z) + F(x,y,z-1))/2
Dxy(x,y,z) = (F(x+1,y+1,z) - F(x+1,y-1,z) - F(x-1,y+1,z) + F(x-1,y-1,z))/4
Dxz(x,y,z) = (F(x+1,y,z+1) - F(x+1,y,z-1) - F(x-1,y,z+1) + F(x-1,y,z-1))/4
Dyz(x,y,z) = (F(x,y+1,z+1) - F(x,y+1,z-1) - F(x,y-1,z+1) + F(x,y-1,z-1))/4

“三阶导数”将是一个等级3张量,并将有更多的组件。公式是长度的,并且可以通过考虑F的泰勒级数展开直到第三级来推导出公式

答案 1 :(得分:0)

有一个功能!查找https://www.mathworks.com/help/images/ref/imgradient3.html,其中有选项可指示梯度计算的类型:sobel是默认值。

如果您想要方向渐变,请考虑使用https://www.mathworks.com/help/images/ref/imgradientxyz.html,它具有相同的可用选项,但会返回方向渐变Gx,Gy和Gz。

volData = load('mri');
sz = volData.siz;
vol = squeeze(volData.D);
[Gx, Gy, Gz] = imgradientxyz(vol);

请注意,这些功能是在R2016a中引入的。