Esempio n. 1
0
def main():
    print("test")

    im_pa = 'D:/dataset/dataset2014/dataset/dynamicBackground/fountain01/input'
    im_ft = 'jpg'

    fg_pa = 'D:/projects/lab/fgimgs_fountain01_v34'
    fg_ft = 'png'

    fs_im, fullfs_im = loadFiles_plus(im_pa, im_ft)
    fs_fg, fullfs_fg = loadFiles_plus(fg_pa, fg_ft)

    idx = 1148

    im = torch.tensor(imageio.imread(fullfs_im[idx]), dtype=torch.float)
    fgim = torch.tensor(imageio.imread(fullfs_fg[idx]), dtype=torch.float)

    # start here

    radius = 3
    rate = 0.6

    bayfgim = bayesRefine(im, fgim, radius, rate)
    bayfgim = bayesRefine(im, bayfgim, radius, rate)
    bayfgim = bayesRefine(im, bayfgim, radius, rate)
    bayfgim = bayesRefine(im, bayfgim, radius, rate)

    print(bayfgim.shape)

    # bayesRefine(im, fgim, radius, rate):

    plt.figure()
    plt.subplot(1, 2, 1)
    plt.imshow(fgim.detach().cpu().numpy())

    plt.subplot(1, 2, 2)
    plt.imshow(bayfgim.detach().cpu().numpy())

    plt.show()
Esempio n. 2
0
def main():


    im_pa = 'D:/dataset/dataset2014/dataset/dynamicBackground/fountain01/input'
#    im_pa = 'D:/dataset/dataset2014/dataset/dynamicBackground/fountain02/input'

    im_ft = 'jpg'

#    fg_pa = 'D:/projects/lab/fgimgs_fountain01_v34'
    fg_pa = 'D:/projects/lab/fgimgs_fountain01_v49_0'
#    fg_pa = 'D:/projects/lab/fountain02_v53'

    fg_ft = 'png'

    gt_pa = 'D:/dataset/dataset2014/dataset/dynamicBackground/fountain01/groundtruth'
#    gt_pa = 'D:/dataset/dataset2014/dataset/dynamicBackground/fountain02/groundtruth'

    gt_ft = 'png'






    use_cuda = torch.cuda.is_available()


    print("------------")
    print(use_cuda)
    print("------------")

    torch.manual_seed(0)

    device = torch.device("cuda:0" if use_cuda else "cpu")




    fs_im, fullfs_im = loadFiles_plus(im_pa, im_ft)
    fs_fg, fullfs_fg = loadFiles_plus(fg_pa, fg_ft)
    fs_gt, fullfs_gt = loadFiles_plus(gt_pa, gt_ft)


    idx = 1148
    idx = 753
    idx = 1104
    idx = 756
    idx = 780
    idx = 1099
    idx = 1100
    idx = 700
    idx = 701

    idx = 683
    idx = 715
    # start here

    idx = 672

    idx = 657

    idx = 701









    idx = 690


    idx = 710


    idx = 1156


    idx = 1116

    idx = 706

    idx = 711

    idx = 708
    idx = 704

    radius = 2
    rate = 0.8
    num = 40



    TP_sum = 0
    FP_sum = 0
    TN_sum = 0
    FN_sum = 0


    TP_sum_bay = 0
    FP_sum_bay = 0
    TN_sum_bay = 0
    FN_sum_bay = 0






    im =   torch.tensor( imageio.imread(fullfs_im[idx]), dtype = torch.float )
    fgim = torch.tensor( imageio.imread(fullfs_fg[idx]), dtype = torch.float )
    gtim = torch.tensor( imageio.imread(fullfs_gt[idx]), dtype = torch.float )



    starttime = time.time()
    bayfgim = bayesRefine_iterative_gpu(im, fgim, radius, rate, num, device)

