【Python】2D/3D框IOU简单计算方法

算是破事水了哈哈哈

还是记录一下吧

万一能帮助到别人

文章目录

一、2D框

思路+原理:

以下都以矩形框为例

  • 首先,框必须有能确定4个顶点坐标的参数,我这里用的中心坐标+长宽。如果需要旋转,还需要旋转角度。下以逆时针旋转为例。

  • 旋转的原理是先通过旋转角度构造旋转矩阵,然后左乘坐标进行旋转:

    • 注意这个情景下使用矩阵乘法时坐标得是这个格式: [ ( x 1 , x 2 , x 3 , x 4 , . . . ) , ( y 1 , y 2 , y 3 , y 4 , . . . ) ] [(x1, x2, x3, x4, ...), (y1, y2, y3, y4, ...)] [(x1,x2,x3,x4,...),(y1,y2,y3,y4,...)]

    • 二维旋转都是绕原点旋转,如果希望绕某点旋转,得通过先平移到原点,再平移回去的方式完成(如果有其他方式请告诉我)。

    • 这个旋转函数不用自己写,我们直接使用shapely里的rotate完成。下面的代码只是给大家看看原理。

    def to_2d_rot_matrix(angle, degrees=False):
        """
        计算二维平面旋转矩阵的函数。
        angle: 旋转角度。
        degrees: 使用弧度制还是角度值。默认False,表示弧度制。
        """
        if degrees:
            angle *= np.pi / 180
        return [
            [np.cos(angle), -np.sin(angle)],
            [np.sin(angle