IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MATLAB Discussion :

Reconnaissance de caractères - Isoler chaque lettre d'une ligne de texte


Sujet :

MATLAB

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Reconnaissance de caractères - Isoler chaque lettre d'une ligne de texte
    Bonjour à tous,

    Suite à un projet concernant la reconnaissance de caractères, je cherche à isoler chaque lettre d'une ligne de texte dans une "vignette" pour pouvoir la comparer à une base de données.
    J'arrive à isoler la ligne de texte souhaitée mais par contre je n'arrive pas du tout à isoler chaque caractère de cette ligne

    Je vous remercie d'avance pour votre aide, cordialement
    PS: désolé pour l’insertion d'image

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    im_texte = imread('scan_texte.jpg');
    im_texte_NB(:,:) = (double(im_texte(:,:,1))+double(im_texte(:,:,2))+double(im_texte(:,:,3)))/3;
    detail=im_texte(189:223,1:nl);    
    figure;imagesc(detail);
    Nom : scan_texte.jpg
Affichages : 1790
Taille : 818,2 Ko

  2. #2
    Membre éprouvé
    Inscrit en
    Août 2010
    Messages
    1 124
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 1 124
    Points : 1 277
    Points
    1 277
    Par défaut
    Bonjour,

    Je suppose que ton image detail est sous la forme matricielle (i,j) -> niveau de gris.

    Si tes caractères sont séparés par des colonnes vides, il suffit de les identifier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    plot(min(detail),'k.') % les colonnes blanches sortent à 255.
    Si le blanc n'est pas parfait, il faut surement mettre un seuil <255. Si les caractères se superposent, peut être un quantile plutôt que le min, mais tu risques de devoir le faire à la main.

  3. #3
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 53 165
    Points
    53 165
    Par défaut
    Les histogrammes de projection seront utiles ici.

    Par exemple, pour séparer les lignes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    textImage = imread('scan_texte.jpg', 'jpg');
     
    binaryImage = ~(textImage(:,:,1)>200 & textImage(:,:,2)>200  & textImage(:,:,3)>200);
     
    horizProjHist = sum(binaryImage, 2);
    binaryHorizProjHist = horizProjHist>0;
     
    figure
    colormap(gray(2))
     
    subplot(131)
    image(textImage);
     
    subplot(132)
    image(binaryImage);
     
    subplot(133)
    image(binaryHorizProjHist);
    Une fois chaque ligne isolée, il suffit de leur appliquer le même principe avec l'autre projection (verticale)
    Images attachées Images attachées  
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  4. #4
    Membre éprouvé
    Inscrit en
    Août 2010
    Messages
    1 124
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 1 124
    Points : 1 277
    Points
    1 277
    Par défaut
    Pour faire le lien entre nos deux réponses:
    J'arrive à isoler la ligne de texte souhaitée mais par contre je n'arrive pas du tout à isoler chaque caractère de cette ligne
    - Dut traite le cas de séparation des lignes, et moi des colonnes (qui sont équivalents après transposition).
    - Dut utilise un seuil de 200 pour éliminer le bruit sur l'image. Plutôt qu'un seuil en dur, un quantile (éventuellement dépendant de la coordonnée si l'image a des zones plus ou moins claires) est envisageable. Nos approches, tant que les seuils ne sont pas locaux, sont sensibles à la présence de bandes sombres/claire, ou de zones +ou - riches en texte. sum(x< seuil) >0 et min(x) > seuil sont équivalents.
    - Elles reposent essentiellement sur la présence de ligne ou colonne séparatrices vides (hormis un bruit). C'est souvent vrai pour les lignes, mais pour les colonnes (séparation de caractères) parfois faux (écriture manuscrite ou certaines polices / effets de texte).

  5. #5
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 53 165
    Points
    53 165
    Par défaut
    Effectivement, la solution que je propose convient bien pour le texte présenté dans le premier message mais ne constitue en aucun cas une solution "passe partout".

    La méthode des histogrammes de projection reste néanmoins assez facile à comprendre pour qui débute dans ce genre de travail.
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  6. #6
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Désolé pour l'absence...

    Merci de votre aide Dut et VV33D

    Je pense que ta méthode est pas mal Dut mais je n'arrive vraiment pas à faire la même chose en verticale

    PS : j'ai oublié de vous dire que mon niveau en MatLab est vraiment bas mais je compte m'accrocher parce que c'est un outil vraiment puissant et pratique

Discussions similaires

  1. Caractères � entre chaque lettre
    Par popo79pr dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 04/02/2014, 14h52
  2. Lettre dans une zone de texte
    Par yann591 dans le forum Flash
    Réponses: 2
    Dernier message: 26/08/2011, 13h42
  3. [AC-2003] Couleur des lettres dans une zone de texte
    Par stepofwolf dans le forum VBA Access
    Réponses: 1
    Dernier message: 08/05/2011, 06h56
  4. [DisplayTag] Utiliser un Decorator pour chaque élément d'une ligne
    Par guntzerp dans le forum Taglibs
    Réponses: 2
    Dernier message: 24/06/2010, 11h57
  5. Saisir que des lettres dans une zone de texte
    Par parab dans le forum IHM
    Réponses: 2
    Dernier message: 03/12/2008, 14h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo