JAVA实现IOU(交并比)矩阵重叠率的计算

最近做目标追踪,很少有JAVA的IOU计算.模仿其他语言算法实现一个

IOU作用

可以衡量两个矩阵的重叠率,在目标检测中,这个重叠率可以作为跟踪的一种参数

代码

 	/**
     * IoU(交并比)计算
     * @param rect1 org.opencv.core.Rect 这里的Rect不是通用包,但是都差不多.包含了左顶点和宽高的值,有些是左上,右下的坐标点,注意转换
     * @param rect2 org.opencv.core.Rect
     * @return IoU矩阵重叠率
     */
    public static float intersectionOverUnion(Rect rect1,Rect rect2){
        int leftColumnMax = Math.max(rect1.x, rect2.x);
        int rightColumnMin = Math.min(rect1.x+rect1.width,rect2.x+rect2.width);
        int upRowMax = Math.max(rect1.y, rect2.y);
        int downRowMin = Math.min(rect1.y+rect1.height,rect2.y+ rect2.height);

        if (leftColumnMax>=rightColumnMin || downRowMin<=upRowMax){
            return 0;
        }

        int s1 = rect1.width*rect1.height;
        int s2 = rect2.width*rect2.height;
        float sCross = (downRowMin-upRowMax)*(rightColumnMin-leftColumnMax);
        return sCross/(s1+s2-sCross);
    }
/**
 * 检验代码
 */
public static void main(String[] args) {
      Rect rect1 = new Rect(107, 59, 93, 205);
      Rect rect2 = new Rect(107, 67, 124, 206);
      //0.696934
      System.out.println(bbIntersectionOverUnion(rect1, rect2));
}

参考

目标检测 - IoU 计算-python

你可能感兴趣的:(JAVA图像处理)