如何计算两个矩形框的IoU
由于最近跟别人说我搞过目标检测,然后被问到一个问题,如何计算两个矩形框的IoU?
一开始我回答说可以采用OpenCV的&运算和|运算来计算IoU,但他要我不采用OpenCV 的接口,自己写。
当时我回答的比较乱,分4种情况进行讨论2个矩形框之间的位置关系,最后他告诉我说,根本不需要讨论,采用max(),min()就可以实现。囧。
大致做法是先求出2个矩形框的交集,交集也是矩形框或空,计算相交部分面积再除以并集的面积即可。
关键在于怎么不分情况讨论就计算出交集部分的面积。
摘取SSD中bbox_util.cpp一部分代码如下:
void IntersectBBox(const NormalizedBBox& bbox1, const NormalizedBBox& bbox2,NormalizedBBox* intersect_bbox) {if (bbox2.xmin() > bbox1.xmax() || bbox2.xmax() < bbox1.xmin() ||bbox2.ymin() > bbox1.ymax() || bbox2.ymax() < bbox1.ymin()) {// Return [0, 0, 0, 0] if there is no intersection.intersect_bbox->set_xmin(0);intersect_bbox->set_ymin(0);intersect_bbox->set_xmax(0);intersect_bbox->set_ymax(0);} else {intersect_bbox->set_xmin(std::max(bbox1.xmin(), bbox2.xmin()));intersect_bbox->set_ymin(std::max(bbox1.ymin(), bbox2.ymin()));intersect_bbox->set_xmax(std::min(bbox1.xmax(), bbox2.xmax()));intersect_bbox->set_ymax(std::min(bbox1.ymax(), bbox2.ymax()));}
}
float JaccardOverlap(const NormalizedBBox& bbox1, const NormalizedBBox& bbox2,const bool normalized) {NormalizedBBox intersect_bbox;IntersectBBox(bbox1, bbox2, &intersect_bbox);float intersect_width, intersect_height;if (normalized) {intersect_width = intersect_bbox.xmax() - intersect_bbox.xmin();intersect_height = intersect_bbox.ymax() - intersect_bbox.ymin();} else {intersect_width = intersect_bbox.xmax() - intersect_bbox.xmin() + 1;intersect_height = intersect_bbox.ymax() - intersect_bbox.ymin() + 1;}if (intersect_width > 0 && intersect_height > 0) {float intersect_size = intersect_width * intersect_height;float bbox1_size = BBoxSize(bbox1);float bbox2_size = BBoxSize(bbox2);return intersect_size / (bbox1_size + bbox2_size - intersect_size);} else {return 0.;}
}
这个交集的计算采用max,min就计算出来了,真是巧妙啊。
如何计算两个矩形框的IoU相关推荐
- 倾斜矩形框的IOU计算与Python实现
参考倾斜矩形框的IOU计算与Python实现 - 云+社区 - 腾讯云 其算法流程大致如下: 给定两个倾斜的矩形 1. 首先设置点集: 2. 将两个矩形的交点均加入至 中: 3. 接着将矩形包含在中的 ...
- python 计算时间重叠_python whilepython计算两个矩形框重合百分比的实例
如下所示: 对<python计算两个矩形框重合百分比的实例>总结来说,为我们电脑技术很实用. def mat_inter(box1,box2): # 判断两个矩形是否相交 # box=(x ...
- python计算两个矩形的重叠_python计算两个矩形框重合百分比的实例
python计算两个矩形框重合百分比的实例 如下所示: def mat_inter(box1,box2): # 判断两个矩形是否相交 # box=(xA,yA,xB,yB) x01, y01, x02 ...
- 矩形框的IOU计算C++实现
可以利用opencv进行实现,非常简单,如果不使用opencv也可以使用min,max也不难.因此下面的C++代码包含了两种计算矩形框IOU的方法. #include<iostream> ...
- C++ 如何判断两个矩形框有交集
矩形框是否有交集的判断 本人也查找了一些方法,发现直接套用公式,无法满足需求,主要是自己没有花一点时间去思考: 矩形框的判断,主要方法是判断两个矩形没有交集,然后再取反,就能判断出矩形框是否存在交集: ...
- python3, 计算两个矩形框是否重叠,并计算重叠度
# 两个检测框框是否有交叉,如果有交集则返回重叠度 IOU, 如果没有交集则返回 0 def bb_overlab(x1, y1, w1, h1, x2, y2, w2, h2):'''说明:图像中, ...
- Cocos2d-x--Box2D绘制出两个矩形框的解决方案
一个简单的Demo,只是在程序窗口绘制出一个矩形 找到以下代码,注释掉其中一句 效果: 转载于:https://www.cnblogs.com/snake-hand/p/3165747.html
- 目标检测入门之矩形框IOU计算
1. 引言 在目标检测领域中,我们经常用IOU来衡量检测框和标注真实框之间的重叠程度,那么究竟该如何计算IOU呢? 闲话少说,我们直接进入今天的主题- 2. 什么是IOU? IOU(交并比 Inter ...
- C++ 判断一幅图片中的两个矩形区域是否邻近
应用: 存在于一幅图片中的两个矩形区域,计算其距离并判断其是否邻近.邻近则返回真,否则返回假. (注:我在此处存储单个矩形的数据格式为vector<int>,方便自己读写数据) int A ...
最新文章
- python3.7 6如何安装-redhat7.6 安装Python 3
- 正则满足中文的顿号_常用的正则表达式、正则表达式之断言
- MATLAB Simulink 做BP PID报错:Error :*** during flag=* call must be a real vector of length 3
- (十四)Java springcloud B2B2C o2o多用户商城 springcloud架构- Spring Cloud构建分布式电子商务平台...
- java定位线程阻塞_Arthas - 定位 Java 性能问题原来这么简单
- JS如何控制checkbox的全选反选
- Nginx的11个执行流程
- mysql简单部署_安装部署Mysql实例(最简单快速噢)
- canvas中window坐标转换为canvas坐标
- chrome最强大的浏览器插件推荐,只要你会用其他的插件你可以删除了
- Java移位运算符原来这么简单
- matlab 某一函数半高,1. 半高宽的知识
- vue3使用dayjs
- linux c 获取文件大小
- 红尘牵绊,江湖儿女惹情长
- 判断一个数是否是回文数(Java)
- MFC下改变窗口或编辑框标题字体大小的方法
- xshell6 评估期已过 解决办法
- 高分7(GF7)卫星数据制作平原地区DSM/DEM(三)——可信度分割
- 数字化变电站与智能化变电站的关系
热门文章
- 玩转 Scrapy 框架 (二):Scrapy 架构、Request和Response介绍
- micropython stm32f405_STM32F405RGT6核心板兼MicroPython开发板的电路方案设计(原理图+完整工程)...
- 如果你请求返回是502, 这个时候怎么定位这个问题?
- 【前端开发—JavaScript】——BOM/DOM
- 安卓学习专栏——百度地图(1)获取SHA1指纹申请百度地图API Key使用百度LBS定位功能(图文保姆级)
- 【转】头痛的自我治疗方法
- uC/OS-III统计任务堆栈、CPU使用率
- linux下的ctrl快捷键使用
- python爬取豆瓣电影top250_利用python爬取豆瓣电影Top250,并把数据放入MySQL数据库...
- C# BeginInvoke实现异步编程