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 :

division de deux entiers


Sujet :

MATLAB

  1. #1
    Débutant
    Inscrit en
    Juin 2007
    Messages
    453
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 453
    Points : 97
    Points
    97
    Par défaut division de deux entiers
    Bonjour,
    S'il vous plait je cherche comment récupérer la partie réele d'une devision de deux entiers lorsque on l'implémente dans une fonction. En faîte, j'ai utilisé a/b et a./b mais sans résultat. Par contre ça marche bien lorsque je l'implémente dans l'espace de commande du Matlab. Merci d'avance

    En fait, j'ai voulu implémenter la fonction qui permet de faire l'expansion de l'histogramme d'une image en niveaux de gris avec cette fonction
    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
     
     
    function I=expansion(a)
    [m,n]=size(a);
    mini=min(min(a));
    maxi=max(max(a));
    dif=maxi-mini+1;
    for i=1:m
        for j=1:n
            b=a(i,j);
            g=real(a(i,j)/dif);
          a(i,j)=round(g*256);
     
        end
    end
     
    I=a
    end;
    cependant elle me retourne une image ayant seulement des valeurs 0 ou 255 !!

  2. #2
    Débutant
    Inscrit en
    Juin 2007
    Messages
    453
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 453
    Points : 97
    Points
    97
    Par défaut
    Citation Envoyé par fraisa1985 Voir le message
    Bonjour,
    S'il vous plait je cherche comment récupérer la partie réele d'une devision de deux entiers lorsque on l'implémente dans une fonction. En faîte, j'ai utilisé a/b et a./b mais sans résultat. Par contre ça marche bien lorsque je l'implémente dans l'espace de commande du Matlab. Merci d'avance

    En fait, j'ai voulu implémenter la fonction qui permet de faire l'expansion de l'histogramme d'une image en niveaux de gris avec cette fonction
    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
     
     
    function I=expansion(a)
    [m,n]=size(a);
    mini=min(min(a));
    maxi=max(max(a));
    dif=maxi-mini+1;
    for i=1:m
        for j=1:n
            b=a(i,j);
            g=real(a(i,j)/dif);
          a(i,j)=round(g*256);
     
        end
    end
     
    I=a
    end;
    cependant elle me retourne une image ayant seulement des valeurs 0 ou 255 !!
    La problème est dans l'instruction elle est dans la fonction égale toujours à 0 ou 255 or c'es t pas le cas.

  3. #3
    Membre du Club
    Inscrit en
    Octobre 2005
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 63
    Points : 68
    Points
    68
    Par défaut
    C'est quoi que tu appelles partie réelle? Parce que je vois pas bien comment une division entre 2 entiers pourrait donner un nombre complexe (i.e. a + ib avec a pour partie réelle).

  4. #4
    Débutant
    Inscrit en
    Juin 2007
    Messages
    453
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 453
    Points : 97
    Points
    97
    Par défaut
    Citation Envoyé par Uren Voir le message
    C'est quoi que tu appelles partie réelle? Parce que je vois pas bien comment une division entre 2 entiers pourrait donner un nombre complexe (i.e. a + ib avec a pour partie réelle).
    Oui bien sûre elle donne un réél, mais lorsque j'ai utilisé le code que je l'ai déjà montré, l'instruction me retourne toujours 0 ou 1 et non pas des réels tels que 0.2 ou autre alors qu'elle doit me retourner des réels de la forme de 0.xxxx .

  5. #5
    Membre du Club
    Inscrit en
    Octobre 2005
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 63
    Points : 68
    Points
    68
    Par défaut
    Chez moi la fonction real() marche comme il faut.

    Mais là ou je voulais en venir c'est, que tu n'as pas besoin de faire real(a(i,j) / dif). Un simple a(i,j) / dif doit suffire si a(i,j) et dif sont deux réels (et ils devraient l'etre si on parle d'une image en niveau de gris). La fonction real() ne sert que pour obtenir la partie réelle d'un nombre complexe. Ces notions n'ont pas l'air claires dans ta tête.

    Je comprends pas l'utilité du end; en fin de code non plus.

    Mais sinon je crois savoir d'ou vient le probleme, ton a(i,j) arrive surement directement d'une image donc en uint8 (donc entier en effet, j'avais pas compris de quoi tu voulais parler exactement au debut avec ton utilisation de real() mais tout s'éclaircit). Dans ton cas, la division ne renverra donc que 0 ou 1 car une division en uint8 ne renvoie pas de "chiffres avec virgule". En gros ca fait un round().

    Il faut donc écrire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    function I=expansion(a)
    [m,n]=size(a);
    mini=min(min(a));
    maxi=max(max(a));
    dif=maxi-mini;
    for i=1:m
        for j=1:n
            g=double(a(i,j))/double(dif);
            a(i,j)=uint8(round(g*255));  
        end
    end
     
    I=a;

  6. #6
    Débutant
    Inscrit en
    Juin 2007
    Messages
    453
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 453
    Points : 97
    Points
    97
    Par défaut
    Citation Envoyé par Uren Voir le message
    Chez moi la fonction real() marche comme il faut.

    Mais là ou je voulais en venir c'est, que tu n'as pas besoin de faire real(a(i,j) / dif). Un simple a(i,j) / dif doit suffire si a(i,j) et dif sont deux réels (et ils devraient l'etre si on parle d'une image en niveau de gris). La fonction real() ne sert que pour obtenir la partie réelle d'un nombre complexe. Ces notions n'ont pas l'air claires dans ta tête.

    Je comprends pas l'utilité du end; en fin de code non plus.

    Mais sinon je crois savoir d'ou vient le probleme, ton a(i,j) arrive surement directement d'une image donc en uint8 (donc entier en effet, j'avais pas compris de quoi tu voulais parler exactement au debut avec ton utilisation de real() mais tout s'éclaircit). Dans ton cas, la division ne renverra donc que 0 ou 1 car une division en uint8 ne renvoie pas de "chiffres avec virgule". En gros ca fait un round().

    Il faut donc écrire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    function I=expansion(a)
    [m,n]=size(a);
    mini=min(min(a));
    maxi=max(max(a));
    dif=maxi-mini;
    for i=1:m
        for j=1:n
            g=double(a(i,j))/double(dif);
            a(i,j)=uint8(round(g*255));  
        end
    end
     
    I=a;
    Merci beaucoup, cependant le code juste est :
    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
     
     
    function I=expansion(a)
    [m,n]=size(a);
    mini=min(min(a));
    maxi=max(max(a));
    dif=maxi-mini;
    for i=1:m
        for j=1:n
            g=double(double(a(i,j))-mini)/double(dif);
            a(i,j)=round(g*255);  
        end
    end
     
    I=a;

  7. #7
    Membre du Club
    Inscrit en
    Octobre 2005
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 63
    Points : 68
    Points
    68
    Par défaut
    Je suis pas sur que le double(a(i,j)) soit necessaire.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    g=double(a(i,j)-mini)/double(dif);
    devrait marcher.

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

Discussions similaires

  1. Division de deux réels avec un résultat entier
    Par Triste dans le forum Débuter
    Réponses: 7
    Dernier message: 30/11/2007, 14h23
  2. Division soit deux not exists en SQL et un petit plus
    Par Pingouin22 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 15/12/2006, 13h37
  3. Reste d'une division et partie entier.
    Par vanilla94 dans le forum Langage
    Réponses: 4
    Dernier message: 28/11/2006, 19h14
  4. Faire une division entre deux chiffres?
    Par shun dans le forum Langage SQL
    Réponses: 9
    Dernier message: 09/09/2005, 16h37
  5. [TP]Division de longs entiers
    Par Pebg dans le forum Turbo Pascal
    Réponses: 2
    Dernier message: 14/12/2003, 12h10

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