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

博客提及有两个输入文件,均为0 - 1分类的单张1波段tif图,属于信息技术领域中图像处理相关内容。

 

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值