#    bayfgim = bayesRefine_iterative_gpu(im, bayfgim, 1, 0.6, num, device)

    endtime = time.time()

    print("total time:", endtime - starttime)




    fgim = fgim.detach().cpu().numpy()
    gtim = gtim.detach().cpu().numpy()
    bayfgim = bayfgim.detach().cpu().numpy()

    im = im.detach().cpu().numpy()



    TP, FP, TN, FN = evaluation_numpy_entry(np.round(fgim),    np.round(gtim))
    print("fg entry:", TP, FP, TN, FN)


    Re = TP/max((TP + FN), 1)
    Pr = TP/max((TP + FP), 1)
    Fm = (2*Re*Pr)/max((Pr + Re), 0.0001)


    TP_sum += TP
    FP_sum += FP
    TN_sum += TN
    FN_sum += FN

    Re_sum = TP_sum/max((TP_sum + FN_sum), 1)
    Pr_sum = TP_sum/max((TP_sum + FP_sum), 1)
    Fm_sum = (2*Re_sum*Pr_sum)/max((Pr_sum + Re_sum), 0.0001)




#        print("Re, Pr, Fm:", Re, Pr, Fm)

    TP_bay, FP_bay, TN_bay, FN_bay = evaluation_numpy_entry(np.round(bayfgim), np.round(gtim))
    print("bay entry:", TP_bay, FP_bay, TN_bay, FN_bay)

    Re_bay = TP_bay/max((TP_bay + FN_bay), 1)
    Pr_bay = TP_bay/max((TP_bay + FP_bay), 1)
    Fm_bay = (2*Re_bay*Pr_bay)/max((Pr_bay + Re_bay), 0.0001)


    TP_sum_bay += TP_bay
    FP_sum_bay += FP_bay
    TN_sum_bay += TN_bay
    FN_sum_bay += FN_bay

    Re_sum_bay = TP_sum_bay/max((TP_sum_bay + FN_sum_bay), 1)
    Pr_sum_bay = TP_sum_bay/max((TP_sum_bay + FP_sum_bay), 1)
    Fm_sum_bay = (2*Re_sum_bay*Pr_sum_bay)/max((Pr_sum_bay + Re_sum_bay), 0.0001)


    print("")
    print("current:        ", Re, Pr, Fm)
    print("bay:            ", Re_bay, Pr_bay, Fm_bay)
    print("accumulated:    ", Re_sum, Pr_sum, Fm_sum)
    print("accumulated bay:", Re_sum_bay, Pr_sum_bay, Fm_sum_bay)
    print("")










































#    for i in range(640, 1499):
#     for i in range(640, 1184):
#         idx = i
#
#
#         im =   torch.tensor( imageio.imread(fullfs_im[idx]), dtype = torch.float )
#         fgim = torch.tensor( imageio.imread(fullfs_fg[idx]), dtype = torch.float )
#         gtim = torch.tensor( imageio.imread(fullfs_gt[idx]), dtype = torch.float )
#
#
#
#         starttime = time.time()
#         bayfgim = bayesRefine_iterative_gpu(im, fgim, radius, rate, num, device)
#         endtime = time.time()
#
#         print("total time:", endtime - starttime)
#
#
#
#
#         fgim = fgim.detach().cpu().numpy()
#         gtim = gtim.detach().cpu().numpy()
#         bayfgim = bayfgim.detach().cpu().numpy()
#
#         im = im.detach().cpu().numpy()
#
#
#         # print(fgim.shape)
#
# #        fgim[:, 0:26] = 0
#         TP, FP, TN, FN = evaluation_numpy_entry(np.round(fgim),    np.round(gtim))
#
#         print("fg entry:", TP, FP, TN, FN)
#
#
#         Re = TP/max((TP + FN), 1)
#         Pr = TP/max((TP + FP), 1)
#         Fm = (2*Re*Pr)/max((Pr + Re), 0.0001)
#
#
#         TP_sum += TP
#         FP_sum += FP
#         TN_sum += TN
#         FN_sum += FN
#
#         Re_sum = TP_sum/max((TP_sum + FN_sum), 1)
#         Pr_sum = TP_sum/max((TP_sum + FP_sum), 1)
#         Fm_sum = (2*Re_sum*Pr_sum)/max((Pr_sum + Re_sum), 0.0001)
#
#
#
#
# #        print("Re, Pr, Fm:", Re, Pr, Fm)
# #        bayfgim[:, 0:26] = 0
#         TP_bay, FP_bay, TN_bay, FN_bay = evaluation_numpy_entry(np.round(bayfgim), np.round(gtim))
#
#         print("bay entry:", TP_bay, FP_bay, TN_bay, FN_bay)
#
#         Re_bay = TP_bay/max((TP_bay + FN_bay), 1)
#         Pr_bay = TP_bay/max((TP_bay + FP_bay), 1)
#         Fm_bay = (2*Re_bay*Pr_bay)/max((Pr_bay + Re_bay), 0.0001)
#
#
#         TP_sum_bay += TP_bay
#         FP_sum_bay += FP_bay
#         TN_sum_bay += TN_bay
#         FN_sum_bay += FN_bay
#
#         Re_sum_bay = TP_sum_bay/max((TP_sum_bay + FN_sum_bay), 1)
#         Pr_sum_bay = TP_sum_bay/max((TP_sum_bay + FP_sum_bay), 1)
#         Fm_sum_bay = (2*Re_sum_bay*Pr_sum_bay)/max((Pr_sum_bay + Re_sum_bay), 0.0001)
#
#
#         print("")
#         print("i = ", i)
#         print("current:        ", Re, Pr, Fm)
#         print("bay:            ", Re_bay, Pr_bay, Fm_bay)
#         print("accumulated:    ", Re_sum, Pr_sum, Fm_sum)
#         print("accumulated bay:", Re_sum_bay, Pr_sum_bay, Fm_sum_bay)
#         print("")
#


