Calcule el porcentaje de superposición del cuadro delimitador, para la evaluación del detector de imágenes usando Python

Ocurren varios casos en los que necesita calcular en qué porcentaje se superponen dos cuadros en una imagen. ¿Te ha ocurrido una situación similar? Lea el artículo a continuación para saber cómo puede lidiar con ese problema. Lo que hacemos exactamente es obtener las dimensiones de dos cajas del usuario. Luego, calcula la intersección de dos cajas y la unión de dos cajas. Finalmente, divida la intersección por la unión y multiplíquela por 100 para calcular el porcentaje del cuadro delimitador.

Implementación paso a paso:

Paso 1: Importación de las bibliotecas

En primer lugar, importamos la biblioteca Polygon. El paquete Polygon maneja formas poligonales en 2D

from shapely.geometry import Polygon

Paso 2: Obtener las dimensiones de las cajas

Ahora, tomamos las dimensiones de los dos polígonos del usuario para los que desea calcular el porcentaje del cuadro delimitador.

box_shape_1 = [#Dimensions of Box-1]
box_shape_2 = [#Dimensions of Box-2]

Paso 3: Dibujar polígono a partir de dimensiones

En este paso, dibujaremos los polígonos usando la función Polygon() que es una función de dibujo introducida en el módulo wand.drawing para dibujar formas complejas.

polygon_1 = Polygon(box_shape_1)
polygon_2 = Polygon(box_shape_2)

Paso 4: Calcule la intersección de los cuadros delimitadores

Además, dividir la intersección de dos polígonos con la unión de dos polígonos. La intersección de dos polígonos se calcula usando la función de intersection(), mientras que la unión de dos polígonos se calcula usando la función union() respectivamente.

intersección = polígono_1.intersección(polígono_2).área / polígono_1.unión(polígono_2).área

Paso 5: Imprime el porcentaje de intersección

Finalmente, multiplique el resultado obtenido en el último paso por 100 para calcular el porcentaje y luego imprimir el resultado. Además, no olvide redondear el resultado por 2 dígitos. 

print(round(intersect*100,2),'%')

Ejemplo 1: 

En este ejemplo, hemos usado el polígono con 3 lados, es decir, un triángulo, y luego calculamos el porcentaje de cuadro delimitador de esos polígonos.

Python3

# Python program to calculate
# percentage of bounding
# box overlap, for Image
# Detector Evaluation
 
# Import the library Polygon
from shapely.geometry import Polygon
 
# Give dimensions of shape 1
box_shape_1 = [[4, 2], [6, 4], [4, 6]]
 
# Give dimensions of shape 2
box_shape_2 = [[5, 3], [1, 4], [5, 5]]
 
# Draw polygon 1 from shape 1
# dimensions
polygon_1 = Polygon(box_shape_1)
 
# Draw polygon 2 from shape 2
# dimensions
polygon_2 = Polygon(box_shape_2)
 
# Calculate the intersection of
# bounding boxes
intersect = polygon_1.intersection(
    polygon_2).area / polygon_1.union(polygon_2).area
 
# Print the intersection percentage
print(round(intersect*100, 2), '%')

Producción:

28.0 %

Ejemplo 2:

En este ejemplo, hemos usado el polígono con 4 lados, es decir, un triángulo, y luego calculamos el porcentaje de cuadro delimitador de esos polígonos.

Python3

# Python program to calculate
# percentage of bounding
# box overlap, for Image
# Detector Evaluation
 
# Import the library Polygon
from shapely.geometry import Polygon
 
# Give dimensions of shape 1
box_shape_1 = [[511, 41], [577, 41],
               [577, 76], [511, 76]]
 
# Give dimensions of shape 2
box_shape_2 = [[530, 59], [610, 59],
               [610, 94], [530, 94]]
 
# Draw polygon 1 from shape 1
# dimensions
polygon_1 = Polygon(box_shape_1)
 
# Draw polygon 2 from shape 2
# dimensions
polygon_2 = Polygon(box_shape_2)
 
# Calculate the intersection of
# bounding boxes
intersect = polygon_1.intersection(
    polygon_2).area / polygon_1.union(polygon_2).area
 
# Print the intersection percentage
print(round(intersect*100, 2), '%')

Producción:

18.53 %

Publicación traducida automáticamente

Artículo escrito por vin8rai y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *