python矩形语句_浅谈Python3实现两个矩形的交并比(IoU)
一、前言
因?yàn)樽罱鼊偤帽粏?wèn)到這個(gè)問(wèn)題,但是自己當(dāng)時(shí)特別懵逼,導(dǎo)致沒(méi)有做出來(lái)。所以下來(lái)后自己Google了很多IoU的博客,但是很多博客要么過(guò)于簡(jiǎn)略,要么是互相轉(zhuǎn)載的,有一些博客圖和代碼還有點(diǎn)問(wèn)題,也導(dǎo)致自己這個(gè)萌新走了不少?gòu)澛贰K宰约褐匦抡砹丝吹牟┛?#xff0c;力求以更簡(jiǎn)單的方式展現(xiàn)這個(gè)問(wèn)題的解答辦法,方便日后自己回顧。如果朋友們覺(jué)得寫(xiě)的有問(wèn)題的地方,非常歡迎大家在下面留言交流,避免因?yàn)槲业膯?wèn)題導(dǎo)致讀者走彎路。
二、交并比的概念及應(yīng)用
假設(shè)平面坐標(biāo)中有一個(gè)矩形,并且這個(gè)矩形的長(zhǎng)和寬均分別與x軸和y軸平行。
那么矩形在平面坐標(biāo)中的唯一位置可以通過(guò)對(duì)角線上的兩個(gè)頂點(diǎn)坐標(biāo)來(lái)確定(這里不做證明)。
如下圖所示:這個(gè)矩形的唯一位置可以用左上和右下的頂點(diǎn)坐標(biāo),即:(xmin, ymax, xmax, ymin)來(lái)確定,也可以用左下和右上頂點(diǎn)坐標(biāo),即(xmin, ymin, xmax, ymax)來(lái)確定。
接下來(lái)說(shuō)一下自己踩的坑:網(wǎng)上的大部分博客,圖是標(biāo)的是左上和右下的頂點(diǎn)坐標(biāo),但是代碼清一色是通過(guò)左下和右上頂點(diǎn)坐標(biāo)來(lái)確定矩形位置的。所以一開(kāi)始看著特別暈圈。
理論上兩種確定方式都可以,不過(guò)相對(duì)而言,通過(guò)左下和右上兩個(gè)頂點(diǎn)坐標(biāo),即(xmin, ymin, xmax, ymax)來(lái)確定矩形位置更符合我們的習(xí)慣,我想這也是網(wǎng)上大部分代碼都是這樣的原因吧。
矩形的面積很好求,長(zhǎng)X寬就行:
矩形的面積 = (xmax -xmin) X (ymax - ymin)
好了,理清楚怎么確定矩形的位置后,接下來(lái)我們就來(lái)解決交并比的計(jì)算問(wèn)題。
交并比(Intersection over Union, IoU)是目標(biāo)檢測(cè)任務(wù)中的一個(gè)非常重要的概念。它是產(chǎn)生的預(yù)測(cè)框(Predicted bounding box)與原標(biāo)記框(Ground-truth bounding box)的交疊率,即它們的交集(相交面積)與并集(總面積)的比值。最理想情況是完全重疊,即比值為1。一般來(lái)說(shuō),這個(gè)score > 0.5 就可以被認(rèn)為是一個(gè)不錯(cuò)的結(jié)果。這個(gè)標(biāo)準(zhǔn)用于測(cè)量真實(shí)和預(yù)測(cè)之間的相關(guān)度,相關(guān)度越高,該值越高,它可以評(píng)估算法的準(zhǔn)確度。
假設(shè)平面坐標(biāo)中有兩個(gè)矩形:原標(biāo)記框(Ground-truth bounding box, G)和預(yù)測(cè)框(Predicted bounding box, P),其中G為手動(dòng)標(biāo)記的框,P為算法預(yù)測(cè)的框,并且這兩個(gè)矩形的長(zhǎng)和寬均分別與x軸和y軸平行。如下圖所示:
IoU計(jì)算公式:
所以有:矩形G(gxmin, gymin, gxmax, gymax)和矩形P(pxmin, pymin, pxmax, pymax)
求交并比的關(guān)鍵是求出相交矩形G∩P的面積。
解決這個(gè)問(wèn)題,我們只要確定相交矩形的左下(xmin, ymin)和右上(xmax, ymax)頂點(diǎn)坐標(biāo)即可,即確定(xmin, ymin, xmax, ymax)。
通過(guò)看圖,我們可以清楚的觀察到:
?
如果一下沒(méi)有看明白,可以自己在紙上多畫(huà)畫(huà),理解下。
得到了相交矩形的坐標(biāo)(xmin, ymin, xmax, ymax)那么相交矩形的面積就非常簡(jiǎn)單了。
area(G∩P) = 長(zhǎng) X 寬
w = xmax - xmin # 計(jì)算相交矩形的長(zhǎng)
h = ymax - ymin # 計(jì)算相交矩形的寬
area(G∩P) = w X h # 計(jì)算相交矩形的面積
這里還有最后一個(gè)問(wèn)題,當(dāng)計(jì)算得到的寬或者長(zhǎng)為0或者負(fù)數(shù)時(shí),說(shuō)明兩個(gè)矩形不相交,相交面積為0,那么最后的IoU就為0。這里我們有兩種處理方式:
1. 用if語(yǔ)句來(lái)分類討論:
?
2. 用max()方法來(lái)處理:
?
三、Python3 實(shí)現(xiàn)代碼
經(jīng)過(guò)以上分析,思路應(yīng)該已經(jīng)非常清晰了,這里我就直接放出完整Python3代碼。
?
這里也放一下通過(guò)左上和右下頂點(diǎn)坐標(biāo)來(lái)確定矩形的位置的Python3代碼。原理是一樣的,不要弄混就好。
?
以上這篇淺談Python3實(shí)現(xiàn)兩個(gè)矩形的交并比(IoU)就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持服務(wù)器之家。
原文鏈接:https://blog.csdn.net/qq_27283619/article/details/92616159
總結(jié)
以上是生活随笔為你收集整理的python矩形语句_浅谈Python3实现两个矩形的交并比(IoU)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: larvel php restful_L
- 下一篇: 找出两列表的共有元素python_pyt