利用 python/keras/tensorflow 计算 DICE系数,评估 3D 分割结果,只挑选特定层面

Paloma ·
更新时间:2024-09-21
· 594 次阅读

之前在文章:https://blog.csdn.net/Sweety_Lin/article/details/104199580 中写的DICE计算程序,是将Nii的整个volume计算在内,现想提取T2中有lesion的特定层面来计算DICE: import nibabel as nib import scipy.io as io import os import numpy as np import tensorflow as tf from keras import backend as K def dice_coefficient(y_true, y_pred, smooth=0.00001): y_true_f = K.flatten(y_true) y_pred_f = K.flatten(y_pred) intersection = K.sum(y_true_f * y_pred_f) return (2. * intersection + smooth) / (K.sum(y_true_f) + K.sum(y_pred_f) + smooth) pred_dir = '/home/share/20200207_precess_lactate/DICE_NEW/SELECT/Lac_mask' true_dir = '/home/share/20200207_precess_lactate/DICE_NEW/SELECT/T2_mask' pred_filenames = os.listdir(pred_dir) pred_filenames.sort(key=lambda x:x[:-2]) true_filenames = os.listdir(true_dir) true_filenames.sort(key=lambda x:x[:-8]) dice_value = np.zeros(18) temp = [] for f in range(18): pred_path = os.path.join(pred_dir, pred_filenames[f]) img_pred = nib.load(pred_path) y_pred = img_pred.get_fdata() true_path = os.path.join(true_dir, true_filenames[f]) img_true = nib.load(true_path) y_true = img_true.get_fdata() select = [] for slices in range(121): if np.sum(y_true[:, :, slices]) > 0: select.append(slices) pass pass temp.append(dice_coefficient(y_true[:, :, select], y_pred[:, :, select])) print(select) pass with tf.Session() as sess: dice_value = sess.run(temp) pass mat_path = '/home/share/20200207_precess_lactate/DICE_NEW/SELECT/DICE_Lac.mat' io.savemat(mat_path, {'DICE_value': dice_value})
作者:要奋斗的人儿~



dice tensorflow keras Python 3d

需要 登录 后方可回复, 如果你还没有账号请 注册新账号