Quelles techniques de traitement d'image sont idéales pour cette correspondance de modèle invariant décalage / échelle particulière?


17

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:

entrez la description de l'image ici entrez la description de l'image ici entrez la description de l'image ici entrez la description de l'image ici entrez la description de l'image ici entrez la description de l'image ici

Bien sûr, ils peuvent également être à une «échelle» différente, comme on peut le voir dans cette famille:

entrez la description de l'image ici entrez la description de l'image ici entrez la description de l'image ici entrez la description de l'image ici entrez la description de l'image ici

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.

entrez la description de l'image ici entrez la description de l'image ici entrez la description de l'image ici entrez la description de l'image ici

Et bien sûr, comme grande finale, il y a la possibilité distincte de ce scénario «extrême»:

entrez la description de l'image ici

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).


Que voulez-vous dire quand vous dites 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?
Dipan Mehta

@DipanMehta Désolé pour la confusion. Ce que je veux faire est le suivant: tout d'abord, ne faites pas attention aux couleurs (c'est juste le mot à dire qu'elles ont été tracées), ce que j'aurai, c'est juste une matrice de chiffres, donc en niveaux de gris. Deuxième chose, puisqu'il n'y a pas de couleurs, je me soucie seulement du «motif» que vous voyez là avec les 4 pings que vous voyez répéter. Ainsi, le détecteur verra des variantes de ce modèle d'image comme indiqué dans les images ci-dessus, et dira «oui, ce modèle existe». Désolé pour la confusion, faites-moi savoir si je peux clarifier autre chose. Merci!
Spacey

Ok, donc si je comprends bien, étant donné qu'il y a la première ligne en haut, vous voulez savoir si le solde est également au même endroit. si c'est le cas, vous concluriez que ce modèle existe! Droite?
Dipan Mehta

@DipanMehta Oui, fondamentalement, être capable de détecter si le modèle illustré ci-dessus existe, suffisamment robuste pour faire face à l'invariance d'échelle, et assez robuste pour faire face à l'invariance de décalage. Cela a-t-il du sens? Merci,
Spacey

1
Ce que je comprends, c'est si vous avez accès aux données source dans le système réel sur lequel vous travaillez. Si vous le faites, il peut y avoir une meilleure approche qui fonctionne directement sur les données d'origine au lieu du format de spectrogramme intermédiaire sur lequel vous avez mis à zéro.
Jason R

Réponses:


6

D'une manière générale, il existe deux approches principales pour résoudre ce problème:

une. correspondance du modèle ou
b. correspondance avec un modèle paramétré.

Personnellement, vu la simplicité du modèle, je préférerais la seconde approche pour ce problème.

Étape 1: identifier les blobs de ping

Dans un premier temps, extrayez les "Boîtes" - essentiellement les carrés jaunes / bleus. Une méthode la plus simple ici pourrait être de simplement seuiller l'image. Il ne semble pas y avoir beaucoup de variations en arrière-plan, sauf que lorsque le bruit augmente, il a tendance à être assez similaire aux pings. Par conséquent, le seuil peut être global à travers l'image - et je pense que vous pourrez obtenir un seuil décent qui fonctionnerait à travers les images. Le seuil, cependant, doit être intelligent afin que vous puissiez utiliser quelque chose comme la méthode d'Otsu. Voir ceci et cela pour plus de référence.

Amélioration des blocs

L'une des bonnes choses que vous pouvez faire pour supprimer les points parasites qui ressemble au ping au premier plan, car certains pixels à l'intérieur des pings sont également bleus. Vous avez besoin ici d'une opération morphologique appelée "Ouverture". Voici l'une des références de HIPR . Ce type d'opérations nécessite une forme intelligente qui permet de conserver des formes similaires et d'en supprimer d'autres. Dans votre cas, vous pouvez choisir des lignes horizontales. À la fin de cela, vous avez des pixels d'arrière-plan et de premier plan séparant proprement les pings sans se toucher.

