计算矩阵交并比 C++代码

交并比(Intersection-over-Union,IoU),目标检测中使用的一个概念,是产生的候选框(candidate bound)与原标记框(ground truth bound)的交叠率,即它们的交集与并集的比值。最理想情况是完全重叠,即比值为1。


计算公式:

#include"function.h"
#include"roi.h"
double calculateIoU(roi& candidateBound, roi& groundTruthBound)//计算交并比
{
	int cx1 = candidateBound.getX();
	int cy1 = candidateBound.getY();
	int cx2 = candidateBound.getX() + candidateBound.getWidth();
	int cy2 = candidateBound.getY() + candidateBound.getHeight();

	int gx1 = groundTruthBound.getX();
	int gy1 = groundTruthBound.getY();
	int gx2 = groundTruthBound.getX() + groundTruthBound.getWidth();
	int gy2 = groundTruthBound.getY() + groundTruthBound.getHeight();

	double carea = (cx2 - cx1) * (cy2 - cy1); //C的面积
	double garea = (gx2 - gx1) * (gy2 - gy1);//G的面积

	int x1 = max(cx1, gx1);
	int y1 = max(cy1, gy1);
	int x2 = min(cx2, gx2);
	int y2 = min(cy2, gy2);
	int w = max(0, x2 - x1);
	int h = max(0, y2 - y1);
	int area = w * h;//C∩G的面积

	double iou = area / (carea + garea - area);

	return iou;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值