Example #1
0
def get_mixup(x_candidate, x_candidate_label, alpha):
    if alpha == 0:
        return x_candidate, x_candidate_label
    if alpha > 0:
        x_mixup = np.zeros(np.shape(x_candidate))
        y_mixup = np.zeros(np.shape(x_candidate_label), 'float')
        length = len(x_candidate)
        lam = np.random.beta(alpha, alpha, length)
        indexs = np.random.randint(0, length, length)
        for i in range(length):
            x_mixup[i] = x_candidate[i]*lam[i]+(1-lam[i])*x_candidate[indexs[i]]
            y_mixup[i] = x_candidate_label[i]*lam[i]+(1-lam[i])*x_candidate_label[indexs[i]]
        return x_mixup, y_mixup
Example #2
0
def get_test_dataset():
    x_return_test = np.zeros((117, size, size, size))
    x_name_test = pd.read_csv("test.csv")['Id']
    filenum = 0
    for i in range(117):
        x_file_temp = os.path.join(x_test_path, x_name_test[i] + '.npz')
        x_voxel = np.array(np.load(x_file_temp)['voxel'])
        x_seg = np.array(np.load(x_file_temp)['seg'])
        x_temp = x_voxel * x_seg * 0.8 + x_voxel * 0.2
        s = x_seg * x_voxel
        sign = np.array(np.nonzero(s))
        min1, low1, len1 = get_rec(sign, 0)
        min2, low2, len2 = get_rec(sign, 1)
        min3, low3, len3 = get_rec(sign, 2)
        i_temp = 0
        for i in range(low1, low1+len1):
            j_temp = 0
            for j in range(low2, low2+len2):
                k_temp = 0
                for k in range(low3, low3+len3):
                    x_return_test[filenum, i, j, k] = x_temp[min1 + i_temp, min2 + j_temp, min3 + k_temp]
                    k_temp += 1
                j_temp += 1
            i_temp += 1
        filenum += 1
    return  x_return_test
Example #3
0
def data_augmentation(x, y, index):
    x_lr = x_ud = x_r1 = x_r2 = x_r3 = x_r4 = x_r5 = x_r6 = x_m1 = x_m2 = x_m3 = x_m4 = np.zeros(
        np.shape(x))
    y_m1 = y_m2 = y_m3 = y_m4 = np.zeros(np.shape(y), 'float')

    l1 = np.random.beta(0.1, 0.1, len(x))
    l2 = np.random.beta(0.15, 0.15, len(x))
    l3 = np.random.beta(0.2, 0.2, len(x))
    l4 = np.random.beta(0.25, 0.25, len(x))
    randi = np.random.randint(0, len(x), len(x))
    for ii in range(x.shape[0]):
        x_lr[ii, :, :, :] = np.fliplr(x[ii, :, :, :])
        x_ud[ii, :, :, :] = np.flipud(x[ii, :, :, :])
        x_r1[ii, :, :, :] = np.rot90(x[ii, :, :, :], 1, (0, 1))
        x_r2[ii, :, :, :] = np.rot90(x[ii, :, :, :], 1, (0, 2))
        x_r3[ii, :, :, :] = np.rot90(x[ii, :, :, :], 1, (1, 2))
        x_r4[ii, :, :, :] = np.rot90(x[ii, :, :, :], 3, (0, 1))
        x_r5[ii, :, :, :] = np.rot90(x[ii, :, :, :], 3, (0, 2))
        x_r6[ii, :, :, :] = np.rot90(x[ii, :, :, :], 3, (1, 2))
        x_m1[ii] = x[ii] * l1[ii] + (1 - l1[ii]) * x[randi[ii]]
        y_m1[ii] = y[ii] * l1[ii] + (1 - l1[ii]) * y[randi[ii]]
        x_m2[ii] = x[ii] * l2[ii] + (1 - l2[ii]) * x[randi[ii]]
        y_m2[ii] = y[ii] * l2[ii] + (1 - l2[ii]) * y[randi[ii]]
        x_m3[ii] = x[ii] * l3[ii] + (1 - l3[ii]) * x[randi[ii]]
        y_m3[ii] = y[ii] * l3[ii] + (1 - l3[ii]) * y[randi[ii]]
        x_m4[ii] = x[ii] * l4[ii] + (1 - l4[ii]) * x[randi[ii]]
        y_m4[ii] = y[ii] * l4[ii] + (1 - l4[ii]) * y[randi[ii]]
    x_train = np.r_[x, x_lr, x_ud, x_r1, x_r2, x_m1, x_m2, x_m3, x_m4]
    y_train = np.r_[y, y, y, y, y, y_m1, y_m2, y_m3, y_m4]
    x_test = np.r_[x, x_lr, x_ud, x_r1, x_r2, x_r3, x_r4, x_r5, x_r6]
    y_test = np.r_[y, y, y, y, y, y, y, y, y]
    if index == 0:
        return x_train, y_train
    else:
        return x_test, y_test
