amanbasu / 3d-prostate-segmentation

Segmentation of prostate from MRI scans
GNU General Public License v3.0
44 stars 13 forks source link

some confusion about metric_eval.py: hd(Hausdorff Distance)、asd(Average surface distance metric)、assd( Average symmetric surface distance) #9

Closed pangda72 closed 2 years ago

pangda72 commented 2 years ago

Hi,@amanbasu

Thank you for sharing such a great repo.I use metrics in the metric_eval.py to evaluate my own segmentation results.But I have some confusion about hd(Hausdorff Distance)、asd(Average surface distance metric)、assd( Average symmetric surface distance), could you give me some help ?

Q1:How do I determine the value of voxelspacing and the value of connectivity? I should use the default value(voxelapacing=None,connectivity=1) , Or the connectivity value needs to be greater than 1?And voxelapacing=(z_spacing,y_spacing,x_spacing )(the voxelspacing of my dataset is specified:(x,y,z)=(0.7031, 0.7031, 4))? #################################################################################### In the comments section below: connectivity : int The neighbourhood/connectivity considered when determining the surface of the binary objects. This value is passed to scipy.ndimage.morphology.generate_binary_structure and should usually be :math:> 1. Note that the connectivity influences the result in the case of the Hausdorff distance. ##################################################################################### I set the value of connectivity to 1 and 2, I get different hd value ..Could you give me some advice?

Q2: In your article, Could you tell me what Avg. Boundary Distance in Tabels 3 refer to in the metric_eval.py?I can't find this part of the code.Could you give me some help?

Q3:I read the comments on asd and obj_asd carefully, but I still don't understand what the difference is.Could you give me some guidance?

Q4:when i use asd() in the metric_eval.py,the results I got were a little strange.for example:testsets:40 case,I used metrics in the metric_eval.py to get dice =0.923±0.019,hd95=2.078±1.379,asd=0.545±0.138,I feel that asd value is a bit strange,it is too small, each case has a value less than 1.I don't know if asd value that i calculated is correct, could you give me some guidance? image

Thanks in advance. Looking forward your reply. Best.

amanbasu commented 2 years ago

Hey @pangda72, Let me address your queries.

Q1. We used the default implementation of the metrics. You can determine all the results using connectivity=1. It signifies how many nearest neighbors to consider while calculating the metrics.

Q2. We used assd for average boundary distance.

Q3. obj_asd first finds all objects in the image (individual, non-connected components), then averages the surface distance between each individual object. On the other hand, asd simply calculates the distance considering the whole image at once. You can use asd if you have just one object in the image.

Q4. Value looks okay to me. Great results.

pangda72 commented 2 years ago

Hey @pangda72, Let me address your queries.

Q1. We used the default implementation of the metrics. You can determine all the results using connectivity=1. It signifies how many nearest neighbors to consider while calculating the metrics.

Q2. We used assd for average boundary distance.

Q3. obj_asd first finds all objects in the image (individual, non-connected components), then averages the surface distance between each individual object. On the other hand, asd simply calculates the distance considering the whole image at once. You can use asd if you have just one object in the image.

Q4. Value looks okay to me. Great results.

Hi, @amanbasu

Thank you for your prompt reply and helping me out with my confusion.I feel very happy. At the same time,thank you for sharing such a great repo,I learned a lot from it.You're so nice . Hope you have a good day!

Best.

amanbasu commented 2 years ago

Thanks a lot @pangda72, Appreciate that! Hope you have a great day as well, and good luck for the project.