2009-09-03 4 views
7

(Ceci est une suite de this previous question).Comment tester la proximité des lignes (Hough transformer) dans OpenCV

J'ai réussi à utiliser des transformations OpenCV/Hough pour détecter des lignes dans des images (texte scanné); au début, il détecterait beaucoup de lignes (au moins une ligne par ligne de texte), mais en ajustant le paramètre «seuil» par essais et erreurs, il ne détecterait plus que les lignes «réelles». (Le paramètre 'threshold' dépend de la taille de l'image, ce qui pose un problème si l'on doit traiter des images de résolutions différentes, mais c'est une autre histoire). Mon problème est que la transformée de Hough détecte parfois deux lignes là où il n'y en a qu'une seule; ces deux lignes sont très proches les unes des autres et (apparemment) parallèles.

=> Comment puis-je identifier que deux lignes sont presque parallèles et très proches les unes des autres? (pour que je puisse en garder un seul)

+0

quelles données avez-vous des lignes? – Janusz

Répondre

8

Si vous utilisez la rugosité standard ou multi-échelle, vous obtiendrez les coordonnées rho et thêta des lignes en coordonnées polaires. Rho est la distance à l'origine, et theta est normalement l'angle entre la ligne détectée et l'axe Y. Sans regarder dans les détails de la transformation de hough dans opencv, c'est une règle générale dans ces coordonnées: deux lignes seront presque parallèles et très proches quand: - leurs theta sont presque identiques ET leurs rhos sont presque identiques OU - leurs thêta sont près de 180 degrés et leurs rhos sont proches de négatifs

J'espère que cela a du sens.

+0

Oui, vous avez absolument raison; J'ai trouvé cela après que j'ai posté ma question; en fait, c'est très simple dans OpenCV. Merci! – Bambax

+0

En outre, si l'on augmente le paramètre 'resolution', moins de lignes sont trouvées; et c'est ce dont j'avais réellement besoin. – Bambax

+0

Comment pouvons-nous définir un seuil pour le mot-clé «presque» avec les paramètres rho et thêta? Par exemple si je veux savoir si deux droites sont presque parallèles avec un angle maximum entre elles de 0.5 radian (seuil = 0.5). –

0

Cela est intéressant à propos de la thêta étant l'angle entre la ligne et l'axe des ordonnées.

En général, les valeurs rho et thêta sont visualisées comme étant l'angle entre l'axe des x et la ligne perpendiculaire à la ligne en question. Le rho est alors la longueur de cette ligne perpendiculaire. Ainsi, un thêta = 90 et un rho = 20 signifieraient une ligne horizontale de 20 pixels vers le haut à partir de l'origine. Une belle image est montrée sur Hough Transform question