2013-05-24 6 views
0

Je suis en train de réaliser un projet de reconnaissance d'écriture hors ligne. Dans la phase de prétraitement, je dois normaliser la partie manuscrite de l'image binaire par sa taille et sa position. la partie d'écriture (pixels noirs) dans l'image et redimensionner et déplacer sa position?Normalisation des caractères manuscrits par taille et par position

+0

Pourriez-vous être plus précis sur ce que vous demandez? Votre question est un peu floue. Le bas de cette page donne une idée de ce qu'il faut faire: http://yann.lecun.com/exdb/mnist/. Quoi d'autre est dans l'image en dehors de l'écriture. Avez-vous segmenté les caractères individuels? – Bull

+0

Les échantillons manuscrits standard contre lesquels nous comparons auront une taille particulière et les lettres seront à une position particulière de la page. Donc, avant la comparaison entre ces deux, les lettres dans les échantillons d'entrée doivent être convertis à cette taille et placés dans la même position, ryt? comment faire ça dans matlab? – abc2013

+0

Est un échantillon standard écrit à la main une seule lettre, un mot, une ligne de texte ou un paragraphe entier. Connaissons-nous la boîte englobante de chaque etter dans les échantillons de peuplement? "avant comparaison entre ces deux": quels deux? vous avez seulement mentionné les échantillons en tandard jusqu'à présent. Quel est le format des échantillons d'entrée? Que signifie "ryt"? – Bull

Répondre

1

Votre problème est aussi vaste que le domaine du traitement d'image. Il n'y a pas de façon unique de segmenter une image en premier plan et en arrière-plan, donc la solution que vous trouvez ici fonctionne sur certains cas et pas sur d'autres. Cependant, la façon la plus simple de segmenter une image en niveaux de gris est:

% invert your grayscale so text is white and background is black 
gray_im = 1 - im2double(gray_im); 
% compute the best global threshold 
level = graythresh(gray_im); 
% convert grayscale image to black and white based on best threshold 
bw_im = im2bw(gray_im, level); 
% find connected regions in the foreground 
CC = bwconncomp(bw_im); 
% if necessary, get the properties of those connected regions for further analysis 
S = regionsprops(CC); 

Note: Beaucoup de gens ont des méthodes beaucoup plus sophistiquées pour segmenter et cela est loin d'être la meilleure façon de le faire. Après le post-traitement, vous vous retrouverez avec une (ou plusieurs) image ne contenant qu'un seul caractère. Pour redimensionner à une taille spécifique M x N, utilisez:

resized_bw = imresize(single_char_im, [M N]); 

Pour décaler sa position, la meilleure façon que je sais est d'utiliser circshift() fonction:

shifted_bw = circshift(resized_bw, [shift_pixels_up_down, shift_pixels_left_right]); 

Note: circshift enveloppe les colonnes décalées ou Si votre boîte englobante est trop étroite, la meilleure méthode consiste à remplir votre image et à la rogner au nouvel emplacement.

+0

+1 pour être clair sur la difficulté générale, tout en offrant une option – Schorsch

Questions connexes