@@ -431,7 +431,7 @@ def merge(x, y):
431
431
return concatenate (x ), concatenate (y )
432
432
433
433
434
- def vertice_overlap (x0 , y0 , x1 , y1 , minimal_area = False , p1_area = False ):
434
+ def vertice_overlap (x0 , y0 , x1 , y1 , minimal_area = False , p1_area = False , hybrid_area = False , min_overlap = 0 ):
435
435
r"""
436
436
Return percent of overlap for each item.
437
437
@@ -441,6 +441,9 @@ def vertice_overlap(x0, y0, x1, y1, minimal_area=False, p1_area=False):
441
441
:param array y1: y for polygon list 1
442
442
:param bool minimal_area: If True, function will compute intersection/little polygon, else intersection/union
443
443
:param bool p1_area: If True, function will compute intersection/p1 polygon, else intersection/union
444
+ :param bool hybrid_area: If True, function will compute like union,
445
+ but if cost is under min_overlap, obs is kept in case of fully included
446
+ :param float min_overlap: under this value cost is set to zero
444
447
:return: Result of cost function
445
448
:rtype: array
446
449
@@ -466,14 +469,25 @@ def vertice_overlap(x0, y0, x1, y1, minimal_area=False, p1_area=False):
466
469
# Area of intersection
467
470
intersection = (p0 & p1 ).area ()
468
471
# we divide intersection with the little one result from 0 to 1
472
+ if intersection == 0 :
473
+ cost [i ] = 0
474
+ continue
475
+ p0_area_ , p1_area_ = p0 .area (), p1 .area ()
469
476
if minimal_area :
470
- cost [ i ] = intersection / min (p0 . area (), p1 . area () )
477
+ cost_ = intersection / min (p0_area_ , p1_area_ )
471
478
# we divide intersection with p1
472
479
elif p1_area :
473
- cost [ i ] = intersection / p1 . area ()
480
+ cost_ = intersection / p1_area_
474
481
# we divide intersection with polygon merging result from 0 to 1
475
482
else :
476
- cost [i ] = intersection / (p0 + p1 ).area ()
483
+ cost_ = intersection / (p0_area_ + p1_area_ - intersection )
484
+ if cost_ >= min_overlap :
485
+ cost [i ] = cost_
486
+ else :
487
+ if hybrid_area and cost_ != 0 and (intersection / min (p0_area_ , p1_area_ )) > .99 :
488
+ cost [i ] = cost_
489
+ else :
490
+ cost [i ] = 0
477
491
return cost
478
492
479
493
0 commit comments