2010-11-27 3 views
4

Je cherche un moyen efficace de trouver un modèle d'objet dans un tableau. Voici le problème que je dois aborder. J'écris une application d'interface tangible qui recueille des données de la webcam, la convertit en une image en noir et blanc à partir de laquelle je crée un tableau. Le tableau créé ressemble à ceci:Rechercher un modèle d'objet dans un tableau en C#

1111111111111111111111111111 
1111110001111111111000111111 
1111100000111111110000011111 
1111100000111111110000011111 
1111110001111111111000111111 
1111111111111111111111111111 

Où les zéros représentent la couleur noire dans l'image. J'ai environ 32 (4 lignes avec 8 cercles dans chaque cercle) et j'ai besoin de trouver un moyen efficace de trouver leurs coordonnées. Je n'ai pas besoin de toute la forme, juste un ensemble de coordonnées pour chaque cercle.

Merci pour votre aide.

Cordialement, Teodor Stoyanov

+0

Quelle est la relation entre les cercles et leurs coordonnées et ce tableau? –

+0

Intrigant pour dire le moins. Je suis intéressé par ce que seront les réponses. – IAbstract

+0

Cela ressemble beaucoup à des devoirs. S'il vous plaît, dites-le ou non. –

Répondre

1

Trois options que je peux voir immédiatement (Tuple est utilisé pour représenter les coordonnées dans votre matrice):

  1. Vous pouvez utiliser un BitArray pour chaque point la matrice, le bit est positionné si la coordonnée a un O, le coût serait O (longueur de ligne x longueur de colonne) pour le stockage. Récupération est O (1) si vous connaissez les coordonnées que vous voulez vérifier autrement, O (n) si vous voulez juste trouver tous les O

  2. Vous pouvez utiliser un List<Tuple<int,int>> pour stocker uniquement les coordonnées pour chaque O la matrice, le coût serait O (m) pour le stockage, m étant le nombre d'O. Récupération est également O (m)

  3. alternative à l'option 2, vous pouvez utiliser un Dictionary<Tuple<int, int>, bool>, qui permet O (1) la récupération temps si vous connaissez les coordonnées que vous souhaitez vérifier.

+0

Avez-vous compris quel est le problème? Je ne peux pas le comprendre. –

+0

il y a aussi le 'BitVector32' avec 'assignable'' Slots'. Chaque emplacement peut être facilement affecté comme VBytes ["A"], VBytes ["B"], etc., IIRC. http://msdn.microsoft.com/en-us/library/eeb3ez18.aspx – IAbstract

+0

C'est ce que j'utilise, un bitaray et une liste pour stocker les coordonnées. La chose est que je veux trouver seulement un ensemble de coordonnées pour chaque objet, mais un objet se compose de plusieurs tangentes 0 dans les deux dimensions. Donc, si j'ai les coordonnées pour l'objet, les coordonnées suivantes devraient être pour le cercle suivant, pas pour le prochain 0 dans mon cercle actuel. – TE0

0

Il n'y a vraiment pas un moyen facile de faire cela, mais la meilleure chose que vous pouvez faire est de bricoler avec Artificial Neural Networks. Ils vous permettent d'alimenter les données et d'obtenir une sortie sur plusieurs entrées de données différentes. Si vous construisez correctement le réseau, il ajustera automatiquement son poids sur plusieurs itérations.

Désolé, mais je doute que vous allez obtenir la solution exacte pour vous dans le code. Bien que je ne l'ai pas utilisé l'une de ces bibliothèques ou des ressources, un rapide coup d'œil sur eux les rend assez décent:

1

Choisissez un 0 arbitraire et faire un remplissage d'inondation à partir de cela. Moyenne les coordonnées de tous les 0 que vous trouvez pour obtenir le centre du cercle. Effacez les 0 que vous avez inondés et répétez.

+0

Une solution aussi élégante! – configurator

Questions connexes