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

Images Discussion :

Explication gestion des images


Sujet :

Images

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Points : 877
    Points
    877
    Par défaut Explication gestion des images
    Salut tous,

    je vous écris car je manipule des images (mais ne les modifient pas) avec des fonctions matlab toutes prêtes mais le soucis est que j'aimerais bien comprendre ce qui se passe derrière car je n'y connais grand chose et ça m'ennuie d'utiliser des trucs tout près sans comprendre.

    pouvais vous me dire ce qui est faux dans ce que je dis ci dessous et compléter les choses que je ne comprends pas svp ?
    - Une image couleur est définie par une matrice <740x379x3 uint8>, 740x379 est la taille de l'image car chaque composante représente un pixel. <3 uint8> veut dire que c'est une matrice 3D que l'on a car chaque pixel à trois composantes (rouge vert bleu) qui peuvent prendre comme valeurs 0 à 255 (entier codé sur 8 bytes: 8 valeurs prenant 0 ou 1).
    - la fonction rgb2gray permet de convertir la cette matrice en une matrice <740x379 uint8> mais comment convertir nos 3 valeurs de couleur en niveau de gris ?
    - j'ai eu à utiliser la fonction im2double mais je ne me rappel plus pourquoi... je comprends que ça sert à avoir des composantes doubles mais qu'elle intérêt ?? et comment convertir un nombre (vecteur) RGB en double ???
    - im2bw : ceci permet de convertir une image RGB ou GREY en binaire, chaque pixel de la matrice <740x379> vaut 0 ou 1 selon un seuil de niveau de gris que l'on aura déterminé (on ne peut utiliser cette fonction qu'a partir d'une image grey donc).
    - gradient : cette fonction fait un calcul de différence fini entre les pixel pour une expression du gradient en tout pixel. ça sert par exemple à amplifier les contours.

    Maintenant côté pratique :

    - lorsque je fais du traitement d'image je m'intéresse à détecter des contours ou des trucs dans ce style mais par contre je n'ai jamais modifié une image, dans le principe je pense comprendre: il suffit de modifier les valeurs associées à chaque pixel mais contre comment on le fait en pratique ?

    - j'y suis arrivé sur un cas simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    A=load('clown.mat');
    matriceImg=(A.X);
    matriceImg(:,100)=0.9
    image(matriceImg);
    mais par contre j'ai essayé de faire la même chose en niveau de gris et couleur mais je n'y suis pas arrivé.... car il n'y a pas de fonction "double2grey" et "double2rgb" ??

    - et dernière question: pourquoi utiliser parfois les images avec "image()" et parfois "imshow" ? Le code précédent fonction avec imshow mais l'image est toute blanche*...

    j'espère que vous pourrez m'éclaircir sur toute ceci, je vous remercie par avance !

  2. #2
    Membre éclairé
    Avatar de Kangourou
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    579
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 579
    Points : 859
    Points
    859
    Par défaut
    Salut,
    • sous Matlab, les images sont des tableaux, à 2 dimensions, ou 3 dimensions (pour les images couleurs).
    • pour obtenir les différents canaux d'une image couleur, on utilise l'indicage sur la troisième dimension :
    • pour la conversion de couleur en niveau de gris, on utilise soit la moyenne brute des 3 composantes rouge vert et bleu, soit une moyenne pondérée (cf la doc de rgb2gray, tout en bas dans la section "Algorithm"...)
    • pour certaines opérations, c'est mieux de travailler sur des double. Par exemple, si on calcule la différence des valeurs de pixels entre deux images, le fait d'utiliser des types non signés tels que uint8 ou uint16 va induire la perte de toutes les valeurs négatives, qui seront tronquées à zéro. D'expérience, on se fait souvent avoir...
    • les opérations de seuillage (telle que dans im2bw) marchent sur des images de scalaires (telles que les niveaux de gris). Par défaut on applique le seuil sur l'équivalent en gris, mais on peut aussi calculer le résultat binaire sur chaque composante si on a envie. Ca peut permettre de trier ce qui est rouge de ce qui est bleu par exemple.
    • pour modifier une image on utilise bien la syntaxe que tu as présentée. Ca marche sur des images en niveaux de gris aussi. Pour les images couleurs, il faut trois indices. Ex :
    • L'affichage des images dépend un peu de leur type. Pour des images en double, imshow affiche entre 0 et 1. Mais on peut spécifier la dynamlique d'affichage. Ex :
      • imshow(img, []); pour afficher tout ce qui est entre le min et le max de l'image
      • ou imshow(img, [0 255]); pour afficher entre 0 et 255, afin de comparer avec l'équivalent en niveaux de gris
    • Pour passer de double en niveaux de gris, une solution simple est de changer le type :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      img8 = uint8(imgDouble);



    Voilà,
    courage...

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Points : 877
    Points
    877
    Par défaut
    merci beaucoup pour ton aide ! ça éclairci des choses

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 20/01/2006, 10h18
  2. Classe de gestion des images
    Par tlemcenvisit dans le forum MFC
    Réponses: 2
    Dernier message: 03/05/2005, 19h07
  3. Class de gestion des images avec rotation
    Par Johnny Boy dans le forum MFC
    Réponses: 1
    Dernier message: 03/05/2005, 11h54
  4. [TP]Gestion des images bmp avec BMP.TPU
    Par Gabi dans le forum Turbo Pascal
    Réponses: 9
    Dernier message: 14/05/2004, 23h20

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