pythonで実現したIouとGouコード

1584 ワード

最近ネット上で多くのブロガーが書いたiouの実現方法を見ましたが、Giouのコードは比較的少ないようです。そこで自分で一つ書きました。新米は出発します。間違いがあれば指摘してください。多くの話はしません。

def Iou(rec1,rec2):
  x1,x2,y1,y2 = rec1 #               
  x3,x4,y3,y4 = rec2 #               
  area_1 = (x2-x1)*(y1-y2)
  area_2 = (x4-x3)*(y3-y4)
  sum_area = area_1 + area_2
  w1 = x2 - x1#       
  w2 = x4 - x3#       
  h1 = y1 - y2
  h2 = y3 - y4
  W = min(x1,x2,x3,x4)+w1+w2-max(x1,x2,x3,x4)#      
  H = min(y1,y2,y3,y4)+h1+h2-max(y1,y2,y3,y4)#      
  Area = W*H#     
  Iou = Area/(sum_area-Area)
  return Iou

def Giou(rec1,rec2):
  x1,x2,y1,y2 = rec1 #               
  x3,x4,y3,y4 = rec2
  iou = Iou(rec1,rec2)
  area_C = (max(x1,x2,x3,x4)-min(x1,x2,x3,x4))*(max(y1,y2,y3,y4)-min(y1,y2,y3,y4))
  area_1 = (x2-x1)*(y1-y2)
  area_2 = (x4-x3)*(y3-y4)
  sum_area = area_1 + area_2
  w1 = x2 - x1#       
  w2 = x4 - x3#       
  h1 = y1 - y2
  h2 = y3 - y4
  W = min(x1,x2,x3,x4)+w1+w2-max(x1,x2,x3,x4)#      
  H = min(y1,y2,y3,y4)+h1+h2-max(y1,y2,y3,y4)#      
  Area = W*H#     
  add_area = sum_area - Area #        
  end_area = (area_C - add_area)/area_C #(c/(AUB))/c   
  giou = iou - end_area
  return giou


rec1 = (27,47,130,90)
rec2 = (30,68,150,110)
iou = Iou(rec1,rec2)
giou = Giou(rec1,rec2)
print("Iou = {},Giou = {}".format(iou,giou))
以上のpythonで実現されたIouとGouコードは小編集とみんなに共有された内容です。参考にしていただければと思います。よろしくお願いします。