Comparer les deux boîtes englobantes les uns avec les autres Matlab
J'ai deux les coordonnées de deux cases, l'une d'elles est la vérifier le terrain et l'autre est le résultat de mon travail. Je veux évaluer l'exactitude de la mine à contre-vérifier le terrain une. Donc je me demande si quelqu'un a des suggestions
La boîte englobante de détails est enregistré dans ce format [x,y,width,height]
- Je ne sais pas qui downvoted... mais ce n'est pas vraiment mauvaise à une question.
- En passant, vous êtes la détection de n'importe quel objet?
- est-ce une question sur le calcul de la zone de chevauchement de deux cases ?
- Grâce Parag pour la réponse, et oui ses pour la détection d'objets
- oui
- Veuillez accepter la réponse si vous l'avez trouvé utile.
Vous devez vous connecter pour publier un commentaire.
Modifier: j'ai corrigé l'erreur signalé par d'autres utilisateurs.
Je suis en supposant que vous êtes la détection d'un objet et vous tracez un cadre de sélection autour d'elle. Ceci relève largement étudié/objet de recherches de la zone de détection d'objet. La meilleure méthode d'évaluation de l'exactitude du calcul de intersection sur l'union. Ceci est pris à partir de la PASCAL VOC défi, de ici. Voir ici de visuels.
Si vous avez une boîte englobante de la détection et de la vérité terrain de la boîte englobante, puis la zone de chevauchement entre eux doit être supérieure ou égale à 50%. Supposons que la vérité du terrain de la boîte englobante est
gt=[x_g,y_g,width_g,height_g]
et le prédit de de la boîte englobante estpr=[x_p,y_p,width_p,height_p]
puis la zone de chevauchement peut être calculé en utilisant la formule:Je l'espère, son clair pour vous maintenant.
unionArea
dans un mauvais sens. Lire ma réponse pour plus de détails.Vous devez calculer l'intersection et d'union, puis la L'indice de Jaccard (intersection/union) est une valeur entre 0 et 1 (1 match parfait, 0 signifie parfait décalage).
Essayer d'intersection sur l'Union
Intersection sur l'Union est une évaluation de la mesure utilisée pour mesurer la précision d'un détecteur d'objets sur un jeu particulier de données.
Plus formellement, pour l'application de l'Intersection sur l'Union pour l'évaluation d'un (arbitraire) détecteur d'objets dont nous avons besoin:
Ci-dessous, j'ai inclus un exemple visuel d'un rez-de-vérité de la boîte englobante rapport à une prévision de la boîte englobante:
Le prédit la boîte englobante est dessiné en rouge tandis que le rez-de-vérité (c'est à dire, la main sur l'étiquette) zone de délimitation est dessiné en vert.
Dans la figure ci-dessus, nous pouvons voir que notre détecteur d'objets a détecté la présence d'un panneau d'arrêt dans une image.
Le calcul de l'Intersection sur l'Union peut donc être déterminé par:
Tant que nous aurons ces deux ensembles de boîtes englobantes nous pouvons appliquer Intersection sur l'Union.
Voici le code Python
La
gt
etpred
sontgt
: Au rez-de-vérité de la boîte englobante.pred
: Les prévisions de la boîte englobante de notre modèle.Pour plus d'informations, vous pouvez cliquer sur ce post
La réponse qui a été marquée meilleure réponse ci-dessus est faux.
La solution proposée par @Parag fait calcule le ratio de la zone d'intersection et de la zone du minimum couvrant rectangle. Il devrait être la zone de l'union à la place.
Donc, le code serait
Vous pouvez vérifier cette code pour confirmer ce qui précède (Ce code a remporté le Pascal défi).
Toutes les réponses à la question vous suggérons d'utiliser intersection sur l'union (reconnaissance de dette) métrique. C'est un vectorisé version de reconnaissance de dette qui peut être utilisé pour plusieurs roi correspondance.
Il calcule par paires reconnaissance de dette pour les deux ensembles de boîtes englobantes. Si
R1
etR2
chaque spécifier un rectangle, la sortieIoU
est un scalaire.R1
etR2
peut également être matrices, où chaque ligne est un vecteur position ([x y w h]
).IoU
est alors une matrice donnant la reconnaissance de dette de tous les rectangles spécifié parR1
avec tous les rectangles spécifié parR2
. C'est, siR1
estn-by-4
etR2
estm-by-4
, puisIoU
est unn-by-m
matrice oùIoU(i,j)
est la reconnaissance de dette du rectangle spécifié par lei
ième ligne deR1
et laj
ième ligne deR2
.Il accepte également un paramètre scalaire,
treshold
, pour définir lamatch
de sortie. Taille dematch
est exactement commeIoU
.match(i,j)
indique si les rectangles spécifié par lei
ième ligne deR1
et laj
ième ligne deR2
match.Par exemple,
retourne:
qui signifie
R1(1, :)
etR1(2, :)
matchR2(3, :)
etR2(2, :)
respectivement.PS:
Au moment où je poste cette réponse, il y a une petite erreur dans le Parag réponse (acceptée dans la réponse ci-dessus). À mon humble avis, ils calculent la zone de l'union dans un mauvais sens. Le
unionCoords
dans leur réponse est en fait le carré bleu dans l'image ci-dessous, etunionArea
est son domaine, qui n'est évidemment pas la zone de l'union du rouge et du vert rectangles.Juste une extension de ce que @Parag S. Chandakkar dit. J'ai édité son code pour obtenir rapport de recouvrement de la matrice pour le plus grand nombre de cases.
Cas vous avez vous voulez construire la fonction et l'utiliser directement pour obtenir de chevauchement de la matrice (M,N) (chaque entrée se situe entre [0,1]) de l'encadré 1(M,4) et Box2(N,4).
(L'encadré 1 et Box2 contient(x,y,largeur,hauteur) des données de M et de N cases, respectivement).
C'est kindof fonction parallèle à bboxOverlapRatio (http://in.mathworks.com/help/vision/ref/bboxoverlapratio.html) mais n'est pas disponible dans R2014a ou plus tôt.