2009-11-25 5 views
2

J'ai une image scannée d'un document qui a plusieurs boîtes qui peuvent contenir ou non des signatures. Je suis capable d'identifier les boîtes, mais maintenant je veux savoir quelles boîtes contiennent des signatures. J'ai essayé de comparer l'image avec l'image de la boîte blanche de référence. Idéalement, la correspondance de pixels devrait faire l'affaire, mais mes images peuvent être inclinées d'un certain angle, ce qui rend les images difficiles. Je programme en .NET.Comparer des images en C# .NET

Des suggestions?

Edité le 04 janvier J'ai posé cette question le 25 novembre. À ce moment-là, la solution proposée était de vérifier le nombre de pixels noirs dans l'image. Cela a fonctionné pour moi. Cependant, les performances de l'application sont mauvaises maintenant. Parce que, il doit vérifier les pixels noirs sur 20 rectangles de taille 100 * 1000.

Y a-t-il une meilleure solution pour déterminer si une image est vide?

+0

Pouvez-vous utiliser l'échantillonnage? Ou réduire la résolution de l'image avant de comparer? – Ian

Répondre

5

Vous pourriez peut-être additionner le nombre de pixels correspondant à la couleur «vide», puis additionner le nombre de pixels ne correspondant pas à la couleur vide. Si le nombre de pixels non vides est supérieur à un certain niveau, supposez-vous qu'il existe une signature? Logiquement, une case vide contiendra presque entièrement des pixels vides, et une case contenant une signature contiendra beaucoup moins de pixels vides. Un point supplémentaire - vous voudrez avoir un degré de tolérance pour ce qui est une couleur de pixel «vide», sinon un peu de poussière ou de dégradé apparu lors de la numérisation provoquera un pixel non vide.

+0

Vous pouvez essayer cette approche en utilisant une somme pour chacun d'au moins 16 dégradés de gris entre le blanc et le noir. Cela va vous donner une signature de gradient en quelque sorte, explique Kazar. – backslash17

+0

Pourriez-vous simplement conserver un compteur vide et non vide, puis pour chaque pixel, autoriser une valeur RVB de +/- (un nombre magique) à partir d'une couleur "vide" fixe? Si à l'intérieur de ces limites, incrémenter le compteur vide, sinon, incrémenter le compteur notblank. – Kazar

+0

J'ai effectivement compté le nombre de pixels et je suis capable de faire la distinction entre les cases vides et pleines. Merci pour la réponse simple. – Boolean

-1

Peut-être que le moyen le plus rapide est d'effectuer un hachage MD5 sur le flux d'octets de l'image et de comparer les résultats? Regardez here pour plus d'informations à ce sujet.

Espérons que cela aide, Cordialement, Tom.

+1

Le hachage MD5 ne va pas beaucoup varier même pour les petites modifications. Je pense que cela fonctionnera pour des images identiques mais pas pour des variations. – Boolean

+0

Si un bit est désactivé dans l'image, le hachage md5 sera complètement différent. –

+0

Oui, ce sera le problème majeur de cette approche. Ce n'est pas une très bonne idée ou utilisable :-) – Joey

0

Vous devez d'abord essayer de normaliser la rotation des images. Une façon de faire est de placer des marqueurs sur la page qui peuvent être alignés (un carré noir dans chaque coin de la page est ce que j'ai vu utilisé auparavant) pour s'assurer que la rotation de la page est correcte avant d'essayer d'identifier les signatures .

+0

Actuellement, j'utilise EMGU CV pour identifier les rectangles dans l'image et EMGU CV retourne des rectangles légèrement inclinés. Comment puis-je normaliser ces images. – Boolean