moralesq / DeepStrain

A Deep Learning Workflow for the Automated Characterization of Cardiac Mechanics
MIT License
32 stars 8 forks source link

Questions regarding ACDC notebook global end-systolic strain calculation & AHA 17-segment polar map #7

Closed Voldemort108X closed 1 year ago

Voldemort108X commented 1 year ago

Hi Manuel,

Hope you are doing well! I have two quick questions regarding the ACDC example about global end-systolic strain (ESS) calculation. It seems that an end-diastolic mask is used to get the global average value inside the myocardium for both radial and circumferential strains. I am wondering why an end-systolic mask is not used in this case.

strain = myocardial_strain.MyocardialStrain(mask=mask_end_diastole, flow=y_t[0,:,:,:,:])
...
df['RadialStain']           += [100*strain.Err[strain.mask_rot==2].mean()]  

In addition, from the utils/myocardial_strain.py, function construct_polar_map(), a partial strain tensor with start=30, and stop=70 is used to get the initial average values for AHA 17 segments calculation. I am wondering why not use the entire strain tensor?

def construct_polar_map(self, tensor, start=30, stop=70, sigma=12):

        E  = tensor.copy()
        mu = E[:,:,start:stop].mean()

        nz = E.shape[0]
        E  = np.concatenate(np.array_split(E[:,:,start:stop], nz), axis=-1)[0]
        ...

Thanks very much for your time in advance.

Best, Xiaoran

moralesq commented 1 year ago

Hi, sorry for the late response.

To your first question. The model was trained using [V(t=0), V(t>=0)] pairs, which means the output is the displacement form end-diastole to a contracted phase. When we compute strain, we measure the displacement at each end-diastolic position. If the vectors are accurate, they should be joining the end-diastolic and contracted (e.g., systolic) points. Thus, we only need the end-diastolic mask.

To you second question. This is a matter of implementation. Note that from start to stop we basically have a radial profile/projection of the strain. The edges of this profile are close to zero, and the inner values a higher. This is not a problem. However, if you want to concatenate/join multiple slices, you end up with a white line separating the slices. In this case, the AHA plot would show a white line separating basal/mid/apical sections. You can fix this by smoothing prior to building the map, but the lower edge values would bring the overall mean down. Thus, I found 30:70 to be a compromised.

Hope this helps.

Manuel

Voldemort108X commented 1 year ago

Hi Manuel,

Thanks so much for your very detailed reply! This is very helpful. For the first point, I now get the idea that following the convention of deformation gradient, ED here is the reference and ES is the moving since the estimated displacement vector is pointing from ED to ES (if we only consider two frames).

I really like this paper btw. The experiments are very detailed and thorough. I think people doing cardiac motion analysis should pay more attention to this article.

Best, Xiaoran