Comment détecter une forme quadrilatérale dans une image en Java?

je veux détecter une forme quadrilatérale dans une image en Java. Je peux utiliser la méthode HoughLinesP dans OpenCV (en utilisant javaCV pour OpenCV java binding) pour détecter les segments de ligne. Mais je ne sais pas comment détecter une forme quadrilatérale - y a-t-il une autre méthode pour cela ou une autre façon d'utiliser les lignes de hough? Aussi une fois que les coins du quadrilatère sont détectés, je veux qu'il retourne un rectangle comme cette classe fait - http://www.aforgenet.com/framework/docs/html/7039a71d-a87d-47ef-7907-ad873118e374.htm - y a-t-il une bibliothèque équivalente à openCV?

4
demandé sur abhishek 2012-10-24 15:40:46

3 réponses

à quoi ressemblent vos images? Si vous détectez beaucoup de segments de ligne avec la transformation de Hough, vous pouvez peut-être essayer d'utiliser RANSAC pour générer un certain nombre d'hypothèse de forme quadrilatérale, trouver un moyen d'évaluer leur fitness et de retourner la meilleure hypothèse.

une hypothèse pourrait être générée comme celle-ci:

  • choisir quatre segments de ligne aléatoires à partir du jeu de segments de ligne détecté
  • trouver les quatre coins en recherchant les intersections des lignes sur lesquelles se trouvent les segments de ligne choisis
  • évaluer l'aptitude de la forme quadrilatérale définie par ces quatre points

l'adaptation pourrait être l'aire du quadrilatère hypothétique (voir la formule de Bretschneider pour calculer la surface d'un quadrilatère convexe), la distance des bords quadrilatères par rapport aux autres segments de ligne dans l'ensemble détecté, ou quelque chose qui correspond mieux à votre application.

C'est juste une idée, je n'ai pas encore essayé d'utiliser cette approche (mais je prévois de mettre en œuvre quelque chose de similaire). Dites-moi si vous pensez que ça peut marcher, ou pourquoi ça ne marchera pas! :)

4
répondu ppalasek 2012-10-27 11:46:59

votre algorithme pourrait être quelque chose comme ça

  1. le traitement de l'image pour trouver les bords (Savant filtre)
  2. Appliquer la Transformation de Hough pour trouver les lignes
  3. détecter des paires de lignes qui se croisent avec un angle de 90 degrés (aprox)
2
répondu jose 2012-10-24 11:48:03

si vous utilisez OpenCV bibliothèque que vous devriez certainement essayer FindChessboardCorners fonction. Et aussi voici un bon tutoriel .

1
répondu ArtemStorozhuk 2012-10-24 11:46:00