Algorithme d'ajustement de ligne OpenCV
J'essaie de comprendre OpenCV fitLine() algorithme.
C'est le fragment de code à partir d'OpenCV:
icvFitLine2D
fonction - icvFitLine2D
Je vois qu'il existe une fonction aléatoire qui choisit les points de rapprochement, puis calcule les distances de points équipées de ligne (avec choisi points), puis choisir d'autres points et tente de minimiser la distance avec choisi distType
.
Quelqu'un peut-il préciser ce qu'il advient de ce moment sans dur mathématiques et en supposant qu'aucune grande statistique de la connaissance?. OpenCV commentaires de code et les noms de variables ne m'aide pas à la compréhension du code.
source d'informationauteur krzych
Vous devez vous connecter pour publier un commentaire.
(C'est une vieille question, mais le sujet a piqué ma curiosité)
La OpenCV
FitLine
implemements deux mécanismes différents.Si le paramètre
distType
est fixé àCV_DIST_L2
puis un standard non pondérée des moindres carrés ajustement est utilisé.Si l'un des autres
distTypes
est utilisé (CV_DIST_L1
CV_DIST_L12
CV_DIST_FAIR
CV_DIST_WELSCH
CV_DIST_HUBER
) ensuite, la procédure est une sorte de RANSAC ajustement:distType
Voici une description plus détaillée dans le pseudo-code:
Les poids sont calculés en fonction du
distType
selon le manuel la formule qui estweight[Point_i] = 1/p(distance_between_point_i_and_line)
où p est:Malheureusement je ne sais pas qui
distType
est le mieux adapté pour le tri de données, peut-être quelque chose peut faire la lumière sur ce point.Quelque chose d'intéressant, j'ai remarqué: La choisi norme est utilisé uniquement pour le itératif repondération, la meilleure solution parmi les trouvés est toujours choisi en fonction de la norme 2 (La ligne pour qui la brute somme des moindres carrés est minime). Je ne suis pas sûr que ce soit correct.