Opérations de traitement d'image nécessaires avant la correspondance du modèle

13

Eh bien, cela peut montrer que je n'ai pas suivi de cours de traitement d'image.

J'ai ce modèle pour faire correspondre un objet dans les images. Mais le vrai objet dans les images, par exemple, ne ressemble pas à ça mais à la deuxième image. Quelles opérations dois-je effectuer pour que les images comme la seconde soient prêtes pour la correspondance de modèles? Pour info, la troisième image montre une correspondance idéale.

Dans une autre idée, j'adapte le modèle à l'image. Autrement dit, je donne quatre coordonnées de coin sur l'image pour correspondre à celles du modèle. Ensuite, il calculera un moyen d'adapter le modèle à la zone.

MISE À JOUR: Problème résolu. Merci à la réponse que j'ai choisie ci-dessous. J'ai réussi à appliquer mon modèle sur l'image. La dernière image montre le résultat.

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

Tae-Sung Shin
la source
tu ne vas pas correspondre à cette grille blanche, n'est-ce pas? Vous voulez faire correspondre la grille colorée réelle dans votre deuxième image, non?
endolith
@endolith Je pense que dans les deux cas, c'est bien.
Tae-Sung Shin
pouvez-vous partager le concept de base de votre algorithme? j'ai besoin de faire la même chose pour un graphique.
Gilad

Réponses:

9

L'image d'exemple que vous avez publiée a une perspective relativement forte (elle n'est pas imagée directement dans la direction de la surface normale), ce qui peut entraîner des problèmes avec les techniques de correspondance de modèles qui utilisent le traitement par blocs. Je suppose que vous devez prendre l'image avec une perspective forte, donc la première chose que nous voulons faire est d'estimer la transformation de l'image qui supprimera la projection en perspective et donnera une image rectifiée ("image droite").

Correction de la projection en perspective lorsque la forme est connue

Le but ultime du prétraitement est de trouver les coins de ce rectangle gris qui est l'arrière-plan du nuancier. J'ai commencé par seuiller simplement avec une valeur constante. La littérature / le Web contient de nombreuses informations sur la façon de définir un seuil lorsque l'image présente un éclairage inégal, mais si vous le pouvez, essayez de corriger la configuration de l'imagerie de sorte que l'éclairage soit relativement uniforme.

Seuil avec valeur constante

J'ai supposé que le nuancier occupait une grande partie de l'écran, il s'agit donc probablement de la plus grande zone continue de l'image. Il existe de nombreuses fonctions d'étiquetage noir et blanc (MATLABs bwlabel, IPPs LabelMarkers, OpenCV a une bibliothèque externe cvblob) qui donnera à chaque région connectée distincte son propre index. Après l'étiquetage, vous pouvez calculer les zones des composants connectés à l'aide d'un histogramme, puis choisir le composant avec la plus grande zone.

Trouver le plus gros blob

Il est généralement conseillé de remplir les composants de sorte que le composant ne comporte pas de trous, ce qui réduit le nombre de pixels de bord.

Remplissez le blob

Maintenant, nous pouvons utiliser des opérateurs de recherche de bord (j'ai utilisé la méthode basée sur le gradient, mais vous pouvez également tracer le bord en suivant les pixels blancs connectés aux pixels noirs) pour obtenir des pixels appartenant au pensionnaire.

Trouver des bords

Comme l'objet qui nous intéresse est le rectangle, j'ai ajusté quatre lignes aux pixels de bord en utilisant un ajustement de ligne robuste (RANSAC). Après avoir trouvé une nouvelle ligne, j'ai supprimé tous les points qui étaient proches de la ligne trouvée, ce qui force les opérations d'ajustement suivantes à renvoyer d'autres bords de l'objet. Enfin, lorsque toutes les arêtes ont été trouvées, j'ai calculé toutes les intersections possibles entre l'ensemble des lignes. De l'ensemble des points résultants, j'ai supprimé tous les points en dehors de l'image.

Nous avons maintenant les coins du nuancier et comme nous connaissons les dimensions du nuancier, nous pouvons calculer la matrice de transformation (homographie, projection entre deux plans. Utiliser la transformation linéaire directe (DLT) pour résoudre ) entre les coordonnées millimétriques et les coordonnées des pixels.HHH

x=HX

Cette matrice de transformation peut ensuite être utilisée pour transformer l'image d'origine de telle sorte que le nuancier est imaginé directement à partir de la direction de la normale de surface.

Ajuster les lignes aux bords

Comme on peut le voir, seule la distorsion radiale reste. Lorsque nous avons utilisé la transformation pour la transformation d'image (interpolation 2D), nous avons choisi les coordonnées d'interpolation telles que nous connaissons la résolution précise de l'image, ce qui signifie que nous connaissons maintenant par exemple la taille des lettres.H

Si nous voulons toujours faire une correspondance de modèle, nous pouvons utiliser n'importe quelle méthode de correspondance de modèle décente. Il n'est pas nécessaire que la méthode soit invariante en rotation / échelle car l'image est déjà rectifiée.

Perspective correcte

buq2
la source
1

Commencez par la détection des contours. Utilisez ensuite la transformation de Hough pour détecter les lignes droites. Déterminez ensuite quelles lignes sont parallèles et lesquelles doivent être perpendiculaires. Estimez ensuite la transformation projective de sorte que les lignes qui devraient être perpendiculaires soient réellement perpendiculaires.

Dima
la source