Example #4
0
def load_testdata():
    x_return = np.zeros((117, size, size, size))
    x_name = pd.read_csv("sampleSubmission.csv")[
        'Id']  # 此处[' ']内填写的是sampleSubmission.csv内的第一列表头
    filenum = 0
    for i in range(117):
        x_file_temp = os.path.join(x_test_path, x_name[i] + '.npz')
        x_voxel = np.array(np.load(x_file_temp)['voxel'])
        x_mask = np.array(np.load(x_file_temp)['seg'])
        x_temp = x_voxel * x_mask * 0.8 + x_voxel * 0.2
        list_xx_test = x_voxel * x_mask
        list_xx_nz_test = np.array(np.nonzero(list_xx_test))
        coor1min = list_xx_nz_test[0, :].min()
        coor1max = list_xx_nz_test[0, :].max()
        coor1len = coor1max - coor1min + 1
        coor1bigger = coor1len - size
        if coor1bigger > 0:
            coor1min += coor1bigger // 2
            coor1max -= coor1bigger - coor1bigger // 2
            coor1len = size
        coor1low = (size // 2) - (coor1len // 2)
        coor1high = coor1low + coor1len
        coor2min = list_xx_nz_test[1, :].min()
        coor2max = list_xx_nz_test[1, :].max()
        coor2len = coor2max - coor2min + 1
        coor2bigger = coor2len - size
        if coor2bigger > 0:
            coor2min += coor2bigger // 2
            coor2max -= coor2bigger - coor2bigger // 2
            coor2len = size
        coor2low = (size // 2) - (coor2len // 2)
        coor2high = coor2low + coor2len
        coor3min = list_xx_nz_test[2, :].min()
        coor3max = list_xx_nz_test[2, :].max()
        coor3len = coor3max - coor3min + 1
        coor3bigger = coor3len - size
        if coor3bigger > 0:
            coor1min += coor3bigger // 2
            coor3max -= coor3bigger - coor3bigger // 2
            coor3len = size
        coor3low = (size // 2) - (coor3len // 2)
        coor3high = coor3low + coor3len
        # print(file, coor1low, coor1high, coor2low, coor2high, coor3low, coor3high)
        coorlist1 = 0
        for coor1 in range(coor1low, coor1high):
            coorlist2 = 0
            for coor2 in range(coor2low, coor2high):
                coorlist3 = 0
                for coor3 in range(coor3low, coor3high):
                    x_return[filenum, coor1, coor2,
                             coor3] = x_temp[coor1min + coorlist1,
                                             coor2min + coorlist2,
                                             coor3min + coorlist3]
                    coorlist3 += 1
                coorlist2 += 1
            coorlist1 += 1
        filenum += 1
    return x_return
Example #5
0
def load_traindata():
    x_return = np.zeros((495, size, size, size))
    x_name = pd.read_csv("train_val.csv")[
        'Id']  # 此处[' ']内填写的是train_val.csv内的第一列表头
    count_file = 0
    for i in range(len(traindata_list)):
        x_file_temp = os.path.join(traindata_path, x_name[i] + '.npz')
        x_voxel = np.array(np.load(x_file_temp)['voxel'])
        x_mask = np.array(np.load(x_file_temp)['seg'])
        x_temp = x_voxel * x_mask * 0.8 + x_voxel * 0.2

        list_xx = x_mask * x_voxel
        list_xx_nz = np.array(np.nonzero(list_xx))
        coor1min = list_xx_nz[0, :].min()
        coor1max = list_xx_nz[0, :].max()
        coor1len = coor1max - coor1min + 1
        coor1bigger = coor1len - size
        if coor1bigger > 0:
            coor1min += coor1bigger // 2
            coor1max -= coor1bigger - coor1bigger // 2
            coor1len = size
        coor1low = (size // 2) - (coor1len // 2)
        coor1high = coor1low + coor1len
        coor2min = list_xx_nz[1, :].min()
        coor2max = list_xx_nz[1, :].max()
        coor2len = coor2max - coor2min + 1
        coor2bigger = coor2len - size
        if coor2bigger > 0:
            coor2min += coor2bigger // 2
            coor2max -= coor2bigger - coor2bigger // 2
            coor2len = size
        coor2low = (size // 2) - (coor2len // 2)
        coor2high = coor2low + coor2len
        coor3min = list_xx_nz[2, :].min()
        coor3max = list_xx_nz[2, :].max()
        coor3len = coor3max - coor3min + 1
        coor3bigger = coor3len - size
        if coor3bigger > 0:
            coor1min += coor3bigger // 2
            coor3max -= coor3bigger - coor3bigger // 2
            coor3len = size
        coor3low = (size // 2) - (coor3len // 2)
        coor3high = coor3low + coor3len
        coorlist1 = 0
        for coor1 in range(coor1low, coor1high):
            coorlist2 = 0
            for coor2 in range(coor2low, coor2high):
                coorlist3 = 0
                for coor3 in range(coor3low, coor3high):
                    x_return[count_file, coor1, coor2,
                             coor3] = x_temp[coor1min + coorlist1,
                                             coor2min + coorlist2,
                                             coor3min + coorlist3]
                    coorlist3 += 1
                coorlist2 += 1
            coorlist1 += 1
        count_file += 1
    return x_return
Example #6
0
    def scaling(self, img, index, resize=False):

        img = img.convert('RGB')
        im = np.array(img)
        red = im[:, :, 0]
        green = im[:, :, 1]
        blue = im[:, :, 2]

        width, height = img.size

        # Calculate the second index value to maintain the aspect ratio
        aspect_ratio = width / height
        index1 = index

        index2 = int((index1 + width - (aspect_ratio * height)) / aspect_ratio)

        new_img = img.resize((width - index1, height - index2))
        new_img = np.array(new_img)

        new_red = np.zeros((height - index2, width - index1))
        new_green = np.zeros((height - index2, width - index1))
        new_blue = np.zeros((height - index2, width - index1))

        if index > 0:
            new_red[:, :] = red[0:height - index2, 0:width - index1]
            new_green[:, :] = green[0:height - index2, 0:width - index1]
            new_blue[:, :] = blue[0:height - index2, 0:width - index1]
        else:
            new_red[0:height, 0:width] = red[:, :]
            new_green[0:height, 0:width] = green[:, :]
            new_blue[0:height, 0:width] = blue[:, :]

        new_img[:, :, 0] = new_red
        new_img[:, :, 1] = new_green
        new_img[:, :, 2] = new_blue
        if not resize:
            img = Image.fromarray(new_img)
            img = img.resize((width, height))

        else:
            img = img.resize((width + index1, height + index2))

        return img
Example #7
0
    def drogEdgeDetectorFilter(self, img, ret_grad=False, pillow=True):

        if pillow:
            img = img.convert('L')
        open_cv_image = np.array(img)
        width, height = 0, 0
        if not pillow:
            height, width = img.shape

        else:
            width, height = img.size

        cv2.GaussianBlur(open_cv_image, (15, 15), 0)

        # Create sobel x and y matrix
        sobel_x = np.array([[-1, 0, 1],
                            [-2, 0, 2],
                            [-1, 0, 1]])

        sobel_y = np.array([[-1, -2, -1],
                            [0, 0, 0],
                            [1, 2, 1]])

        kernel1 = np.zeros(open_cv_image.shape)
        kernel1[:sobel_x.shape[0], :sobel_x.shape[1]] = sobel_x
        kernel1 = np.fft.fft2(kernel1)

        kernel2 = np.zeros(open_cv_image.shape)
        kernel2[:sobel_y.shape[0], :sobel_y.shape[1]] = sobel_y
        kernel2 = np.fft.fft2(kernel2)


        im = np.array(open_cv_image)
        fim = np.fft.fft2(im)
        Gx = np.real(np.fft.ifft2(kernel1 * fim)).astype(float)
        Gy = np.real(np.fft.ifft2(kernel2 * fim)).astype(float)

        open_cv_image = abs(Gx/4) + abs(Gy/4)
        img = Image.fromarray(open_cv_image)
        img = img.convert('L')
        if ret_grad:
            return Gx, Gy
        return img
Example #8
0
    def cannyEdgeDetectorFilter(self, img, sigma=1, t_low=0.01, t_high=0.2):

        im = img.convert('L')
        img = np.array(im, dtype=float)

        # 1) Convolve gaussian kernel with gradient
        # gaussian kernel
        halfSize = 3 * sigma
        maskSize = 2 * halfSize + 1
        mat = np.ones((maskSize, maskSize)) / (float)(2 * np.pi * (sigma**2))
        xyRange = np.arange(-halfSize, halfSize + 1)
        xx, yy = np.meshgrid(xyRange, xyRange)
        x2y2 = (xx**2 + yy**2)
        exp_part = np.exp(-(x2y2 / (2.0 * (sigma**2))))
        gSig = mat * exp_part

        gx, gy = self.drogEdgeDetectorFilter(gSig, ret_grad=True, pillow=False)

        # 2) Magnitude and Angles
        # apply kernels for Ix & Iy
        Ix = cv2.filter2D(img, -1, gx)
        Iy = cv2.filter2D(img, -1, gy)

        # compute magnitude
        mag = np.sqrt(Ix**2 + Iy**2)

        # normalize magnitude image
        normMag = my_Normalize(mag)

        # compute orientation of gradient
        orient = np.arctan2(Iy, Ix)

        # round elements of orient
        orientRows = orient.shape[0]
        orientCols = orient.shape[1]

        # 3) Non maximum suppression
        for i in range(0, orientRows):
            for j in range(0, orientCols):
                if normMag[i, j] > t_low:
                    # case 0
                    if (orient[i, j] > (-np.pi / 8) and orient[i, j] <=
                        (np.pi / 8)):
                        orient[i, j] = 0
                    elif (orient[i, j] > (7 * np.pi / 8)
                          and orient[i, j] <= np.pi):
                        orient[i, j] = 0
                    elif (orient[i, j] >= -np.pi and orient[i, j] <
                          (-7 * np.pi / 8)):
                        orient[i, j] = 0
                    # case 1
                    elif (orient[i, j] > (np.pi / 8) and orient[i, j] <=
                          (3 * np.pi / 8)):
                        orient[i, j] = 3
                    elif (orient[i, j] >= (-7 * np.pi / 8) and orient[i, j] <
                          (-5 * np.pi / 8)):
                        orient[i, j] = 3
                    # case 2
                    elif (orient[i, j] > (3 * np.pi / 8) and orient[i, j] <=
                          (5 * np.pi / 8)):
                        orient[i, j] = 2
                    elif (orient[i, j] >= (-5 * np.pi / 4) and orient[i, j] <
                          (-3 * np.pi / 8)):
                        orient[i, j] = 2
                    # case 3
                    elif (orient[i, j] > (5 * np.pi / 8) and orient[i, j] <=
                          (7 * np.pi / 8)):
                        orient[i, j] = 1
                    elif (orient[i, j] >= (-3 * np.pi / 8) and orient[i, j] <
                          (-np.pi / 8)):
                        orient[i, j] = 1

        mag = normMag
        mag_thin = np.zeros(mag.shape)
        for i in range(mag.shape[0] - 1):
            for j in range(mag.shape[1] - 1):
                if mag[i][j] < t_low:
                    continue
                if orient[i][j] == 0:
                    if mag[i][j] > mag[i][j - 1] and mag[i][j] >= mag[i][j +
                                                                         1]:
                        mag_thin[i][j] = mag[i][j]
                if orient[i][j] == 1:
                    if mag[i][j] > mag[i - 1][j + 1] and mag[i][j] >= mag[
                            i + 1][j - 1]:
                        mag_thin[i][j] = mag[i][j]
                if orient[i][j] == 2:
                    if mag[i][j] > mag[i - 1][j] and mag[i][j] >= mag[i +
                                                                      1][j]:
                        mag_thin[i][j] = mag[i][j]
                if orient[i][j] == 3:
                    if mag[i][j] > mag[i - 1][j - 1] and mag[i][j] >= mag[
                            i + 1][j + 1]:
                        mag_thin[i][j] = mag[i][j]

        # 4) Thresholding and edge linking

        result_binary = np.zeros(mag_thin.shape)

        tHigh = t_high
        tLow = t_low
        # forward scan
        for i in range(0, mag_thin.shape[0] - 1):  # rows
            for j in range(0, mag_thin.shape[1] - 1):  # columns
                if mag_thin[i][j] >= tHigh:
                    if mag_thin[i][j + 1] >= tLow:  # right
                        mag_thin[i][j + 1] = tHigh
                    if mag_thin[i + 1][j + 1] >= tLow:  # bottom right
                        mag_thin[i + 1][j + 1] = tHigh
                    if mag_thin[i + 1][j] >= tLow:  # bottom
                        mag_thin[i + 1][j] = tHigh
                    if mag_thin[i + 1][j - 1] >= tLow:  # bottom left
                        mag_thin[i + 1][j - 1] = tHigh

        # backwards scan
        for i in range(mag_thin.shape[0] - 2, 0, -1):  # rows
            for j in range(mag_thin.shape[1] - 2, 0, -1):  # columns
                if mag_thin[i][j] >= tHigh:
                    if mag_thin[i][j - 1] > tLow:  # left
                        mag_thin[i][j - 1] = tHigh
                    if mag_thin[i - 1][j - 1]:  # top left
                        mag_thin[i - 1][j - 1] = tHigh
                    if mag_thin[i - 1][j] > tLow:  # top
                        mag_thin[i - 1][j] = tHigh
                    if mag_thin[i - 1][j + 1] > tLow:  # top right
                        mag_thin[i - 1][j + 1] = tHigh

        # fill in result_binary
        for i in range(0, mag_thin.shape[0] - 1):  # rows
            for j in range(0, mag_thin.shape[1] - 1):  # columns
                if mag_thin[i][j] >= tHigh:
                    result_binary[i][j] = 255  # set to 255 for >= tHigh

        img = Image.fromarray(result_binary)
        return img
def fill_below(x, S, Z):
    ind = nx.nonzero(nx.absolute(S-Z)==min(nx.absolute(S-Z)))[0]
    Y = nx.zeros(S.shape)
    Y[:ind] = S[:ind]
    Y[ind:] = Z[ind:]
    p.fill(x, Y, facecolor='blue', alpha=0.5)