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

Algorithmes et structures de données Discussion :

Lettres Italiques


Sujet :

Algorithmes et structures de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 38
    Par défaut Lettres Italiques
    Bonjour

    j'ai une image représentant des caractères en italiques.
    Je voudrais savoir comment faire pour :
    - d'une part, repérer que ces caractères sont bien en italiques
    - puis les "redresser", cad faire en sorte qu'après passage de mon algorithme, ces caratères soient "comme si" ils n'étaient pas en italique.

    c possible ?

    merci

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    277
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 277
    Par défaut
    A l'époque des caractères bitmap, l'italique était obtenu en affichant chaque ligne décalée par rapport à la précédente. Donc, si tu es dans ce cas, oui, c'est possible, en faisant plusieurs tests de décalage et en cherchant celui qui se rapproche le plus du caractère de référence.

    Maintenant, les polices italiques sont une police complètement distinctes de la police droite (parfois, même le dessin de la lettre est complètement différent). Ce que tu peux faire, c'est tester ton caractère dans les deux polices, et choisir celle qui ressemble le plus.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 38
    Par défaut
    Autant que possible, je voudrais bien ne pas avoir à comparer chaque caractère avec les deux polices : droites et italiques. Ca risquerait de prendre un tps monstrueux.

    Ce serait pas possible, par exemple, d'essayer de trouver l'orientation globale des lettres par rapport à la ligne ?
    Dans le cas d'une police droite, on trouverait à peu près 90°, et pour une police italique, un angle plus proche de 60 à 70°.

    Ensuite à partir de cet angle, on pourra chercher de combien de pixel il faudra décaler chaque ligne suivant la hauteur : la plus haute sera décalée du nbr de pixels maximum, et la ligne sur laquelle sont "posées" les lettres ne sera pratiquement pas décalée.
    Ainsi, on obtiendra une sorte de redressement, non ?

  4. #4
    Membre chevronné
    Profil pro
    Enseignant
    Inscrit en
    Avril 2004
    Messages
    440
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2004
    Messages : 440
    Par défaut
    Citation Envoyé par bigbill
    Ce serait pas possible, par exemple, d'essayer de trouver l'orientation globale des lettres par rapport à la ligne ?
    Dans le cas d'une police droite, on trouverait à peu près 90°, et pour une police italique, un angle plus proche de 60 à 70°.
    Oui je pense que ça pourrait marcher... Pour ça il faut que tu segmentes les lettres (facile si tu as des caractères noirs sur fond blanc).
    Ensuite tu prends la matrice de ta lettre (bloc image correspondant au rectangle encadrant ta lettre : 1 si c'est noir 0 sinon), tu diagonalises en trouvant les vecteurs propres qui correspondront aux directions privilégiées, et voilà....

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 38
    Par défaut
    la diagonalisation ? tu parles de la diagonalisation de matrice ??
    si c ça, je l'ai vu cette année en maths, et j'en ai gardé un assez mauvais souvenir...

    mais je ne sais tjs pas concrètement à koi ça sert, et en particulier pour trouver l'orientation d'une lettre...
    pour moi, qd on diagonalise une matrice carrée, au final, on a une matrice carrée avec des chiffres seulement sur la diagonale (les points de coordonnéés ( i, i )) et tout le reste avec des zéros. Mais j'ai sûrement mal compris ce que tu voulais me dire.....

  6. #6
    Membre chevronné
    Profil pro
    Enseignant
    Inscrit en
    Avril 2004
    Messages
    440
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2004
    Messages : 440
    Par défaut
    Oui non je suis allé un peu vite... Il faut faire des trucs un peu plus complexes. Voici une méthode que j'ai déjà utiliséé mais les autres peuvent me dire ce qu'ils en pensent (je m'étais inspiré du détecteur de Harris qui calcule les vecteurs propres pour savoir si on a bien à faire à un point).

    En fait il faut déterminer une matrice caractéristique de l'image, la diagonaliser, et les valeurs propres / vecteurs propres te donneront ce que tu cherches... Je m'explique:

    1- une diagonalisation n'est rien d'autre qu'un changement de base (ou repère en 2D): tu passeras de la base/repère 0xy à une nouvelle base dont l'un des vecteurs de base sera dans la direction privilégiée.

    2- La matrice que tu dois utiliser est celle-ci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    M =         sum          [Ix²      Ix*Iy ]
           (x,y) du bloc     [Ix*Iy       Iy²]
    où Ix est la dérivée en (x,y) selon x, Iy la dérivée selon y. (le bloc correspond au rectangle qui encadre ta lettre).

    Elle correspond aux vitesses de changement d'intensité selon x et y.
    Tu peux toujours la diagonaliser car elle est réelle symétrique (théorème qui dit qu'on peut tjrs dans ce cas).
    Le vecteur propre avec la valeur propre minimale correspond à la direction privilégiée car c'est là qu'on varie le plus lentement !

    N'hésite pas à poser des questions si t'as rien pigé à ce que je raconte car je suis pas sûr d'être clair !

    A+

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 38
    Par défaut
    euh oui ... effectivement je comprend pas gd chose. Surtout le petit bout de code que t'as mis.

    Mais en gros, qu'est ce qu'on obtient au final ? par exemple, j'ai une matrice de pixels représentant la lettre la plus simple, le "i", en italique, d'un angle d'inclinaison de 20° ( par rapport à la verticale ).
    Qu'est ce qu'on obtient avec ton algo ?

  8. #8
    Membre chevronné
    Profil pro
    Enseignant
    Inscrit en
    Avril 2004
    Messages
    440
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2004
    Messages : 440
    Par défaut
    Au final tu obtient deux vecteurs qui constituent une base dont l'un (celui à la valeur propre la plus faible) est incliné de 20 ° dans ton exemple.

    Avant tout il faut bien comprendre ce que fait une diagonalisation: un changement de base cad que l'on passe du repère classique (pour une image en général c'est :
    0---->x
    |
    |
    v
    y
    à un repère
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
                              ybis          xbis
                                   \         /
                                    \       /
                                      0bis
    Bon c'est pas facile de représenter ça ici, mais je te conseille de te replonger dans tes cours parce que c'est la point le plus important à comprendre.

    En faisant ce changement de repère, on se place dans les directions privilégiées de la forme.

    Pour ce qui est du bout de code, c'est la matrice des dérivées de l'image : en un point (x,y) on calcule sa dérivée selon x, selon y.
    En diagonalisant la matrice, on va donc se placer dans les directions privilégiées de la forme.

    Voilà, il faut absolument comprendre l'étape diagonalisation...
    A+

  9. #9
    Membre Expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 889
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 889
    Par défaut
    Ne serait-il pas plus simple ( dans le cas ou les polices utilisées soient connues ) de reperer les dessins des lettres en italiques avec des bitmaps en mémoire ou sur disque, et de les écraser avec ceux de ces mêmes lettres droites ?

    K

  10. #10
    Membre chevronné
    Profil pro
    Enseignant
    Inscrit en
    Avril 2004
    Messages
    440
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2004
    Messages : 440
    Par défaut
    Effectivement c'est une solution, si tant est que les caractères ne soient pas trop nombreux (si on utilise autre chose que les lettres de l'alphabet).
    En plus à y réfléchir de plus près, je suis pas très sûr qu'on puisse donner une orientation globale aux caractères...
    Je veux dire par là qu'on peut comparer l'orientation d'un "O" et d'un "O" mais de là à dire que toutes les lettres italiques ont la même orientation globale....
    Donc la comparaison à une base de données est certainement bien plus robuste...

    A+

Discussions similaires

  1. Mettre uniquement les lettres d'un texte en italique
    Par stich51 dans le forum Mise en page CSS
    Réponses: 6
    Dernier message: 23/04/2012, 01h26
  2. Réponses: 4
    Dernier message: 06/06/2004, 12h07
  3. Mettre la première lettre des mots en majuscule
    Par seb.49 dans le forum Langage
    Réponses: 8
    Dernier message: 23/05/2003, 14h26
  4. identification lettre (pb accent)
    Par scorbo dans le forum C
    Réponses: 5
    Dernier message: 14/12/2002, 02h59
  5. [Lecteur] Lettre du lecteur de CD
    Par petit scarabée dans le forum Installation, Déploiement et Sécurité
    Réponses: 6
    Dernier message: 05/09/2002, 18h47

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