2009-11-08 6 views
8

Je souhaite obtenir de l'aide pour la détection d'objets 2D. Je vais donner un bref aperçu du contexte dans lequel cela sera mis en œuvre.Détecter le marqueur dans l'image 2D

Il y aura une image du plafond. Le plafond aura des marqueurs placés de sorte que l'orientation de la caméra peut être déterminée. Les images seront toujours prises face vers le haut. Mon but est de détecter un de ces marqueurs dans l'image et de déterminer sa rotation. Donc, la rotation et la mise à l'échelle (dans une moindre mesure) seront les deux principaux facteurs utilisés dans la détection d'image. Je vais écrire le logiciel en C# ou matlab (pas encore tout à fait sûr).

Par exemple, le marqueur peut être une flèche comme celui-ci:

Reference Arrow

Une image prise du plafond contiendrait des marqueurs. Le logiciel doit détecter un seul marqueur et déterminer qu'il a été pivoté de 170 degrés.

Ceiling Arrows

Je n'ai aucune expérience préalable avec l'analyse d'images. Je sais que le traitement d'image est un sujet assez vaste et j'espérais obtenir des conseils sur la direction que je devais prendre et sur les techniques qui seraient les meilleures pour mon application. Merci!

+0

Je vous suggère de changer le titre de votre question à "Détecter le marqueur dans l'image 2D". Les détections d'objets ont d'autres connotations dans l'analyse d'image. – Ivan

Répondre

3

Je recommanderais MATLAB ou si vous avez l'intention d'utiliser C#, Emgu CV est plutôt bon.

Hough transforms est une excellente idée. Une fois que vous avez détecté les bords de votre image, en utilisant, disons Canny edge detector, vous obtenez une image de bord (qui est une image binaire avec seulement 1 ou 0 pour les valeurs). Ensuite, la transformée de droite Hough (essentiellement) tourne une ligne autour de chaque pixel blanc dans l'image de bord (la résolution de la ligne dépend de vous) en utilisant une fonction paramétrée pour la ligne et calcule le nombre total de blancs (évaluée à 1) pixels le long de chaque ligne filée et stocke cette information dans un gros accumulateur qui stocke les données indexées par les paramètres de la ligne.

alt text http://upload.wikimedia.org/wikipedia/en/a/af/Hough_space_plot_example.png

Dans l'exemple ci-dessus, la forme paramétrique pour une ligne est:

rho = x*cos(theta) + y*sin(theta) 

où rho est la distance et thêta est l'angle

Afin vous pouvez voir le, si vous regardez la poubelle à une orientation particulière, vous pouvez trouver combien de lignes sont orientées à cet angle. Bien sûr, vous devrez faire un peu plus de travail pour déterminer quelles lignes sont orientées à cet angle puisque vous avez 5 autres lignes par flèche, mais cela ne devrait pas être trop difficile.

+0

votre deuxième paragraphe est mal rédigé: on dirait que la transformée de Hough est un détecteur de bord, alors que c'est un détecteur de ligne. pour être complet, un détecteur de bord de sobel s'adapterait bien ici aussi. –

+0

Hmm, je ne pense pas. Il semble assez clair que le deuxième paragraphe utilise l'image de bord pour obtenir la transformation de Hough. Deuxièmement, l'exhaustivité n'est pas un problème, car il existe ** plusieurs ** détecteurs de bord disponibles, donc en mentionner un devrait être suffisant pour diriger l'OP dans la bonne direction. En tout cas, merci pour l'entrée, je vais modifier le paragraphe. – Jacob

4

Je ne suis pas directement dans ce domaine mais je vous dirais de commencer par regarder spécifiquement la détection de bord. Si vous avez une formation en mathématiques/ingénierie des matériaux sont assez faciles à comprendre:

Cela semble susciter quelques idées: http://www.cfar.umd.edu/~fer/cmsc426/lectures/edge1.ppt

2

Vous devrez explorer la détection de bord, alors regardez dans les filtres Hough. Après cela, vous aurez besoin de regarder dans les classificateurs de modèles et l'extraction de fonctionnalités.

This paper possède un algorithme qui semble fonctionner sans détection de contours. This book excerpt est plus orienté vers le type de détection de symbole que vous souhaitez, une fois que vous avez effectué la détection de contours.

3

Comme toujours en vision par ordinateur, votre premier problème est l'illumination et l'acquisition d'images. avant d'aller plus loin, établissez comment vos marqueurs seront imprimés sur le plafond, quelle sera leur forme, quelle lumière vous utiliserez pour les voir, et quelle configuration de caméra vous aurez choisie pour regarder les marqueurs. Etant donné un bon matériel, une bonne lumière et un bon appareil photo, vous pouvez avoir aucun problème pour traiter l'image

Par exemple, vous pouvez imprimer une flèche complète dans un matériau rétro-réfléchissant, avec une queue plus longue que votre exemple, utiliser une lumière colorée et un filtre correspondant sur l'appareil photo. maintenant tout ce que vous avez sur votre image, ce sont des flèches ... il y a beaucoup d'autres façons d'acquérir l'image qui vous aidera là-bas. Une fois que vous avez des flèches simples, une simple analyse blob (qui consiste à calculer des moments statistiques d'objets dans l'image) vous donnera beaucoup d'informations: chaque flèche devrait avoir des valeurs presque égales pour les 7 moments hu, ce qui permet Pour filtrer efficacement les objets, l'orientation calculée à partir des moments centraux vous donnera l'angle de la flèche. L'analyse de blob étant seulement statistique, elle est extrêmement rapide.

3

Plusieurs systèmes ont été développés pour détecter les marqueurs et leur orientation avec vigueur:

Si votre objectif principal n'est pas d'apprendre, mais de faire fonctionner l'application, je vous suggère d'utiliser l'un d'entre eux. Ce n'est pas une tâche triviale pour un débutant de détecter de manière robuste la position et l'orientation d'un marqueur aléatoire dans une image.

D'autre part, si vous êtes intéressé à apprendre virile, je voudrais aussi vous diriger vers ARToolKit et its publications (and their references) qui expliquent comment mettre en œuvre la détection des marqueurs avec vigueur.

1

manière rigoureuse pour déterminer l'orientation d'une imagé acquise sous la géométrie projective (la plupart des caméras) utilise les points de fuite et lignes de fuite. Bonne nouvelle pour vous: votre marqueur peut être utilisé pour trouver cette information!Plus de bonnes nouvelles, votre image peut être rectifié, de sorte que les colonnes de l'image (l'axe des y) correspondra à la direction haut-bas. Vous trouverez plus d'informations sur ce sujet dans le chapitre 8 du livre de Hartley et Zisserman, Géométrie à vues multiples dans Computer Vision.

Rappelez-vous aussi que probablement vous aurez besoin de travailler sur le problème de distorsion radiale, la distorsion causée par l'objectif de la caméra. Les autres gars ont raison sur le problème de détection de flèche: vous devez utiliser détection de bord et, après cela, Hough transformer ou modèle correspondant. Reportez-vous au livre de Gonzalez et Woods Traitement d'image numérique pour plus de détails.