Comment puis-je détecter un panneau quadrilatère à partir d'une image capturée à l'aide d'un téléphone mobile? Comment détecter des formes comme un rectangle? rectangle arrondi (coins arrondis au lieu de coins de forme)?
J'utilise opencv.wrapper mais je suis nouveau dans ce domaine.
Merci.
Voici l'exemple: texte alternatif http://www.freeimagehosting.net/uploads/b03442fd36.png
texte alternatif http://www.freeimagehosting.net/uploads/e6b36040e8.png
En raison du bruit et de nombreuses lignes, je ne suis pas en mesure de déterminer quelle est la ligne frontière de l'enseigne. Parfois, je peux trouver la frontière des lignes après la transformation de Hough. Je suis pris au piège .... dans ce genre de scénario ...
Ce sont les 2 photos brutes prises à partir d'un appareil photo de téléphone portable
texte alternatif http://www.freeimagehosting.net/uploads/6dbd613edf.jpg texte alternatif http://www.freeimagehosting.net/uploads/720da20080.jpg
J'ai besoin de conseils pour voir comment je peux traiter l'image pour sortir l'enseigne?
Merci beaucoup
Réponses:
Vos deux images contiennent de nombreuses lignes qui n'ont rien à voir avec le signe que vous recherchez. Et certaines de ces lignes sont plus longues / ont un contraste plus élevé que les lignes que vous voulez réellement, donc je pense que la détection des lignes de bord (par exemple en utilisant une transformation de Hough ou en additionnant les contrastes horizontalement / verticalement) ne fonctionnera pas.
Mais: l'enseigne que vous recherchez présente d'autres caractéristiques qui devraient être plus faciles à détecter:
Vous recherchez donc une grande zone connectée à faible contraste. J'ai piraté un algorithme de validation de principe dans Mathematica. (Je ne suis pas un expert OpenCV, mais je mentionnerai la fonction OpenCV respective quand je les connais.)
Tout d'abord, j'utilise des filtres dérivés gaussiens pour détecter l'amplitude du gradient à chaque pixel. Le filtre dérivé gaussien a une grande ouverture (11x11 pixels dans ce cas), il est donc très insensible au bruit. Je normalise ensuite l'image du gradient pour signifier = 1, donc je peux utiliser les mêmes seuils pour les deux échantillons.
Implémentation OpenCV: Vous pouvez utiliser
sepFilter2D
pour le filtrage réel, mais apparemment, vous devrez calculer vous-même les valeurs du noyau du filtre .Le résultat ressemble à ceci:
Sur cette image, l'arrière-plan du panneau est sombre et les bordures du panneau sont lumineuses. Je peux donc binariser cette image et rechercher des composants connectés sombres.
Implémentation d'OpenCV: le seuillage devrait être simple, mais je pense qu'OpenCV ne contient pas d'analyse de composants connectés - vous pouvez utiliser soit le remplissage d'inondation ou cvBlobsLib pour cela.
Maintenant, il suffit de trouver le plus gros blob près du centre de l'image et de trouver la coque convexe (j'ai simplement utilisé le plus gros blob qui n'est pas connecté à l'arrière-plan, mais cela pourrait ne pas être suffisant pour chaque image).
Résultats:
la source
Une autre approche que vous pouvez adopter qui est plus robuste aux bruits dans cette situation consiste à générer une courbe du niveau de gris moyen de l'image le long de l'axe x et le long de l'axe y. Autrement dit, calculez le niveau de gris moyen pour chaque ligne / colonne de l'image.
Si, par exemple, l'enseigne (ou ses bordures) est plus claire que son environnement (ce qui est le cas pour tous les exemples montrés dans la question), vous aurez deux pics dans votre courbe d'axe x (pour la gauche et la droite et les bordures ) et deux pics dans votre courbe de l'axe y (pour les bordures supérieure et inférieure). En utilisant une technique de détection de bordure pour un signal à 1 dimension (peut-être un filtre passe-haut), vous pouvez déduire les coordonnées des coins de l'enseigne.
J'ai vu cette approche utilisée pour détecter les plaques d'immatriculation et également pour la reconnaissance faciale (le nez a tendance à être la partie la plus brillante du visage, donc il génère un pic dans les courbes des axes x et y).
la source
Cela pourrait être une petite idée à l'envers, mais cela pourrait valoir la peine d'être essayé. Au lieu d'essayer de détecter le rectange et de penser le texte comme du bruit , vous pouvez peut-être traiter le texte comme une information et l'utiliser pour détecter le rectange plus facilement.
Voici les grandes lignes de l'idée:
Les explications et avantages:
la source