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