真的,我有一个问题,用matlab计算三维图像上的一阶、二次、三阶导数。
我有60片膝关节mri的dicom格式,我想计算导数。
对于2d图像,当我们要计算x方向或y方向上的导数时,例如我们在x方向上使用sobel或另一个算子来计算x方向上的导数。
但是在我有60片dicom格式的3d图像中,如何计算x,y,z方向上的一、二和三阶导数。我像这样为一阶导数实现:
F是包含所有切片的3d矩阵。k,l,m=大小(F);
但我认为这不是真的.please帮助我,真的我需要你的答案。
我们如何计算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;发布于 2016-03-21 15:02:44
这是有功能的!查找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中引入的。
发布于 2016-03-21 13:39:53
高维中的“一阶导数”称为梯度向量。数值逼近梯度的公式有很多,最近的一篇文章讨论了最精确的方法之一:“二维和三维各向同性离散梯度算子的高阶空间推广和GPU上的快速评估”。
多维的高阶导数是张量。特别是“二阶导数”是一个秩-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“三阶导数”将是三级张量,并且将包含更多的分量。这些公式是宽松的,可以通过考虑F到3阶的Taylor级数展开来导出。
https://stackoverflow.com/questions/36128748
复制相似问题