|
|
@@ -219,29 +219,27 @@ def remove_overlaps_min_blocks(res_list):
|
|
|
)
|
|
|
|
|
|
if overlap_box is not None:
|
|
|
- res_to_remove = None
|
|
|
- large_res = None
|
|
|
|
|
|
- # 确定哪个是小块(要移除的)
|
|
|
+ # 根据重叠框确定哪个是小块,哪个是大块
|
|
|
if overlap_box == res_list[i]['bbox']:
|
|
|
- res_to_remove = res_list[i]
|
|
|
- large_res = res_list[j]
|
|
|
+ small_res, large_res = res_list[i], res_list[j]
|
|
|
elif overlap_box == res_list[j]['bbox']:
|
|
|
- res_to_remove = res_list[j]
|
|
|
- large_res = res_list[i]
|
|
|
+ small_res, large_res = res_list[j], res_list[i]
|
|
|
+ else:
|
|
|
+ continue # 如果重叠框与任一块都不匹配,跳过处理
|
|
|
|
|
|
- if res_to_remove['score'] < large_res['score']:
|
|
|
+ if small_res['score'] <= large_res['score']:
|
|
|
# 如果小块的分数低于大块,则小块为需要移除的块
|
|
|
- if res_to_remove is not None and res_to_remove not in need_remove:
|
|
|
+ if small_res is not None and small_res not in need_remove:
|
|
|
# 更新大块的边界为两者的并集
|
|
|
x1, y1, x2, y2 = large_res['bbox']
|
|
|
- sx1, sy1, sx2, sy2 = res_to_remove['bbox']
|
|
|
+ sx1, sy1, sx2, sy2 = small_res['bbox']
|
|
|
x1 = min(x1, sx1)
|
|
|
y1 = min(y1, sy1)
|
|
|
x2 = max(x2, sx2)
|
|
|
y2 = max(y2, sy2)
|
|
|
large_res['bbox'] = [x1, y1, x2, y2]
|
|
|
- need_remove.append(res_to_remove)
|
|
|
+ need_remove.append(small_res)
|
|
|
else:
|
|
|
# 如果大块的分数低于小块,则大块为需要移除的块, 这时不需要更新小块的边界
|
|
|
if large_res is not None and large_res not in need_remove:
|