杰拉德相似系数、准确率、召回率实现

 

两个输入文件均为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

 

你可能感兴趣的:(Deep,Learning,Python)