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 :

Soustraction d'images binaires


Sujet :

Algorithmes et structures de données

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    novembre 2010
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : novembre 2010
    Messages : 78
    Points : 58
    Points
    58
    Par défaut Soustraction d'images binaires
    Bonjour,

    Avant de me lancer dans ce domaine qui me paraît encore bien flou je voulais demander si par hasard quelqu'un avait déjà effectué ce genre de traitement si je suis à côté de la plaque ou non.
    J'ai deux images de taille identique. L'une comprend une grille et un texte superposé et une autre qui ne contient que la grille identique à celle de la première image.
    J'espérais pouvoir extraire le texte seul de l'image en utilisant un opérateur XOR ou consorts.
    En gros seuls les pixels noirs de la grille qui touchent un pixel blanc du fond de l'image devraient être supprimés.
    Serait-ce bien possible?

    Merci à vous.
    Images attachées Images attachées   

  2. #2
    Membre chevronné

    Homme Profil pro
    Formation: Chimie et Physique (structure de la matière)
    Inscrit en
    décembre 2010
    Messages
    1 007
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Formation: Chimie et Physique (structure de la matière)
    Secteur : Enseignement

    Informations forums :
    Inscription : décembre 2010
    Messages : 1 007
    Points : 1 857
    Points
    1 857
    Billets dans le blog
    5
    Par défaut Soustraction d'images binaires
    Bonjour,

    Il faut d'abord attribuer une valeur numérique aux deux couleurs:
    # noir = (0, 0, 0) = ($00, $00, $00) = ({00000000}, ... etc); soit (0) au niveau de chaque bit;
    # blanc = (255, 255, 255) = ($FF, $FF, $FF) ) ({11111111}, ... etc); soit (1) au niveau de chaque bit.

    Le bon opérateur binaire (H) sera donc caractérisé par la table suivante (x = (grille + texte), y = (grille seule)):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    (x)H(y)    y = 0    y = 1
    x = 0        0        1
    x = 1     0 ou 1(*)   1
    (*) Ce cas ne se présente pas.

    Prendre (1)H(0) = 0 revient à prendre (x)H(y) ≡ y ;
    l'option (1)H(0) = 1 devrait correspondre à un opérateur classique.


    Le français, notre affaire à tous
    Grand Dictionnaire Terminologique

  3. #3
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    septembre 2005
    Messages
    4 095
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : septembre 2005
    Messages : 4 095
    Points : 10 081
    Points
    10 081
    Par défaut
    Bonjour

    Non.
    Dans le cas général, non.
    Tu as mis dans le mille en parlant de XOR, mais ce "OU EXCLUSIF" va supprimer des bouts de motifs.
    Et la seule façon d'éviter cela est la prédiction. Si tu as 1110000001000000111 pour décrire le haut du "B" de "Bonjour", c'est probablement que le fait d'enlever la grille a défiguré la continuité. Et tu peux réparer en 1110000000000000111.
    Même en rétablissant la continuité, tu auras des effets de bords, comme quand on détache un morceau de plastique en ouvrant un jouet, il reste toujours un petit bout qui dépasse. Ta grille fera pareil.

    Quelle est la taille du motif par rapport à la taille de la grille ?
    Le motif a-t-il des bords francs et nets ?
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  4. #4
    Membre habitué
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    février 2013
    Messages
    222
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : février 2013
    Messages : 222
    Points : 176
    Points
    176
    Par défaut
    J'extrairais d'abord la grille puisqu'elle est symétrique, continue et "attendue" et reconstruirais les parties manquantes du motif par extrapolation et en exploitant les données locales de la grille.
    Savoir pour comprendre et vice versa.

  5. #5
    Membre chevronné

    Homme Profil pro
    Formation: Chimie et Physique (structure de la matière)
    Inscrit en
    décembre 2010
    Messages
    1 007
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Formation: Chimie et Physique (structure de la matière)
    Secteur : Enseignement

    Informations forums :
    Inscription : décembre 2010
    Messages : 1 007
    Points : 1 857
    Points
    1 857
    Billets dans le blog
    5
    Par défaut Soustraction d'images binaires
    Désolé, j'ai pris l'énoncé à l'envers, et comptais enlever le texte de la grille, ce qui m'a paru après coup franchement incohérent.

    En reprenant la même notation des couleurs (noir = 0 , blanc = 1), la table de l'opérateur devient:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    (x)H(y)    y = 0    y = 1
    x = 0        1        0
    x = 1        1        1
    Il s'agit apparemment de l'opération (x)AND(NOT y) .

    Je m'en suis strictement tenu, selon le titre de la discussion, au traitement d'images à deux couleurs. La présence éventuelle de dégradés complique évidemment le problème.


    Le français, notre affaire à tous
    Grand Dictionnaire Terminologique

  6. #6
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    septembre 2005
    Messages
    4 095
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : septembre 2005
    Messages : 4 095
    Points : 10 081
    Points
    10 081
    Par défaut
    Citation Envoyé par wiwaxia Voir le message
    Il s'agit apparemment de l'opération (x)AND(NOT y) .
    Euh ... Doute. Avec cette formule, si x est nul alors le résultat est forcément nul. Impossible. Cela ne va pas corriger les choses.

    La bonne réponse est simplement x ⊕ y ⊕ 1. (où ⊕ symbolise le "OU EXCLUSIF")
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    novembre 2010
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : novembre 2010
    Messages : 78
    Points : 58
    Points
    58
    Par défaut
    Holà! Merci pour vos réponses.

    Wiwax tu m'as fait m'endormir encore plus nul que je pensais l'être car je n'avais pas trop compris voire pas du tout mais là tu me rassures un peu.

    Flobel comme tu dis en supprimant la grille on supprime les pixels du texte traversé par la grille.
    la taille du motif par rapport à la taille de la grille est complètement imprévisible; en fait j'extrais du texte manuscrit ou imprimé de feuilles jusqu'à A4 maximum où on peut avoir des graphiques, des tableaux, des traits, etc.
    Je dirais que le motif a des bords francs et nets à partir du moment où l'image est filtrée et il ne reste plus que des pixels noirs ou blancs.

    La nuit portant conseil je pense avoir trouvé une solution qui devrait marcher.

    En fait pour tout pixel noir de la grille (image de droite) qui a un pixel blanc au Nord, Est, Sud ou Ouest et si ce même pixel blanc est blanc sur l'image de gauche alors on peut supprimer le pixel noir.
    Si le pixel voisin était noir dans l'image de gauche ça voudrait dire qu'il appartient au texte.
    J'espère que c'est clair.

  8. #8
    Membre expert
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    septembre 2015
    Messages
    1 255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : septembre 2015
    Messages : 1 255
    Points : 3 192
    Points
    3 192
    Billets dans le blog
    2
    Par défaut
    Salut pourquoi pas simplement faire une comparaison ? On parcours tous les pixels de l'image de B si le pixel courant n'est pas de la même couleur que le pixel de l'image A alors on l'inscrit le pixel de l'image A dans une image C. plus simple non ? ou encore une simple différence (xor) --> voici le résultat à partir des tes 2 images

    Nom : 2019-12-18_205305.png
