对分割结果后处理的程序

import nibabel as nib
import numpy as np
import os
from skimage import measure
 
def file_name(file_dir):   
   L=[]   
   path_list = os.listdir(file_dir)
   path_list.sort() #对读取的路径进行排序
   for filename in path_list:
       if 'nii' in filename:
        	L.append(os.path.join(filename))   
   return L 
 
def Dice(y_true, y_pred):
    y_true = y_true
    y_pred = y_pred
    y_true_f = y_true.flatten()
    y_pred_f = y_pred.flatten()
    intersection = np.sum(y_true_f * y_pred_f)
    return (2. * intersection + 1) / (np.sum(y_true_f) + np.sum(y_pred_f) + 1)
 
maskpath = 'F:/dataset/PDDCA/nii111/finalpred/sbr/'
 
#imgnames = file_name(maskpath)
 
imgnames = file_name(maskpath)
gtnames = ''
prednames = ''
 
labels_num = np.zeros(len(prednames))
NUM=[]
P=[]
 
 
dice_y = np.zeros(len(prednames)) 
dice_p = np.zeros(len(prednames))    
for i in range(len(prednames)):
 
    pred = nib.load(maskpath + prednames[i])
    labels = pred.get_data()
    gt = nib.load(maskpath + gtnames[i])
    gtmask = gt.get_data()
    labelsy = np.copy(labels)
    
    labels = measure.label(labels, connectivity=2)
 
    max_num = 0
    for j in range(1, np.max(labels)+1):
        if np.sum(labels==j) > max_num:
            max_num = np.sum(labels==j)
            max_pixel = j
        print(np.sum(labels==j), np.sum(labels!=0))
        if np.sum(labels==j)>0.1*np.sum(labels!=0):
            labels[labels==j] = max_pixel
    
    labels[labels != max_pixel]=0
    labels[labels == max_pixel]=1
#    labels[labels>1]=0
    
    dice_y[i] = Dice(gtmask,labelsy)
    dice_p[i] = Dice(gtmask,labels)
    print(dice_y[i], dice_p[i])
    nib.save(nib.Nifti1Image( labels.astype('uint8'), affine=gt.affine), gtnames[i])

 

医学图像分割后,如何消除噪声,我采用了去除孤立点的方法。先找到分割结果中的所有连通域,保留最大连通域或者较大的几个连通域,把其余小连通域都去掉。图像是三维的,还蛮有效果的。

 

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值