2010-02-27 4 views
5

J'ai une situation assez simple. Je ne connais pas de termes spécifiques à rechercher. J'ai une seule image, dans cette image j'ai plusieurs autres images qui suivent un modèle de base. Ils sont des rectangles et auront probablement une image de point de repère pour baser les choses. Une partie importante, c'est que j'ai besoin de détecter les sous-images pivotées/mal mises à l'échelle.Recherche de sous-images dans une image

Fondamentalement, ce que je dois pouvoir faire est de diviser les «cartes de visite» à partir d'une seule image en images individuelles correctement alignées.

Veuillez excuser mes mauvaises compétences en peinture! http://yfrog.com/eaproblemjj Comme je conçois également les cartes à scanner, je peux mettre n'importe quel symbole ou quelque chose qui faciliterait la détection (comme je l'ai dit un point de repère)

+0

S'agit-il de carreaux uniformes ou essayez-vous de détecter des images plus ou moins rectangulaires de tailles et de proportions différentes? – Josh

+1

S'il vous plaît ajouter un exemple d'image à votre question! Aussi - est-ce que je comprends correctement que ces sous-images sont connues à l'avance? Si non, que savez-vous d'eux? – AVB

+0

J'ai essayé de clarifier ma question et ajouté un exemple de douleur horrible, s'il vous plaît excuser l'art merdique. Je ne sais pas exactement quoi dans la sous-image car ils auront quelques modifications de l'utilisateur, que je vais devoir analyser de manière pragmatique. Mais c'est facile après que je les ai séparés et orientés correctement. – Lex

Répondre

2

Si votre exemple est représentatif (dont je doute pour une raison quelconque) alors Hough transform est votre ami (google, il y a plein d'explications et de code autour). Avec lui, vous serez en mesure de détecter les rectangles.

Quelques exemples de Hough transforment en C# sont http://www.koders.com/csharp/fid3A88BC1FF95FCA9D6A182698263A40EE7883CF26.aspx et http://www.shedletsky.com/hough/index.html

Si ce qui se passe en réalité est que vous numérisez des cartes, et vous avez un certain contrôle sur le processus, alors je vous suggère de vous assurer qu'il n'y a se chevauchent entre les cartes, et fournissent un arrière-plan contrastant (quelque chose de très différent des cartes). Ensuite, toute détection de bord vous rapproche suffisamment de ce que vous avez dessiné dans votre exemple, et après cela, vous pouvez utiliser Hough transformer.

Vous pouvez également implémenter le papier http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.59.4239 qui utilise la transformation Hough pour détecter des rectangles directement, sans détection de bords.

Si je n'ai pas compris votre problème, ou si vous avez besoin de clarifications, s'il vous plaît éditez votre question plus loin et postez un commentaire sur cette réponse.

+0

Je dois avoir vraiment de la malchance, mais je n'arrive pas à trouver un exemple de code utilisant la transformation de Hough, j'ai trouvé l'article du wiki évidemment, mais je n'ai pas l'air de l'avoir compris. En fait, je ne serai pas en mesure de contrôler le processus de numérisation, sauf pour la conception des cartes physiques. Si cela vous aide, imaginez que je veuille prendre une image scannée d'un fouillis de cartes de visite standard (nous pouvons supposer qu'elles sont toutes rectangle et avoir un logo en haut à gauche), et les séparer en cartes simples correctement orientées. – Lex

+0

Les cartes seront blanches, sur un fond noir, et auront des textes/symboles noirs. – Lex

+0

Voir la réponse mise à jour. Avec blanc sur noir, vous devriez être OK avec presque n'importe quelle méthode. Je ne pouvais pas trouver une bonne explication de Hough transformer en ligne; probablement un livre de traitement d'image est votre meilleur pari si vous pouvez le comprendre à partir de ce qui est autour de l'Internet. Ce n'est pas une chose banale, mais pas compliquée non plus. – AVB

1

Essayez AForge.NET (si vous utilisez C#). Il a DocumentSkewChecker qui va calculer l'angle de rotation de l'image.

Questions connexes