由于最近跟别人说我搞过目标检测,然后被问到一个问题,如何计算两个矩形框的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相关推荐

  1. 倾斜矩形框的IOU计算与Python实现

    参考倾斜矩形框的IOU计算与Python实现 - 云+社区 - 腾讯云 其算法流程大致如下: 给定两个倾斜的矩形 1. 首先设置点集: 2. 将两个矩形的交点均加入至 中: 3. 接着将矩形包含在中的 ...

  2. python 计算时间重叠_python whilepython计算两个矩形框重合百分比的实例

    如下所示: 对<python计算两个矩形框重合百分比的实例>总结来说,为我们电脑技术很实用. def mat_inter(box1,box2): # 判断两个矩形是否相交 # box=(x ...

  3. python计算两个矩形的重叠_python计算两个矩形框重合百分比的实例

    python计算两个矩形框重合百分比的实例 如下所示: def mat_inter(box1,box2): # 判断两个矩形是否相交 # box=(xA,yA,xB,yB) x01, y01, x02 ...

  4. 矩形框的IOU计算C++实现

    可以利用opencv进行实现,非常简单,如果不使用opencv也可以使用min,max也不难.因此下面的C++代码包含了两种计算矩形框IOU的方法. #include<iostream> ...

  5. C++ 如何判断两个矩形框有交集

    矩形框是否有交集的判断 本人也查找了一些方法,发现直接套用公式,无法满足需求,主要是自己没有花一点时间去思考: 矩形框的判断,主要方法是判断两个矩形没有交集,然后再取反,就能判断出矩形框是否存在交集: ...

  6. python3, 计算两个矩形框是否重叠,并计算重叠度

    # 两个检测框框是否有交叉,如果有交集则返回重叠度 IOU, 如果没有交集则返回 0 def bb_overlab(x1, y1, w1, h1, x2, y2, w2, h2):'''说明:图像中, ...

  7. Cocos2d-x--Box2D绘制出两个矩形框的解决方案

    一个简单的Demo,只是在程序窗口绘制出一个矩形 找到以下代码,注释掉其中一句 效果: 转载于:https://www.cnblogs.com/snake-hand/p/3165747.html

  8. 目标检测入门之矩形框IOU计算

    1. 引言 在目标检测领域中,我们经常用IOU来衡量检测框和标注真实框之间的重叠程度,那么究竟该如何计算IOU呢? 闲话少说,我们直接进入今天的主题- 2. 什么是IOU? IOU(交并比 Inter ...

  9. C++ 判断一幅图片中的两个矩形区域是否邻近

    应用: 存在于一幅图片中的两个矩形区域,计算其距离并判断其是否邻近.邻近则返回真,否则返回假. (注:我在此处存储单个矩形的数据格式为vector<int>,方便自己读写数据) int A ...

最新文章

  1. python3.7 6如何安装-redhat7.6 安装Python 3
  2. 正则满足中文的顿号_常用的正则表达式、正则表达式之断言
  3. MATLAB Simulink 做BP PID报错:Error :*** during flag=* call must be a real vector of length 3
  4. (十四)Java springcloud B2B2C o2o多用户商城 springcloud架构- Spring Cloud构建分布式电子商务平台...
  5. java定位线程阻塞_Arthas - 定位 Java 性能问题原来这么简单
  6. JS如何控制checkbox的全选反选
  7. Nginx的11个执行流程
  8. mysql简单部署_安装部署Mysql实例(最简单快速噢)
  9. canvas中window坐标转换为canvas坐标
  10. chrome最强大的浏览器插件推荐,只要你会用其他的插件你可以删除了
  11. Java移位运算符原来这么简单
  12. matlab 某一函数半高,1. 半高宽的知识
  13. vue3使用dayjs
  14. linux c 获取文件大小
  15. 红尘牵绊,江湖儿女惹情长
  16. 判断一个数是否是回文数(Java)
  17. MFC下改变窗口或编辑框标题字体大小的方法
  18. xshell6 评估期已过 解决办法
  19. 高分7(GF7)卫星数据制作平原地区DSM/DEM(三)——可信度分割
  20. 数字化变电站与智能化变电站的关系

热门文章

  1. 玩转 Scrapy 框架 (二):Scrapy 架构、Request和Response介绍
  2. micropython stm32f405_STM32F405RGT6核心板兼MicroPython开发板的电路方案设计(原理图+完整工程)...
  3. 如果你请求返回是502, 这个时候怎么定位这个问题?
  4. 【前端开发—JavaScript】——BOM/DOM
  5. 安卓学习专栏——百度地图(1)获取SHA1指纹申请百度地图API Key使用百度LBS定位功能(图文保姆级)
  6. 【转】头痛的自我治疗方法
  7. uC/OS-III统计任务堆栈、CPU使用率
  8. linux下的ctrl快捷键使用
  9. python爬取豆瓣电影top250_利用python爬取豆瓣电影Top250,并把数据放入MySQL数据库...
  10. C# BeginInvoke实现异步编程