#        print("Re, Pr, Fm:", Re, Pr, Fm)
















    plt.figure()
    plt.subplot(2, 2, 1)
#    plt.imshow(fgim.detach().cpu().numpy(), cmap='gray')
    plt.imshow(fgim, cmap='gray')

    plt.subplot(2, 2, 2)
#    plt.imshow(bayfgim.detach().cpu().numpy(), cmap='gray')

    plt.imshow(bayfgim, cmap='gray')

    plt.subplot(2, 2, 3)

    plt.imshow(im/255.0)


    plt.subplot(2, 2, 4)

    plt.imshow(gtim/255.0)


    plt.show()
Esempio n. 3
0
def main():

    im_pa = 'D:/dataset/dataset2014/dataset/dynamicBackground/fountain01/input'
    im_ft = 'jpg'

    fg_pa = 'D:/projects/lab/fgimgs_fountain01_v34'
    fg_ft = 'png'

    fs_im, fullfs_im = loadFiles_plus(im_pa, im_ft)
    fs_fg, fullfs_fg = loadFiles_plus(fg_pa, fg_ft)

    idx = 1148

    im = torch.tensor(imageio.imread(fullfs_im[idx]), dtype=torch.float)
    fgim = torch.tensor(imageio.imread(fullfs_fg[idx]), dtype=torch.float)

    # start here

    radius = 3
    rate = 0.6

    row_im, column_im, byte_im = im.shape

    starttime = time.time()

    impos = img2pos(im)
    lab = rgb2lab(im)

    row, column, byte = im.shape

    features = torch.cat((im, im[:, :, 0:2]), dim=2)
    features[:, :, 0] = lab[:, :, 0]
    features[:, :, 1] = lab[:, :, 1]
    features[:, :, 2] = lab[:, :, 2]
    features[:, :, 3] = impos[:, :, 0]
    features[:, :, 4] = impos[:, :, 1]

    features_vec = features.reshape(row_im * column_im, 5)

    print("features_vec.shape:", features_vec.shape)

    min_val, min_idx = torch.min(features_vec, dim=0)
    features_vec = features_vec - min_val

    min_val, min_idx = torch.min(features_vec, dim=0)

    max_val, max_idx = torch.max(features_vec, dim=0)

    features_vec = features_vec / max_val

    features = features_vec.reshape(row_im, column_im, 5)

    pixel_features = features

    [row_f, column_f, byte_f] = features.shape

    ex_feats = F.pad(features.permute(2, 0, 1).unsqueeze(0),
                     (radius, radius, radius, radius),
                     mode='replicate').squeeze()
    ex_feats = ex_feats.permute(1, 2, 0)

    ex_label = F.pad(fgim.unsqueeze(-1).permute(2, 0, 1).unsqueeze(0),
                     (radius, radius, radius, radius),
                     mode='replicate').squeeze()
    ex_label = ex_label

    ex_image = F.pad(im.permute(2, 0, 1).unsqueeze(0),
                     (radius, radius, radius, radius),
                     mode='replicate').squeeze()
    ex_image = ex_image.permute(1, 2, 0)

    #     print(ex_feats.shape)
    #     print(ex_label.shape)
    #     print(ex_image.shape)

    num_feats = radius * 2 + 1
    num_feats = num_feats * num_feats

    labs_vec = torch.cat([
        ex_label[i:i + row_im, j:j + column_im].reshape(row_im * column_im, 1)
        for i in range(radius * 2 + 1) for j in range(radius * 2 + 1)
    ],
                         dim=1)
    imgs_vec = torch.cat([
        ex_feats[i:i + row_im, j:j + column_im].reshape(
            row_im * column_im, 5).unsqueeze(-1) for i in range(radius * 2 + 1)
        for j in range(radius * 2 + 1)
    ],
                         dim=2)

    pixel_vec = pixel_features.reshape(row_im * column_im, 5)

    #    print("total cost:", torch.sum( imgs_vec[:, :, 24] - pixel_vec))

    dis_vec = imgs_vec.permute(2, 0, 1) - pixel_vec

    #    print(dis_vec.shape)

    #    print(torch.sum(dis_vec[24, :, :]))

    P0_num = torch.sum(labs_vec == 0, dim=1).float()
    P1_num = torch.sum(labs_vec == 255, dim=1).float()

    P0 = P0_num / (P0_num + P1_num)
    P1 = P1_num / (P0_num + P1_num)

    num1, num2 = labs_vec.shape
    idxlabs = labs_vec.expand(5, num1, num2).permute(2, 1, 0)

    neg_dis = dis_vec.clone()
    pos_dis = dis_vec.clone()

    neg_dis[idxlabs == 255] = 0
    pos_dis[idxlabs == 0] = 0

    neg_dis = neg_dis.sum(dim=0).sum(dim=1)
    pos_dis = pos_dis.sum(dim=0).sum(dim=1)

    neg_dis = neg_dis / P0_num
    pos_dis = pos_dis / P1_num

    neg_dis = 1.0 / neg_dis
    pos_dis = 1.0 / pos_dis

    neg_pra = neg_dis * P0
    pos_pra = pos_dis * P1

    re_labs = torch.abs(fgim - fgim).reshape(row_im * column_im)
    re_labs[pos_pra > neg_pra] = 255
    re_labs[P0_num == 0] = 255
    re_labs[P1_num == 0] = 0

    bayfgim = re_labs.reshape(row_im, column_im)

    print(bayfgim.shape)

    print(P0_num.shape)
    print(P1_num.shape)

    print(neg_dis.shape)
    print(pos_dis.shape)

    plt.figure()
    plt.subplot(1, 2, 1)
    plt.imshow(fgim.detach().cpu().numpy(), cmap='gray')
    plt.subplot(1, 2, 2)
    plt.imshow(bayfgim.detach().cpu().numpy(), cmap='gray')

    plt.show()

    #
    #     sum_dis = torch.abs(dis_vec).sum(dim = 0).sum(dim = 1)
    #
    #
    #
    #     idx = 42032
    #
    #     print(neg_dis[:, idx, 0])
    #     print(pos_dis[:, idx, 0])
    #
    #     print(idxlabs[:, idx, 0])

    #
    #
    #
    #
    #     print(neg_dis.shape)
    #     print(pos_dis.shape)
    #
    #
    #
    #     print(dis_vec.shape)
    #     print(labs_vec.shape)
    #     print(idxlabs.shape)

    #     print(dis_vec.shape)
    #     print(labs_vec.shape)
    #
    #
    #     dis_vec = dis_vec.permute(2, 1, 0)
    #     idx = labs_vec == 0
    #
    #     print("dis_vec.shape:", dis_vec.shape)
    #
    #     dis_vec[:, idx] = 0
    #
    #     print(dis_vec.shape)

    #    dis_neg = torch.sum(dis_vec[:, idx], dim = 2)

    #    print(dis_neg.shape)

    #
    #     for i in range(124416):
    #         print(P0[i])
    #         print(torch.sum(labs_vec[i,:] == 0))
    #
    #         print("")

    #    print(labs_vec.shape)
    #    print(imgs_vec.shape)
    #    print(pixel_vec.shape)

    #     for i in range(radius*2 + 1):
    #         for j in range(radius*2 + 1):
    #             labs = ex_label[i:i + row_im, j:j + column_im].reshape(row_im*column_im, 1)
    #             print(labs.shape)
    # #            print(t.shape)
    #
    #
    # #    print(labs)
    #     print(torch.sum( lab_pad[:, 48] - labs.squeeze()))

    endtime = time.time()

    print("total time:", endtime - starttime)