2010-06-30 9 views
1

Si je veux détecter des objets distordus en perspective (par exemple, des rectangles) et calculer la transformation de correction, quelle serait une bonne méthode? Par exemple, j'ai beaucoup de photos de papiers posés sur une surface plane (les photos sont prises d'un angle), et je veux corriger la perspective et les recadrer.Détection de perspective avec OpenCv

Je pense à utiliser les bindings OpenCv Python pour fouetter quelque chose. Je pensais que ce serait un «problème standard» avec beaucoup d'exemples, mais je n'ai trouvé aucune information pertinente. Des indices?

EDIT: Je dois ajouter que je sais que cela peut être fait en utilisant des services Web, mais je vois cela comme une chance de faire quelque chose d'utile tout en apprenant OpenCV :)

Répondre

2

Vous devez spécifier exactement ce que vous voulez dire avec détection de la distorsion. Je suppose que vous voulez détecter les coins d'un tel papier (ou votre table/surface plane) et le rendre parallèle à l'axe de votre écran. Cela peut être fait en utilisant cvFindHomography et cvWarpPerspective. J'ai écrit un code d'exemple il y a un instant pour python, notez que ce sont toujours les anciennes bindings (ne devrait pas mettre longtemps à mettre à jour pour opencv 2.0 cependant): http://ioctl.eu/blog/2009/05/13/opencv_homography

L'autre chose que vous avez évidemment à faire est de détecter le coins. Dans mon exemple de code, l'utilisateur doit cliquer sur quatre coins à l'aide de la souris. Dans votre cas, c'est difficile à dire car j'ai besoin d'un exemple. OpenCV offre plusieurs moyens pour détecter les coins (voir Harris), aussi dans les exemples il devrait y avoir du code sur la façon de trouver des rectangles. Si vous pouviez être plus précis, je pourrais être d'une plus grande aide.

MISE À JOUR Cela pourrait être intéressant pour vous aussi: je viens d'entendre un discours sur la manipulation de distorsion en perspective dans les images (par exemple à augmenter le raccourci). Ils nécessitent une interaction importante de l'utilisateur, mais optimisent certaines grilles avec certaines contraintes pour maintenir un gauchissement en douceur. Voici le lien acm: http://portal.acm.org/citation.cfm?id=1778765.1778864 Peut-être que vous pouvez tirer quelques idées de cet article et les références mentionnées, mais je ne l'ai pas lu moi-même (encore).

+0

Merci pour votre réponse. Je ne voulais pas spécifier exactement comment, parce que je ne voulais pas me restreindre, mais je voulais avoir des idées de la part des autres :) Détecter les coins est une façon de penser, mais je crains que ce ne soit pas assez robuste. Par exemple, beaucoup d'images ont un ou plusieurs coins en dehors des limites de l'image. – Krumelur

+0

Je pense que la réponse de zerm couvre un bon point de départ, donc je ne vais pas mettre une autre réponse mais développer son approche. L'approche correcte (le plus naturellement) serait de trouver le coin. Pour trouver des coins, vous pouvez utiliser les détecteurs de coin disponibles. Cependant, vous pouvez également trouver le point de fuite de votre image. Votre question est ambiguë dans quel type de forme sont ces papiers. Ou quel type d'arrière-plan ou quel type de couleurs. C'est un problème de vision par ordinateur et il vaut mieux que vous posiez des images. –

+0

@Dat Chu: Bon point sur l'envoi d'échantillons. Quoi qu'il en soit, c'était plus un exercice "pour le plaisir", et j'ai besoin de quelques entrées. Je pense que je vais aller chercher des points de fuite. En fait, le texte est probablement beaucoup plus détectable que les bords eux-mêmes. – Krumelur