--- 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)