算一个bbox和一个mask区域的重叠
def get_bbox_in_mask_overlap_ratio(bbox, mask):
"""
判断边界框是否在二值化的 mask 区域内。(二值化为0和255),重叠区域占bbox的比率
参数:
bbox: tuple 或 list,表示边界框 (x_min, y_min, x_max, y_max)
mask: numpy 数组,二值化的图像,值为 1 表示区域内,值为 0 表示区域外
返回:
bool: 如果 bbox 完全在 mask 区域内,返回 True;否则返回 False
"""
x_min, y_min, x_max, y_max = bbox
# 检查 bbox 的边界是否超出 mask 的范围
if x_min < 0 or y_min < 0 or x_max > mask.shape[1] or y_max > mask.shape[0]:
return False
# 提取 bbox 区域对应的 mask 子区域
bbox_mask = mask[int(y_min):int(y_max), int(x_min):int(x_max)]
## mask fg val is 1
# 判断 bbox 区域是否完全在 mask 区域内
#return np.any(bbox_mask == 255)
bbox_area = (y_max-y_min)*(x_max-x_min)
## 获得由多少个重叠的像素
bin_num = np.sum(bbox_mask == 255)
## 计算重叠区域的占比
ratio = bin_num/(bbox_area+1)
print('===================',bin_num, bbox_area, bin_num*1.0/bbox_area)
return ratio
posted on 2025-11-27 14:18 Sanny.Liu-CV&&ML 阅读(1) 评论(0) 收藏 举报
浙公网安备 33010602011771号