Search code examples
imagematlab3dderivative

calculate first,second,third derivative on 3d image


really i have a problem to calculate first , second , third derivative on 3d image with matlab.

i have 60 slice of dicom format of knee mri , and i wanna calculate derivative .

for 2d image when we want to calculate derivative on x or y direction ,for example we use sobel or another operator in x direction for calculate derivative on x direction .

but in 3d image that i have 60 slices of dicom format , how can i calculate first, second ,and third derivative on x ,y,z directions . i implement like this for first derivative :

F is 3d matrix that has all slices. [k,l,m] = size(F);

but i think it's not true .please help me , really i need your answers .

how can we calculate first, second, third derivative on x ,y ,z directions .?

case '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;

case '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;

case '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;

Solution

  • There is a function for that! Look up https://www.mathworks.com/help/images/ref/imgradient3.html, where there are options to indicate the kind of gradient computation: sobel is the default.

    If you'd like directional gradients, consider using https://www.mathworks.com/help/images/ref/imgradientxyz.html, which has the same options available, but returns the directional gradients Gx, Gy and Gz.

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

    Note that these functions were introduced in R2016a.