本文對OpenPCDet項目中的iou3d模塊中的iou3d_nms_kernel.cu代碼進行解讀,本次解決的函數是box_overlap,它的輸入是兩個包圍盒,輸出是兩個包圍盒在bev下的重疊面積,計算流程是
-
確定box_a和box_b的四個角落坐標
從包圍盒中提取坐標值創建center_a來保存中心坐標點,創建box_a_corners[5]保存4個角落,通過yaw角對四個角落進行旋轉,然后將box_a_corners[4]賦值為box_a_corners[0],構成一個閉環。
-
確定相交多邊形的中心和相交頂點
尋找box每條邊和另一個box的相交頂點
尋找box角落落在另一個box內部的頂點
以上頂點構成一個相交多邊形的頂點,中心點是這些相交點的坐標平均值。
-
將多邊形頂點進行排序,然后相鄰多邊形頂點與中心點構成三角形進行面積計算,相交多邊形面積為所有三角形面積和