Switch to unified view

a b/BraTs18Challege/Vnet/util.py
1
from __future__ import print_function, division
2
import SimpleITK as sitk
3
import numpy as np
4
import cv2
5
import os
6
from glob import glob
7
8
9
def load_itk(filename):
10
    """
11
    load mhd files and normalization 0-255
12
    :param filename:
13
    :return:
14
    """
15
    rescalFilt = sitk.RescaleIntensityImageFilter()
16
    rescalFilt.SetOutputMaximum(255)
17
    rescalFilt.SetOutputMinimum(0)
18
    # Reads the image using SimpleITK
19
    itkimage = rescalFilt.Execute(sitk.Cast(sitk.ReadImage(filename), sitk.sitkFloat32))
20
    return itkimage
21
22
23
def removesmallConnectedCompont(sitk_maskimg, rate=0.5):
24
    cc = sitk.ConnectedComponent(sitk_maskimg)
25
    stats = sitk.LabelIntensityStatisticsImageFilter()
26
    stats.Execute(cc, sitk_maskimg)
27
    maxlabel = 0
28
    maxsize = 0
29
    for l in stats.GetLabels():
30
        size = stats.GetPhysicalSize(l)
31
        if maxsize < size:
32
            maxlabel = l
33
            maxsize = size
34
35
    not_remove = []
36
    for l in stats.GetLabels():
37
        size = stats.GetPhysicalSize(l)
38
        if size > maxsize * rate:
39
            not_remove.append(l)
40
    labelmaskimage = sitk.GetArrayFromImage(cc)
41
    outmask = labelmaskimage.copy()
42
    outmask[labelmaskimage != maxlabel] = 0
43
    for i in range(len(not_remove)):
44
        outmask[labelmaskimage == not_remove[i]] = 255
45
    return outmask
46
47
48
def getLargestConnectedCompont(sitk_maskimg):
49
    cc = sitk.ConnectedComponent(sitk_maskimg)
50
    stats = sitk.LabelIntensityStatisticsImageFilter()
51
    stats.Execute(cc, sitk_maskimg)
52
    maxlabel = 0
53
    maxsize = 0
54
    for l in stats.GetLabels():
55
        size = stats.GetPhysicalSize(l)
56
        if maxsize < size:
57
            maxlabel = l
58
            maxsize = size
59
60
    labelmaskimage = sitk.GetArrayFromImage(cc)
61
    outmask = labelmaskimage.copy()
62
    outmask[labelmaskimage == maxlabel] = 255
63
    outmask[labelmaskimage != maxlabel] = 0
64
    return outmask
65
66
67
def morphologicaloperation(sitk_maskimg, kernelsize, name='open'):
68
    if name == 'open':
69
        morphoimage = sitk.BinaryMorphologicalOpening(sitk_maskimg, [kernelsize, kernelsize, kernelsize])
70
        labelmaskimage = sitk.GetArrayFromImage(morphoimage)
71
        outmask = labelmaskimage.copy()
72
        outmask[labelmaskimage == 1.0] = 255
73
        return outmask
74
    if name == 'close':
75
        morphoimage = sitk.BinaryMorphologicalClosing(sitk_maskimg, [kernelsize, kernelsize, kernelsize])
76
        labelmaskimage = sitk.GetArrayFromImage(morphoimage)
77
        outmask = labelmaskimage.copy()
78
        outmask[labelmaskimage == 1.0] = 255
79
        return outmask
80
    if name == 'dilate':
81
        morphoimage = sitk.BinaryDilate(sitk_maskimg, [kernelsize, kernelsize, kernelsize])
82
        labelmaskimage = sitk.GetArrayFromImage(morphoimage)
83
        outmask = labelmaskimage.copy()
84
        outmask[labelmaskimage == 1.0] = 255
85
        return outmask
86
    if name == 'erode':
87
        morphoimage = sitk.BinaryErode(sitk_maskimg, [kernelsize, kernelsize, kernelsize])
88
        labelmaskimage = sitk.GetArrayFromImage(morphoimage)
89
        outmask = labelmaskimage.copy()
90
        outmask[labelmaskimage == 1.0] = 255
91
        return outmask
92
93
94
def gettestiamge():
95
    src = load_itk("D:\Data\LIST\LITS-Challenge-Test-Data\\test-volume-" + str(51) + ".nii")
96
    srcimg = sitk.GetArrayFromImage(src)
97
    for i in range(np.shape(srcimg)[0]):
98
        image = srcimg[i]
99
        image = np.clip(image, 0, 255).astype('uint8')
100
        cv2.imwrite("D:\Data\LIST\LITS-Challenge-Test-Data\\" + str(51) + "\\" + str(i) + ".bmp", image)
101
102
103
def getmaxsizeimage():
104
    srcpath = "D:\Data\LIST\LITS-Challenge-Test-Data\\test-volume-" + str(38) + ".nii"
105
    maskpath = "D:\Data\LIST\\test\PredictMask\\38"
106
107
    src = load_itk(srcpath)
108
    srcimg = sitk.GetArrayFromImage(src)
109
110
    maskimage = np.empty(shape=np.shape(srcimg), dtype=np.uint8)
111
    index = 0
112
    for _ in os.listdir(maskpath):
113
        masktmp = cv2.imread(maskpath + "/" + str(index) + ".bmp", cv2.IMREAD_GRAYSCALE)
114
        maskimage[index, :, :] = masktmp
115
        index += 1
116
117
    sitk_maskimg = sitk.GetImageFromArray(maskimage)
118
    origin = np.array(src.GetOrigin())
119
    # Read the spacing along each dimension
120
    spacing = np.array(src.GetSpacing())
121
    sitk_maskimg.SetSpacing(spacing)
122
    sitk_maskimg.SetOrigin(origin)
123
    maskimage = getLargestConnectedCompont(sitk_maskimg)
124
    for i in range(np.shape(maskimage)[0]):
125
        image = maskimage[i]
126
        image = np.clip(image, 0, 255).astype('uint8')
127
        cv2.imwrite("D:\Data\LIST\\test\PredictMask\\38_1\\" + str(i) + ".bmp", image)
128
129
130
def save_npy2csv(path, name, labelnum=1):
131
    """
132
    this is for classify
133
    :param path:
134
    :param name:file name
135
    :param labelnum:classify label
136
    :param label:
137
    :return:
138
    """
139
    out = open(name, 'w')
140
    file_list = glob(path + "*.npy")
141
    out.writelines("index" + "," + "filename" + "\n")
142
    for index in range(len(file_list)):
143
        out.writelines(str(labelnum) + "," + file_list[index] + "\n")
144
145
146
# gettestiamge()
147
# getmaxsizeimage()
148
# save_npy2csv("G:\Data\LIDC\LUNA16\classsification\\1_aug\\", "nodel_positive.csv", 1)