ジェラード類似係数、精度、リコール率実現



2つの入力ファイルはいずれも0-1分類の1バンドtif図である
#          jaccard=|A∩B|/|A∪B|
#   A     n        ;B      n         
# labelset_path:  ;regset_path    
# 0、1  ,label reg size
def cal_jaccard(labelset_path, regset_path):
    label_arr = cv2.imread(labelset_path, cv2.IMREAD_GRAYSCALE)
    reg_arr = cv2.imread(regset_path, cv2.IMREAD_GRAYSCALE)

    rows = label_arr.shape[0]
    cols = label_arr.shape[1]

    # element num Of Intersection
    ele_Num_in_0 = 0
    ele_Num_in_1 = 0
    # element num Of Union
    ele_Num_un_0 = 0
    ele_Num_un_1 = 0
    # ele numOf 0 in label_arr and reg_arr
    ele_Num_0 = np.sum(label_arr == 0) + np.sum(reg_arr == 0)
    # ele numOf 1 in label_arr and reg_arr
    ele_Num_1 = np.sum(label_arr == 1) + np.sum(reg_arr == 1)

    for row in range(0, rows):
        for col in range(0, cols):
            if (label_arr[row, col] == 0 and reg_arr[row, col] == 0):
                ele_Num_in_0 += 1
            elif (label_arr[row, col] == 1 and reg_arr[row, col] == 1):
                ele_Num_in_1 += 1
    ele_Num_un_0 = ele_Num_0 - ele_Num_in_0
    ele_Num_un_1 = ele_Num_1 - ele_Num_in_1

    jac_0 = ele_Num_in_0 / ele_Num_un_0
    jac_1 = ele_Num_in_1 / ele_Num_un_1
    print("jac_0=" + str(jac_0) + "----jac_1=" + str(jac_1))
    return jac_0, jac_1


#          
# acc=          (  +  )/          
# recall=          (  )/      (  )       
def cal_AccAndRecall(labelset_path, regset_path):
    label_arr = cv2.imread(labelset_path, cv2.IMREAD_GRAYSCALE)
    reg_arr = cv2.imread(regset_path, cv2.IMREAD_GRAYSCALE)

    rows = label_arr.shape[0]
    cols = label_arr.shape[1]

    # element num Of Intersection
    ele_Num_in_0 = 0
    ele_Num_in_1 = 0

    # ele numOf 1 in label_arr and reg_arr
    ele_Num_1 = np.sum(label_arr == 1)

    for row in range(0, rows):
        for col in range(0, cols):
            if (label_arr[row, col] == 0 and reg_arr[row, col] == 0):
                ele_Num_in_0 += 1
            elif (label_arr[row, col] == 1 and reg_arr[row, col] == 1):
                ele_Num_in_1 += 1

    acc = "%.2f%%" % (100 * (ele_Num_in_1 + ele_Num_in_0) / (rows * cols))
    recall = "%.2f%%" % (100 * ele_Num_in_1 / ele_Num_1)
    print("acc=" + str(acc) + "----recall=" + str(recall))
    return acc, recall