Bonsoir,
Actuellement en 2ème année d'école d'ingénieurs, j'utilise, dans le cadre d'un projet robotique, OpenCV pour effectuer un suivi.
Concrètement, il s'agit pour notre ASV (Autonomous Surface Vessel) équipé d'une caméra et de deux propulseurs de suivre une bouée (rouge) tractée par un bateau à moteur, en devant rester à une certaine distance de celui-ci.
Pour l'instant, voici les étapes successives:
- Passage du domaine RGB à HSV
- Seuillage pour conserver les pixels rouges
- Application d'un filtre CV_GAUSSIAN pour éliminer le bruit
- Erosion pour supprimer les pixels isolés
- (éventuellement Dilatation)
- Calcul des moments de l'image qui me permet (si le filtre gaussien et l'érosion sont suffisants) de récupérer le barycentre de ma forme.
Ainsi, j'ai découpé mon image en 3 parties. Au milieu de l'image se trouve une zone où mes deux propulseurs tournent à la même vitesse et où l'on considère donc que le robot est "en face" de la cible. De part et d'autre de cette zone, on agit, suivant l'éloignement de la cible (calculé grâce au barycentre) par rapport à l'axe central de la caméra et via une régulation (non définie pour l'instant), sur les deux propulseurs.
Jusqu'ici çà va à peu près.
Comme vous l'aurez compris, le problème suivant l'axe des x (horizontal dans le plan de la caméra) est réglé (l'axe des y ne nous intéresse pas).
Cependant, ça se complique lorsque l'on s'intéresse à la distance entre la cible et la caméra (profondeur).
En effet, nous avions pensé à trouver une relation entre l'aire de la cible calculé par OpenCV et la distance réelle entre la cible et la caméra, en effectuant par exemple une régression (linéaire, puissance,...).
J'aurai donc aimé savoir si vous aviez un avis sur notre méthode et/ou si vous aviez d'autres méthodes à nous suggérer pour trouver la distance réelle entre la caméra et la cible.
Merci!![]()
Partager