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 :

Conversion de l'espace RGB vers RGB normalisé


Sujet :

Images

  1. #1
    Membre éclairé
    Inscrit en
    Décembre 2006
    Messages
    329
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 329
    Par défaut Conversion de l'espace RGB vers RGB normalisé
    bonjour tout le monde, j'ai un petit probleme je veux faire la converion d'un espace RGb vers l'espace normaliser rgb
    r= R/R+B+G
    g=G/R+B+G
    b=B/R+B+G

    j'ai fait un petit code mais il me donne un ds erreur

    Warning: Divide by zero.
    > In yy at 7
    Warning: Divide by zero.
    > In yy at 8
    Warning: Divide by zero.
    > In yy at 9
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Im= imread('C4-image4.tif');
    R = Im(:,:,1);
    G = Im(:,:,2);
    B = Im(:,:,3);
     
    S = R + G + B;
    rgb(:,:,1)=R./S;
    rgb(:,:,2)= G./S;
    rgb(:,:,3)= B./S;
     
    imshow(rgb(:,:,1));
    voir la matrice rgb(:,:,1) contient soit 0 soit 1 mais je principe dois continuer des valeur compris entre 0 et 1
    je veux la valeur exacte de chaque pixel sans majoration.

    merci bien

  2. #2
    Membre émérite
    Avatar de rostomus
    Homme Profil pro
    Doctorant électronique et traitement du signal
    Inscrit en
    Décembre 2006
    Messages
    791
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Doctorant électronique et traitement du signal

    Informations forums :
    Inscription : Décembre 2006
    Messages : 791
    Par défaut
    Salut,

    ton problème est causé par le fait que les données sont de type uint8:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    uint8(1)/uint8(3)
     
    ans =
     
        0
    donc tu dois les convertir d'abord en double.

    A+

  3. #3
    Membre éclairé
    Inscrit en
    Décembre 2006
    Messages
    329
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 329
    Par défaut
    merci beaucoup

    j'ai fait cette modification
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    R = Im(:,:,1);
    G = Im(:,:,2);
    B = Im(:,:,3);
     
    S = double(R) + double(G) + double(B);
    rgb(:,:,1)=double(R)./S;
    rgb(:,:,2)= double(G)./S;
    rgb(:,:,3)= double(B)./S;
    et ca marche bien
    merci beaucoup

  4. #4
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    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 317
    Par défaut
    Essaie ceci :
    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
    Im= imread('C4-image4.tif');
     
    R = Im(:,:,1);
    G = Im(:,:,2);
    B = Im(:,:,3);
     
    S = R + G + B; 
    idx = S~=0;
     
    R(idx)=R(idx)./S(idx);
    G(idx)=G(idx)./S(idx);
    B(idx)=B(idx)./S(idx);
     
    rgb=cat(3,R,G,B);
     
    imshow(rgb);

  5. #5
    Membre éclairé
    Inscrit en
    Décembre 2006
    Messages
    329
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 329
    Par défaut
    Rebonjour
    quand j'ai essayé ce code il me donne des valeur égales à 1 ou bien 0 par contre la normalisation doit être comprise entre 0 et 1
    et puisque ma matrice contient des zéros, bien sur la division par zéro donne NaN
    comme cette exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     A./B
     
    ans =
     
         1     1     1
         1     1     1
       NaN   NaN   NaN
    maintenant je dois remplacer NaN par zeros ?

  6. #6
    Membre chevronné

    Inscrit en
    Août 2007
    Messages
    302
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 302
    Par défaut
    je pense que dans le cas ou tu considères un pixel p = (r,g,b)
    ou r,g et b tendend vers 0, il est raisonnable de condidérer que p' =(1/3 ,1/3, 1/3)

    Salutations,

    Grégoire

Discussions similaires

  1. Réponses: 1
    Dernier message: 09/12/2013, 11h12
  2. Conversion RGB 24-bits vers RGB 16-bits
    Par progfou dans le forum Calcul scientifique
    Réponses: 1
    Dernier message: 08/11/2007, 22h52
  3. Conversion ColorIndex vers RGB
    Par coco21 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 24/08/2007, 10h02
  4. Conversion RGB vers YCbCr et autres
    Par progfou dans le forum Traitement d'images
    Réponses: 8
    Dernier message: 12/07/2006, 08h53
  5. Conversion yuv vers rgb en hardware
    Par pifpanfpouf dans le forum DirectX
    Réponses: 1
    Dernier message: 20/03/2006, 14h00

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