--- a +++ b/BraTs18Challege/Vnet/util.py @@ -0,0 +1,148 @@ +from __future__ import print_function, division +import SimpleITK as sitk +import numpy as np +import cv2 +import os +from glob import glob + + +def load_itk(filename): + """ + load mhd files and normalization 0-255 + :param filename: + :return: + """ + rescalFilt = sitk.RescaleIntensityImageFilter() + rescalFilt.SetOutputMaximum(255) + rescalFilt.SetOutputMinimum(0) + # Reads the image using SimpleITK + itkimage = rescalFilt.Execute(sitk.Cast(sitk.ReadImage(filename), sitk.sitkFloat32)) + return itkimage + + +def removesmallConnectedCompont(sitk_maskimg, rate=0.5): + cc = sitk.ConnectedComponent(sitk_maskimg) + stats = sitk.LabelIntensityStatisticsImageFilter() + stats.Execute(cc, sitk_maskimg) + maxlabel = 0 + maxsize = 0 + for l in stats.GetLabels(): + size = stats.GetPhysicalSize(l) + if maxsize < size: + maxlabel = l + maxsize = size + + not_remove = [] + for l in stats.GetLabels(): + size = stats.GetPhysicalSize(l) + if size > maxsize * rate: + not_remove.append(l) + labelmaskimage = sitk.GetArrayFromImage(cc) + outmask = labelmaskimage.copy() + outmask[labelmaskimage != maxlabel] = 0 + for i in range(len(not_remove)): + outmask[labelmaskimage == not_remove[i]] = 255 + return outmask + + +def getLargestConnectedCompont(sitk_maskimg): + cc = sitk.ConnectedComponent(sitk_maskimg) + stats = sitk.LabelIntensityStatisticsImageFilter() + stats.Execute(cc, sitk_maskimg) + maxlabel = 0 + maxsize = 0 + for l in stats.GetLabels(): + size = stats.GetPhysicalSize(l) + if maxsize < size: + maxlabel = l + maxsize = size + + labelmaskimage = sitk.GetArrayFromImage(cc) + outmask = labelmaskimage.copy() + outmask[labelmaskimage == maxlabel] = 255 + outmask[labelmaskimage != maxlabel] = 0 + return outmask + + +def morphologicaloperation(sitk_maskimg, kernelsize, name='open'): + if name == 'open': + morphoimage = sitk.BinaryMorphologicalOpening(sitk_maskimg, [kernelsize, kernelsize, kernelsize]) + labelmaskimage = sitk.GetArrayFromImage(morphoimage) + outmask = labelmaskimage.copy() + outmask[labelmaskimage == 1.0] = 255 + return outmask + if name == 'close': + morphoimage = sitk.BinaryMorphologicalClosing(sitk_maskimg, [kernelsize, kernelsize, kernelsize]) + labelmaskimage = sitk.GetArrayFromImage(morphoimage) + outmask = labelmaskimage.copy() + outmask[labelmaskimage == 1.0] = 255 + return outmask + if name == 'dilate': + morphoimage = sitk.BinaryDilate(sitk_maskimg, [kernelsize, kernelsize, kernelsize]) + labelmaskimage = sitk.GetArrayFromImage(morphoimage) + outmask = labelmaskimage.copy() + outmask[labelmaskimage == 1.0] = 255 + return outmask + if name == 'erode': + morphoimage = sitk.BinaryErode(sitk_maskimg, [kernelsize, kernelsize, kernelsize]) + labelmaskimage = sitk.GetArrayFromImage(morphoimage) + outmask = labelmaskimage.copy() + outmask[labelmaskimage == 1.0] = 255 + return outmask + + +def gettestiamge(): + src = load_itk("D:\Data\LIST\LITS-Challenge-Test-Data\\test-volume-" + str(51) + ".nii") + srcimg = sitk.GetArrayFromImage(src) + for i in range(np.shape(srcimg)[0]): + image = srcimg[i] + image = np.clip(image, 0, 255).astype('uint8') + cv2.imwrite("D:\Data\LIST\LITS-Challenge-Test-Data\\" + str(51) + "\\" + str(i) + ".bmp", image) + + +def getmaxsizeimage(): + srcpath = "D:\Data\LIST\LITS-Challenge-Test-Data\\test-volume-" + str(38) + ".nii" + maskpath = "D:\Data\LIST\\test\PredictMask\\38" + + src = load_itk(srcpath) + srcimg = sitk.GetArrayFromImage(src) + + maskimage = np.empty(shape=np.shape(srcimg), dtype=np.uint8) + index = 0 + for _ in os.listdir(maskpath): + masktmp = cv2.imread(maskpath + "/" + str(index) + ".bmp", cv2.IMREAD_GRAYSCALE) + maskimage[index, :, :] = masktmp + index += 1 + + sitk_maskimg = sitk.GetImageFromArray(maskimage) + origin = np.array(src.GetOrigin()) + # Read the spacing along each dimension + spacing = np.array(src.GetSpacing()) + sitk_maskimg.SetSpacing(spacing) + sitk_maskimg.SetOrigin(origin) + maskimage = getLargestConnectedCompont(sitk_maskimg) + for i in range(np.shape(maskimage)[0]): + image = maskimage[i] + image = np.clip(image, 0, 255).astype('uint8') + cv2.imwrite("D:\Data\LIST\\test\PredictMask\\38_1\\" + str(i) + ".bmp", image) + + +def save_npy2csv(path, name, labelnum=1): + """ + this is for classify + :param path: + :param name:file name + :param labelnum:classify label + :param label: + :return: + """ + out = open(name, 'w') + file_list = glob(path + "*.npy") + out.writelines("index" + "," + "filename" + "\n") + for index in range(len(file_list)): + out.writelines(str(labelnum) + "," + file_list[index] + "\n") + + +# gettestiamge() +# getmaxsizeimage() +# save_npy2csv("G:\Data\LIDC\LUNA16\classsification\\1_aug\\", "nodel_positive.csv", 1)