Étape 2: marquer / enregistrer les blocs

Maintenant que vous avez le plus propre blobs possibles, il est temps de les marquer comme 1,2,3,4 ou A, B, C, D etc. Ceci est généralement accompli par ce qu'on appelle un algorithme simple. Parcourez chaque pixel et s'il touche une région marquée, et est également au premier plan, affectez-le à ce segment, sinon créez-en un nouveau. S'il vous arrive de trouver plus de 4 segments importants, vous devez choisir les plus pertinents. Appliquez ici une heuristique plutôt qu'un algorithme théorique.

Étape 3: Modélisation des paramètres

Maintenant, une fois que nous avons probablement les 4 meilleurs candidats des 4 pings correspondants, vous pouvez identifier les cadres de délimitation - essentiellement les coins supérieur gauche et inférieur droit (ou la plupart des pixels à gauche et à droite, ainsi que les rangées supérieure et inférieure du blob) . Trouvez la boîte englobante, vous pouvez infliger une amende au centre de gravité de chaque boîte de ping.

Cje où je{1,2,3,4}C1C1

par conséquent, les distances entre les centroïdes peuvent maintenant être calculées:

C1je[X,y]={C1[X]-Cje[X],C1[y]-Cje[y]}

Lje où je{1,2,3,4}

Vous avez essentiellement 8 paramètres vecoter:

1.{C1[X],C1[y]}2..4C1je[X,y]5..8Lje

Étape 4: Classification
Dans la dernière étape, nous devons maintenant avoir une classification, qu'il y ait un ping ou non.

Pour quelque chose comme ça, vous pouvez avoir un joli cadre de classifieur bayésien.

Il y a deux hypothèses que vous avez

H0: Le modèle de ping existe.
H1: Le modèle de ping n'existe pas

C1,je[X] cas ici, mais vous pouvez l'étendre.

D'abord, vous étudiez beaucoup d'images où vous savez qu'elles appartiennent à l'image. Maintenant, vous pouvez tracer divers histogrammes ou appliquer une méthode d'estimation de densité. Lisez la classification des modèles par Duda Hart.

C1,je[X]μ=20,σ=.1

C1,jeH0P[C1,je[X]|H0]

Maintenant, à partir des données de test

P[H0|C1,je[X]=X1]C1[X]X1H0

Par conséquent, vous pouvez calculer

P[H0 |C1,je[X]]=P[C1,je[X]|H0]P[H0]P[C1,je[X]]

Vous devez combiner cette expression pour l'expression vectorielle et devez déployer beaucoup d'efforts pour mettre exactement l'estimation des paramètres à faire. Mais je vous laisse ici avec une approche de base.

Veuillez faire vos propres calculs, ce sera long, mais devrait toujours être assez intuitif.

P[H0|tous les paramètres]>1/2 alors le modèle de ping existe.

EDITER
Puisque vous définissez déjà les critères spécifiques de 110 +/- 5 pixels, la dernière étape peut être plus simple. Vous n'avez probablement pas tout à fait besoin de calculer toutes ces probabilités si vos critères de classification sont fixes.


Merci beaucoup! Je vais devoir digérer cela et vous revenir.
Spacey

3

Ce problème me semble être le problème de détection + estimation d'intervalle de répétition d'impulsion. Je devrai développer cette réponse au fil du temps, mais le type d'algorithmes qui fonctionnent bien dans ce problème est la probabilité maximale sur un réseau .


Merci, oui, je serai heureux d'entendre vos réflexions à ce sujet. En attendant, je regarderai votre lien.
Spacey

Peter, avez-vous eu le temps d'y penser comme vous l'avez mentionné? J'aimerais savoir ce que vous en pensez.
Spacey

Je viens de recommencer à bricoler (avril était une radiation). Je peux me tromper: la façon dont le document de Clarkson formule le problème est différent ... permettez-moi de creuser un peu plus.
Peter K.
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.