交并比实现

在faster-rcnn中用经常用到交并比,原理很简单
交并比实现_第1张图片
这里写图片描述
代码实现


def iou(a, b):
	# a and b should be (x1,y1,x2,y2)

	if a[0] >= a[2] or a[1] >= a[3] or b[0] >= b[2] or b[1] >= b[3]:
		return 0.0

	area_i = intersection(a, b) //求交集
	area_u = union(a, b, area_i) //求并集

	return float(area_i) / float(area_u + 1e-6)

intersection函数的实现有一点小技巧
交并比实现_第2张图片

def union(au, bu, area_intersection):
	area_a = (au[2] - au[0]) * (au[3] - au[1])
	area_b = (bu[2] - bu[0]) * (bu[3] - bu[1])
	area_union = area_a + area_b - area_intersection
	return area_union

def intersection(ai, bi):
	x = max(ai[0], bi[0])
	y = max(ai[1], bi[1])
	w = min(ai[2], bi[2]) - x
	h = min(ai[3], bi[3]) - y
	if w < 0 or h < 0:
		return 0
	return w*h

你可能感兴趣的:(图像处理,深度学习)