Comment reconnaître les rectangles dans cette image?
J'ai une image avec des lignes horizontales et verticales. En fait, cette image est le site de la BBC converti à lignes horizontales et verticales.
Mon problème est que je veux être en mesure de trouver tous les rectangles dans l'image. Je veux écrire un programme d'ordinateur pour trouver tous les rectangles.
Personne ne sait comment le faire ou de proposer des idées sur la façon de commencer? Cette tâche est facile pour moi en tant que personne à trouver le visuel des rectangles, mais je ne suis pas sûr de la façon de le décrire comme un programme.
Image est le site de la BBC ici http://www.bbc.co.uk/
Mise à jour pour cela, j'ai écrit le code qui convertit le site de la BBC de l'image à l'horizontale et à la verticale de la ligne, le problème est que ces lignes ne sont pas totalement satisfaire les coins et parfois, ils ne sont pas complètement former un rectangle. Merci!
- neat. ce programme est utilisé pour créer l'image? Pourriez-vous l'utilisation de son code source, qui identifie les boîtes afin de les dessiner - pour vos propres fins? Ou avez-vous seulement de la finale .png image à travailler avec?
- Votre image de l'échantillon est utile en ce qu'elle amène une question importante. Il existe de nombreuses formes de il y qui se rapprochent des rectangles, mais sont incomplètes en raison des lacunes, souvent dans les coins. Vous êtes à la recherche pour les tous les idéal des rectangles ou des formes qui la plupart du temps approximatif des rectangles? Le plus tard sera plus difficile à déterminer.
- Pouvez vous s'il vous plaît de partager vos résultats sur ce et comment êtes-vous arrivé à le graphique ci-dessus?
- Mon navigateur me dit le site sous le lien est rapporté à l'attaque de la page.
- pouvez-vous re-télécharger l'image?
- Veuillez ne pas suivre le Lien ironnine.com Maleware a été détecté sur ce côté.
Vous devez vous connecter pour publier un commentaire.
Opencv (traitement d'image et vision par ordinateur de la bibliothèque écrite en c) est mise en œuvre pour la transformation de hough (de la simple transformation de hough de trouver des lignes dans une image, alors que la généralisation de l', on trouve des objets plus complexes), de sorte que pourrait être un bon début. Pour les rectangles qui ont fermé les coins il y a aussi le coin des détecteurs comme cornerHarris qui peut vous aider.
J'ai couru le houghlines démo fourni avec opencv et voici le résultat sur l'image que vous avez donné (détecté lignes marquées en rouge):
(source: splintec.com)
Je crois que vous êtes à la recherche pour le généralisée de la transformation de Hough.
En vision par ordinateur il y a un algorithme appelé Généralisée Hough Transformer qui peut peut-être résoudre votre problème. Il devrait y avoir un code source ouvert avoir mis en œuvre de cet algorithme. Il suffit de chercher pour elle.
En supposant que c'est un raisonnablement bruit de fond de l'image (pas une vidéo d'un écran) puis un simple diffuseur d'algorithmes devrait fonctionner. Vous pourriez avoir besoin pour exécuter une dilatation/éroder sur l'image pour fermer les lacunes.
La voie normale de trouver des lignes est une transformation de Hough ( puis de trouver des lignes à angle droit)
Opencv est le moyen le plus facile.
Prendre un coup d'oeil à cette question OpenCV Détection D'Objet - Centre
Il y a plusieurs approches différentes à votre problème. J'aimerais utiliser un morphologiques de traitement de l'image outil comme cette une. Vous aurez la possibilité de définir "rectangle" même quelque chose que pas "exactement fermé" (où l'algorithme de remplissage échouera).
Une autre possibilité pourrait être d'utiliser un l'apprentissage de la machine approche, qui, fondamentalement, est plus axé sur des données de définition axée comme le précédent. Vous devrez donner votre algorithme de plusieurs "exemples" de ce qu'un rectangle est, et il finira par apprendre (avec un biais et un taux d'erreur).
itération de la gauche vers la droite jusqu'à ce que vous frappez un pixel de couleur puis utiliser la modification de remplissage de l'algorithme. plus d'infos sur l'algo remplissage @ wiki
une autre approche serait de trouver TOUT de couleur de pixel sur l'image, puis aller avec
puis faire de même vers le haut.
maintenant, u ont défini une seule ligne. utilisez ensuite les extrémités des lignes à env match de lignes dans des rectangles. si elles ne sont pas de pixel parfait, vous pourriez faire une sorte de tresholding.
Le déluge remplissage de travail, ou vous pouvez utiliser une modification d'un bord algorithme de suivi.
ce que vous faites est:
créer un tableau 2d (ou tout autre d2 de données struct)- chaque ligne représente un pixel horizontal de la ligne sur l'écran, et chaque colonne d'une ligne verticale
itérer sur tous les pixels, de gauche à droite, et chaque fois que vous trouvez une de couleur ajouter ses coordonnées dans le tableau
parcourir le tableau et findying lignes et le stockage de la fin et de début de pixels pour chacun (différente de la structure de données)
sachant que le début de chaque ligne est son gauche/haut de pixels, vous pouvez facilement vérifier si toutes les 4 lignes forment un rectangle
À obtenir à partir de l'image que vous avez avec le touchant presque les lignes horizontales et verticales pour juste les rectangles:
sont le blanc, le reste est en noir)
Ce sera, avec un peu de chance, d'abord montrer les cases avec une épaisseur de graisse lignes, laissant épaisseur de la graisse tous les artefacts sur l'image (après l'étape 3), puis ensuite, après l'étape 5, tous épaisse de graisse sont les objets ont été supprimés, tandis que toutes les cases restent. Vous devez ajustez le nombre de répétitions à l'étape 3 pour de meilleurs résultats. Si vous êtes intéressé par l'image de la morphologie, de c'est le livre d'une très bonne introduction aux cours que j'ai pris.
De l'échantillon: (0=noir, 1=blanc, pixels au centre de chaque bloc de 3 x 3 sont envisagées, à l'entrée à gauche, à droite sortie)