Image 计算3d图像的一阶、二阶、三阶导数

Image 计算3d图像的一阶、二阶、三阶导数,image,matlab,3d,derivative,Image,Matlab,3d,Derivative,实际上,我有一个问题,用matlab计算3d图像的一阶、二阶、三阶导数 我有60层dicom格式的膝关节mri,我想计算导数 对于2d图像,当我们想要计算x或y方向上的导数时,例如,我们使用sobel或x方向上的另一个操作符来计算x方向上的导数 但在我有60个dicom格式切片的3d图像中,如何计算x、y、z方向的一阶、二阶和三阶导数。 对于一阶导数,我实现如下: F是包含所有切片的3d矩阵。[k,l,m]=尺寸(F) 但我认为这不是真的。请帮帮我,我真的需要你的答案 我们如何计算x,y,z方向

实际上,我有一个问题,用matlab计算3d图像的一阶、二阶、三阶导数

我有60层dicom格式的膝关节mri,我想计算导数

对于2d图像,当我们想要计算x或y方向上的导数时,例如,我们使用sobel或x方向上的另一个操作符来计算x方向上的导数

但在我有60个dicom格式切片的3d图像中,如何计算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;
高维中的“一阶导数”称为梯度向量。数值近似梯度的公式很多,其中一种最精确的方法在Leclaire et al.最近的一篇论文中讨论:“二维和三维各向同性离散梯度算子的高阶空间推广,在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

“三阶导数”将是一个秩3张量,并且将有更多的分量。公式很长,可以通过考虑F的泰勒级数展开式导出,直到三阶

有一个函数!查找,其中有选项指示渐变计算的类型:默认为sobel

如果你喜欢方向梯度,考虑使用,它具有相同的可用选项,但返回方向梯度Gx,Gy和Gz。

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

请注意,这些函数是在R2016a中引入的。

您的代码适用于一阶导数。重复一遍?二阶导数->导数的导数梯度,太棒了,非常感谢,我可以用高斯滤波器代替一些预定义的滤波器,比如sobel吗?如果我使用ix而不是原始图像,ixx将在输出中?如果你想对图像进行高斯模糊,你也可以用高斯核对其进行预滤波。根据你对ix和ixx的定义,我认为对导数图像进行导数应该得到二阶导数。