ジェラード類似係数、精度、リコール率実現
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