2015-09-15 2 views
1

Question simple. Comment dessiner la courbe à travers tous ces points comme l'homme ferait?Comment ajuster la courbe à travers le nuage de points? OpenCV/C++

Mon exemple l'image d'entrée est ici:

enter image description here

+1

Votre question est * loin * trop large pour être répondue ici. Alternativement, vous * pourriez * [utiliser simplement votre main] (http://chat.stackoverflow.com/transcript/message/25729896#25729896). – cybermonkey

+1

me semble légitime –

Répondre

2

Vous avez beaucoup d'options.

1) Si les points sont principalement sur une ligne comme dans l'exemple, la plus simple serait d'utiliser des transformations morphologiques (http://docs.opencv.org/3.0-beta/doc/py_tutorials/py_imgproc/py_morphological_ops/py_morphological_ops.html). Par exemple, si vous utilisez la fermeture (qui est dilatée et érodée), vous allez d'abord agrandir les points en les dilatant (afin qu'ils se touchent), puis vous allez les éroder (pour qu'ils reviennent à leur origine taille tout en se touchant). Cela peut imiter une ligne.

2) Vous pouvez utiliser la fonction fitLine d'OpenCV, qui correspond à une ligne d'un ensemble 2D ou 3D. (http://docs.opencv.org/modules/imgproc/doc/structural_analysis_and_shape_descriptors.html)

3) Vous pouvez rejoindre point par point. Cependant, pour cela, vous devez deviner l'orientation des segments de ligne et ordonner les points en conséquence. Vous pouvez utiliser des structures OBB (bounded boxing box) pour conserver les points appartenant à certains segments de ligne, puis utiliser l'axe dominant d'OBB comme segment de ligne.

+0

Oui. C'est la ligne sur l'image, mais c'est mal capturé. Toutes mes images ressembleront à ceci. Je vous remercie! Je ne savais pas que la fonction fitLine existait. – Vladimir

1

comme ilke444 dit, je voudrais utiliser l'opération de fermeture morphologique, ou même dilater quelques fois et ensuite utiliser l'opérateur «squelette».

après que vous avez une ligne mince belle, je suppose que vous voulez un contour continu, pas nécessairement droit line.so vous pouvez utiliser ApproxPolyDP: http://docs.opencv.org/modules/imgproc/doc/structural_analysis_and_shape_descriptors.html#approxpolydp

il renvoie une liste de points qui décrivent le contour, et vous pouvez définir sa précision.

+0

J'ai essayé exactement ce que vous avez décrit, mais trouver le squelette prend tellement de ms. Merci les gars pour des réponses rapides. Je sais maintenant quoi faire! – Vladimir