Affichages : 33
Taille : 3,4 Ko

    Suffit plus qu'a inverser le blanc et noir

    A+
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  9. #9
    Membre expert
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    septembre 2015
    Messages
    1 255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : septembre 2015
    Messages : 1 255
    Points : 3 192
    Points
    3 192
    Billets dans le blog
    2
    Par défaut
    Voici un mode de fusion "phoenix" qui fais le job sans avoir besoin d'inverser le blanc et noir

    Nom : 2019-12-18_210947.png
Affichages : 34
Taille : 3,4 Ko

    voici le code pascal

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        cmPhoenix :
        Begin
          Result.Red := ClampByte(Math.Min(A.Red, Self.Red) - Math.Max(A.Red, Self.Red) + 255);
          Result.Green := ClampByte(Math.Min(A.Green, Self.Green) - Math.Max(A.Green, Self.Green) + 255);
          Result.Blue := ClampByte(Math.Min(A.Blue, Self.Blue) - Math.Max(A.Blue, Self.Blue) + 255);
        end;
    Self = Image 1
    A = Image 2

    EDIT : le texte au complet il faudra donc rajouter une passe supplémentaire avec l'image 2 pour combler les trous
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    novembre 2010
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : novembre 2010
    Messages : 78
    Points : 58
    Points
    58
    Par défaut
    Merci Beanz,

    Comme tu le dis et le montres, en effet les pixels internes au texte sont supprimés donc il faut refaire une double boucle (x, y) pour combler les trous.
    La méthode que j'avais citée se fait dans la double boucle de départ avec seulement 4 conditions supplémentaires.
    J'essaie de grappiller les chouias de seconde où je peux.
    Ici j'avais donné un exemple simple mais en réalité la plupart des textes ont une épaisseur d'un pixel et tu sais mieux que moi que lorsqu'on fait les premiers tests ont tombent sur toutes les exceptions qu'on n'avait pas imaginées (caractère traversé par un trait, un accent ou un point de l'autre côté de la ligne, etc).

    Merci pour ton code il va me servir pour d'autres méthodes en cours et d'approfondir les opérateurs XOR etc.

Discussions similaires

  1. Réponses: 1
    Dernier message: 12/05/2007, 16h29
  2. Morphologie mathématique (images binaires)
    Par bahiatoon dans le forum Traitement d'images
    Réponses: 9
    Dernier message: 01/04/2007, 02h14
  3. créer un fichier vidéo a partir des images binaires
    Par jack_1981 dans le forum Langage
    Réponses: 4
    Dernier message: 17/11/2006, 20h35
  4. Fusion et soustraction des images
    Par anisj1m dans le forum Images
    Réponses: 2
    Dernier message: 11/08/2006, 11h33
  5. ouverture image binaire
    Par mathieutlse dans le forum Langage
    Réponses: 2
    Dernier message: 10/01/2003, 12h05

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