Un problème dont j'avais discuté ici à l'origine a évolué et aurait pu devenir un peu plus simple à mesure que je l'étudiais davantage et obtenais de nouvelles informations.
En bout de ligne, je voudrais pouvoir détecter ce modèle illustré ici, en utilisant des techniques de vision par ordinateur / traitement d'image. Comme vous pouvez le voir, le motif idéal est composé de quatre «pings». La reconnaissance d'objet doit être:
- Invariant de décalage
- Horizontalement, l'image sera cyclique. (c.-à-d. pousser vers la droite, sortir à gauche et vice-versa).
- (Heureusement) Verticalement, ce n'est pas cyclique. (c'est-à-dire, poussez vers le haut ou vers le bas et cela s'arrêtera).
- Échelle invariante (les pings peuvent varier en «épaisseur» comme vous pouvez le voir.)
Je pourrais continuer encore et encore à ce sujet mais j'ai joint des images couvrant ce que je veux dire, veuillez voir ci-dessous:
Bien sûr, ils peuvent également être à une «échelle» différente, comme on peut le voir dans cette famille:
Et enfin, voici quelques scénarios `` réalistes '' de ce que je pourrais réellement recevoir, où il y aurait du bruit, les lignes pourraient `` s'estomper '' lorsque vous vous dirigez vers le bas, et bien sûr, l'image aura beaucoup de lignes parasites, d'artefacts , etc.
Et bien sûr, comme grande finale, il y a la possibilité distincte de ce scénario «extrême»:
Donc, encore une fois, je voudrais demander quelques conseils sur les techniques de vision par ordinateur que je devrais utiliser ici afin de détecter au mieux l'occurrence de mon modèle, où je dois être invariant par décalage et échelle comme vous pouvez le voir, et être également en mesure d'obtenir des résultats décents pour les scénarios réalistes. (La bonne nouvelle est que je n'en ai PAS besoin pour être invariant par rotation). La seule idée que j'ai pu trouver jusqu'à présent est une corrélation 2D.
Je dois ajouter qu'en réalité, je n'ai PAS d'images colorées - je vais juste obtenir un martix de nombres, donc je suppose que nous parlons de «niveaux de gris».
Merci d'avance!
PS Pour ce que ça vaut, je vais probablement utiliser C ouvert V.
EDIT # 1:
Sur la base des commentaires, j'ai ajouté les détails que vous avez demandés ici:
Pour les caractéristiques définissant les données, nous pouvons supposer ce qui suit:
La longueur horizontale de chaque ping peut varier, mais j'en connais les limites supérieures et inférieures. OUI pour tout ce qui se trouve dans cette limite, NON pour tout ce qui se trouve à l'extérieur (Exemple, je sais que la longueur des pings peut être comprise entre 1 et 3 secondes, par exemple).
Tous les pings doivent être «visibles» pour OUI, cependant, la dernière ligne peut être manquante et vous voulez toujours dire «OUI». Sinon NON.
La longueur verticale (l '«épaisseur») de chaque ping peut varier, mais encore une fois, sachez également les limites supérieure et inférieure. (Similaire à ce que vous voyez sur ces images). OUI pour tout ce qui se trouve dans cette limite. NON pour rien à l'extérieur.
La hauteur entre chaque ping doit toujours être la même pour OUI. Si ce n'est pas le cas, alors NON. (Exemple, vous pouvez voir comment tous les pings sont de la même hauteur les uns par rapport aux autres, ~ 110 sur l'axe vertical). Donc, 110 +/- 5 peut être OUI, tout le reste doit être NON.
Je pense que c'est à ce sujet - mais faites-moi savoir quoi d'autre je peux ajouter ... (De plus, tout ce qui est montré ici devrait s'inscrire comme OUI, btw).
detect this pattern shown here
? Êtes-vous simplement intéressé à isoler la ligne rouge / jaune ou voulez-vous réellement une expression qui calcule la relation entre ces lignes. Seules la recherche de lignes ne pouvait nécessiter qu'un certain seuil ou une segmentation. Que voulez-vous vraiment?