IoU (Intersection over Union)

import unittest

def IoU(box1, box2):
    """  Interscetion over Union, box = [x1, y1, x2, y2] """
    intersection_x = min(box1[2], box2[2]) - max(box1[0], box2[0])
    intersection_y = min(box1[3], box2[3]) - max(box1[1], box2[1])
    intersection = 0 if intersection_x < 0 or intersection_y < 0 \
                     else intersection_x * intersection_y

    if intersection <= 0:
        return 0

    union = (box1[2] - box1[0]) * (box1[3] - box1[1]) + \
            (box2[2] - box2[0]) * (box2[3] - box2[1]) - intersection

    return intersection / union

class TestIoU(unittest.TestCase):

    def test_IoU_case0(self):
        self.assertEqual(IoU([0,0,2,2], [1,1,3,3]), 1/7)
        
    def test_IoU_case1(self):
        self.assertEqual(IoU([1,1,3,3], [0,0,2,2]), 1/7)

    def test_IoU_case2(self):
        self.assertEqual(IoU([1,0,3,2], [0,1,2,3]), 1/7)

    def test_IoU_case3(self):
        self.assertEqual(IoU([0,1,2,3], [1,0,3,2]), 1/7)

    def test_IoU_case4(self):
        self.assertEqual(IoU([0,0,3,3], [1,1,2,2]), 1/9)

    def test_IoU_case5(self):
        self.assertEqual(IoU([1,1,2,2], [0,0,3,3]), 1/9)

    def test_IoU_case6(self):
        self.assertEqual(IoU([0,0,1,1], [2,2,3,3]), 0)

    def test_IoU_case7(self):
        self.assertEqual(IoU([2,2,3,3], [0,0,1,1]), 0)

    def test_IoU_case8(self):
        self.assertEqual(IoU([1,0,3,2], [0,0,2,2]), 2/6)

    def test_IoU_case9(self):
        self.assertEqual(IoU([1,0,3,2], [0,0,1,1]), 0)


unittest.main()

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值