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 :

Normalisation de plusieurs valeurs


Sujet :

Images

  1. #1
    Membre du Club
    Femme Profil pro
    Inscrit en
    Février 2009
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Février 2009
    Messages : 227
    Points : 69
    Points
    69
    Par défaut Normalisation de plusieurs valeurs
    bonjour

    je voudrai normalisé plusieurs valeurs de différents paramètres et je ne sais pas comment faire

    merci d'avance

  2. #2
    Modérateur

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Août 2014
    Messages
    1 295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2014
    Messages : 1 295
    Points : 2 385
    Points
    2 385
    Par défaut
    Bonjour,

    Peux tu nous donner un exemple de ce paramètre à normaliser?

    en règle général on fait comme ceci pour normalisé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    normalised_data = (data - min(data)) / ( max(data) - min(data) );
    Si vous cherchez des réponses sur ce forum il faudra avant tout expliquer clairement votre problème et exposer la démarche que vous avez entreprise pour le résoudre. Fournissez une base de travail et de réflexion à vos interlocuteurs!

  3. #3
    Membre du Club
    Femme Profil pro
    Inscrit en
    Février 2009
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Février 2009
    Messages : 227
    Points : 69
    Points
    69
    Par défaut
    Merci Gooby

    Je viens de trouver cette fonction à l'instant même

    je t'éxplique; j'ai 4 paramétres homogneité, energie, contraste et corrélation lleur valeur sont comme suit:
    homogeneité= 0.0345
    Correlation= 0.1349
    energie= 8.3423E-6
    contraste= 21966

    Les paramétres se répétent pour les 14 images que j'ai.



    on remarque que ya une grande différence entre energie et contraste, aprés je voudrai faire une distance euclidienne entre les paramétres de cette image avec les paramétres d'une autre le probléme c'est que la valeur qui influencera sur les résultats sera le contraste c'est pour cela que je cherche a normaliser.

  4. #4
    Membre du Club
    Femme Profil pro
    Inscrit en
    Février 2009
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Février 2009
    Messages : 227
    Points : 69
    Points
    69
    Par défaut
    j'ai un peu modifier ma procédure

    j'ai mis toutes ces valeurs dans une matrice

    donc ma matrice= (14 x 4) car j'ai 14 images et 4 paramètres, comment je dois normaliser, j'ai vu sur le help de matlab des normalisation en ligne et en colonne

    mes paramétres sont éxprimés en colonne dois je faire une normalisation en colonne ?

    encherchant j'ai aussi trouver ce code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Asum = sum(A); % sum the columns
     
    Anorm = A./Asum(ones(size(A, 1), 1), :); % normalise the columns
    et un autre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    % Calcul des écarts-type
    ET = std(X(:,:)) ;
    % Calcul des moyennes suivant chaque caractère
    M = mean(X(:,:));
    % Application de la fornmule ci-dessus:
    for i = 1 : 34
    for j = 1 : 6
    N(i,j) = (X(i,j) - M(j)) / ET(j);
    end
    end
    je précise que mon but est de rendre toute les valeurs à la même échelle
    ma question est la suivante bien que les 2 codes me donnent des matrices normalisées qui sont différnentes, mais je sais pas sur quoi je devrai me basé pour prendre l'un ou l'autre, merci de m'aider.

  5. #5
    Modérateur

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Août 2014
    Messages
    1 295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2014
    Messages : 1 295
    Points : 2 385
    Points
    2 385
    Par défaut
    Oui il faut bien que tu fasses une normalisation par colonne.

    Explication: Pour normalisée une colonne il faut que tu soustrais à chacune des valeurs de la colonne, la valeur minimale de la colonne.

    Donc si A est une colonne cela nous donne:
    Puis diviser chacune des valeurs de cette nouvelle colonne B par la valeur maximale de B soit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    A_normalised = B/max(B);
    Ce qui nous donne pour ta matrice X de taille [14,4]

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for i = 1:4 % On va effectuer ceci pour chaque colonne
         X_temp(:,i) = X(:,i)-min(X(:,i));
         X_normalised(:,i) = X_temp(:,i)/max(X_temp(:,i));
    end
    Si vous cherchez des réponses sur ce forum il faudra avant tout expliquer clairement votre problème et exposer la démarche que vous avez entreprise pour le résoudre. Fournissez une base de travail et de réflexion à vos interlocuteurs!

  6. #6
    Membre du Club
    Femme Profil pro
    Inscrit en
    Février 2009
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Février 2009
    Messages : 227
    Points : 69
    Points
    69
    Par défaut
    est ce que cette technique me permettera d'avoir toutes les valeurs à la même echelle de grandeur?

    le x_temp calcul quoi?

    car j'ai testé le code ça me donne que des valeurs 0 et 1 ou bien des 0 et 2

  7. #7
    Modérateur

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Août 2014
    Messages
    1 295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2014
    Messages : 1 295
    Points : 2 385
    Points
    2 385
    Par défaut
    Reprenons depuis le début.

    Que signifie normaliser? Cela signifie transformer toutes les valeurs d'un vecteur (ou d'une matrice) afin qu'elles soient comprises dans un intervalle défini. Le plus souvent, quand on normalise, sans définir explicitement cet intervalle, cela veut dire transformer toutes les valeurs de notre matrice afin qu'elles soient contenu dans l'intervalle [0,1]. Bien entendu, la valeur minimale de notre matrice sera ainsi fixé à 0 tandis que la valeur maximale sera fixée à 1.

    Comment fait-on cela?

    Prenons un exemple:
    Voici la matrice (qui est ici une unique colonne) à normaliser:

    La première étape pour normaliser est de fixer la plus petite valeur de notre matrice à 0. Pour ce faire, nous allons soustraire cette plus petite valeur à elle-même; ce qui dans notre cas nous donne -2 - (-2) = 0Or, pour garder une cohérence sur notre matrice, toute opération effectuer sur une valeur doit être exécuter sur l'ensemble:

    On obtient alors un nouveau vecteur A_temp (que j'ai appelé X_temp dans mes précédents posts) que voici:

    A_temp = A-min(A)

    Ce qui donne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    A_temp = A - (-2)
     
    A_temp =
     
         9
         6
         5
         0
    Voilà, on a fixé notre valeur la plus basse de notre matrice tout en conservant sa cohérence. Maintenant il s'agit de transformer la plus haute valeur de cette matrice en 1 afin que la normalisation soit complète. Pour se faire, on va diviser la plus grande valeur de notre matrice par elle même; ce qui dans notre cas nous donne 9/9 = 1

    Appliquons encore une fois cette opération à l'ensemble du vecteur pour conserver notre cohérence:

    A_normalized = A_temp/max(A)

    Ce qui donne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    A_normalized = A_temp / 9
     
    A_normalized =
     
        1.0000
        0.6667
        0.5556
             0
    Voilà, nous avons obtenu notre vecteur normalisé entre 0 et 1.

    Si après cette explication tu continues à avoir
    Citation Envoyé par eviasra
    car j'ai testé le code ça me donne que des valeurs 0 et 1 ou bien des 0 et 2
    je vais avoir besoin de ton code pour pouvoir t'aider.
    Si vous cherchez des réponses sur ce forum il faudra avant tout expliquer clairement votre problème et exposer la démarche que vous avez entreprise pour le résoudre. Fournissez une base de travail et de réflexion à vos interlocuteurs!

  8. #8
    Membre du Club
    Femme Profil pro
    Inscrit en
    Février 2009
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Février 2009
    Messages : 227
    Points : 69
    Points
    69
    Par défaut
    Merci Gooby

    mais ça ne marche toujours pas pour ma matrice ça me met 0 pour toutes la colonne qui a les valeurs les plus faible elles étaient à 10e-6

    voici ma matrice en piece jointe.

    et voila j'ai fais ce que vous m'avez dis

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    A=load('c:\Matlab\matrice.txt')
    A_temp(:,i) = A(:,i)-min(A(:,i));
    A_normalised(:,i) = A_temp(:,i)/max(A_temp(:,i));
    Fichiers attachés Fichiers attachés

  9. #9
    Modérateur

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Août 2014
    Messages
    1 295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2014
    Messages : 1 295
    Points : 2 385
    Points
    2 385
    Par défaut
    Chez moi cela marche très bien:

    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
    19
    20
    21
    for i = 1:4
    A_temp(:,i) = A(:,i)-min(A(:,i));
    A_normalised(:,i) = A_temp(:,i)/max(A_temp(:,i));
    end
     
    A_normalised =
     
       0.238963795746688   0.828571428571429   0.873567812416733   0.185175079581628
       0.515979401706042   0.671428571428571   1.000000000000000   0.639533121115659
                       0   0.571428571428572   0.964961364241940   1.000000000000000
       1.000000000000000   0.221428571428571   0.324540367705835   0.379111717447324
       0.955973112150635                   0                   0   0.521903895710171
       0.497307284091356   0.328571428571429   0.312816413535838   0.435804153403062
       0.469358072251268   0.600000000000000   0.624433786304290   0.147354858268910
       0.387515232517001   0.850000000000000   0.776179056754596   0.188828255267546
       0.266205432603483   0.792857142857143   0.860111910471623   0.267955131120206
       0.622626675576870   0.414285714285714   0.548494537703171   0.183325754130665
       0.302016588702386   0.907142857142857   0.754596322941647   0.214324693042292
       0.450607335193993   0.614285714285714   0.667998934185985   0.148036986509019
       0.292739494476984   1.000000000000000   0.911270983213429                   0
       0.422697433075200   0.685714285714286   0.712363442579270   0.161285432772472
    Si vous cherchez des réponses sur ce forum il faudra avant tout expliquer clairement votre problème et exposer la démarche que vous avez entreprise pour le résoudre. Fournissez une base de travail et de réflexion à vos interlocuteurs!

  10. #10
    Membre du Club
    Femme Profil pro
    Inscrit en
    Février 2009
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Février 2009
    Messages : 227
    Points : 69
    Points
    69
    Par défaut
    pas pour moi

  11. #11
    Membre du Club
    Femme Profil pro
    Inscrit en
    Février 2009
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Février 2009
    Messages : 227
    Points : 69
    Points
    69
    Par défaut
    c'est bon j'ai trouvé

    ça marche super bien

    merci

  12. #12
    Membre du Club
    Femme Profil pro
    Inscrit en
    Février 2009
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Février 2009
    Messages : 227
    Points : 69
    Points
    69
    Par défaut
    Bonjour Gooby

    je reviens vers toi pour une petite question

    aprés traitements j'ai cette matrice

    je voudrai supprimer les 0 aprés la virgule pour les 2 premieres colonnes et je bloque la dessus
    Fichiers attachés Fichiers attachés

  13. #13
    Modérateur

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Août 2014
    Messages
    1 295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2014
    Messages : 1 295
    Points : 2 385
    Points
    2 385
    Par défaut
    Pour pouvoir enlever les zéros après la virgule je ne connais personnellement que deux méthodes. Il faut soit transformer tes nombres en chaîne de caractères, soit utilisés sprintf de cette manière:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    >> pi
     
    ans =
     
        3.1416
     
    >> sprintf('%.2f',pi)
     
    ans =
     
    3.14
    Si vous cherchez des réponses sur ce forum il faudra avant tout expliquer clairement votre problème et exposer la démarche que vous avez entreprise pour le résoudre. Fournissez une base de travail et de réflexion à vos interlocuteurs!

  14. #14
    Membre du Club
    Femme Profil pro
    Inscrit en
    Février 2009
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Février 2009
    Messages : 227
    Points : 69
    Points
    69
    Par défaut
    c'est pas vraiment ce que je cherché mais j'ai tésté sur mes matrice, et c'est pas indispensable d'enlever les 0 aprés la virgule.

    Je te remercie beaucoup

    Par contre pour la normalisation aprés avoir normaliser ma matrice , si j'ai une entrée avec des valeurs non normalisées et que je veux la comparer aux valeurs normalisées de ma matrice est ce que cela est possible?

  15. #15
    Modérateur

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Août 2014
    Messages
    1 295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2014
    Messages : 1 295
    Points : 2 385
    Points
    2 385
    Par défaut
    Citation Envoyé par eviasra Voir le message
    c'est pas vraiment ce que je cherché mais j'ai tésté sur mes matrice, et c'est pas indispensable d'enlever les 0 aprés la virgule.
    Je n'ai pas compris.
    Citation Envoyé par eviasra Voir le message
    Par contre pour la normalisation aprés avoir normaliser ma matrice , si j'ai une entrée avec des valeurs non normalisées et que je veux la comparer aux valeurs normalisées de ma matrice est ce que cela est possible?
    Oui, il suffit de normaliser tes valeurs de la nouvelle matrice à comparer.
    Si vous cherchez des réponses sur ce forum il faudra avant tout expliquer clairement votre problème et exposer la démarche que vous avez entreprise pour le résoudre. Fournissez une base de travail et de réflexion à vos interlocuteurs!

  16. #16
    Membre du Club
    Femme Profil pro
    Inscrit en
    Février 2009
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Février 2009
    Messages : 227
    Points : 69
    Points
    69
    Par défaut
    Je n'ai pas compris.
    afin d'injecter ma matrice dans un notre logiciel je pensé qu'il fallé enlever les 0 aprés la virgule, hors le problème n'avait rien à avoir avec ça.
    Oui, il suffit de normaliser tes valeurs de la nouvelle matrice à comparer.
    sauf que ce n'est pas une matrice que j'ai c'est un vecteur de 1x4 chaque valeur corresponds a une colonne de ma matrice qui est de taille 14 x 4

    mon vecteur= [2.2648e+04 0.027 0.1248 9.5287e-06]

  17. #17
    Modérateur

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Août 2014
    Messages
    1 295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2014
    Messages : 1 295
    Points : 2 385
    Points
    2 385
    Par défaut
    Dans ce cas, il faut quand même que tu les normalises mais avec les données de ta première matrice que tu as normalisée; c'est à dire que tu dois utilisée le même max et min que tu as utilisé pour normalisée la première. C'est en quelque sorte comme si tu incluais ton nouveau point dans ton ancienne matrice non normalisée, et qu'ensuite seulement tu normalisais l'ensemble. Est-ce que j'ai été clair? c'est peut être un peu confus ce que je raconte là
    Si vous cherchez des réponses sur ce forum il faudra avant tout expliquer clairement votre problème et exposer la démarche que vous avez entreprise pour le résoudre. Fournissez une base de travail et de réflexion à vos interlocuteurs!

  18. #18
    Membre du Club
    Femme Profil pro
    Inscrit en
    Février 2009
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Février 2009
    Messages : 227
    Points : 69
    Points
    69
    Par défaut
    oui je t'ai bien compris, donc les valeurs normalisées de mon ancienne matrice ne vont pas changées?

    parcontre si la valeur de mon nouveau vecteur est max ou min donc c'est pas logique de garder les anciennes valeures nan?

  19. #19
    Modérateur

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Août 2014
    Messages
    1 295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2014
    Messages : 1 295
    Points : 2 385
    Points
    2 385
    Par défaut
    Supposons que tu aies un vecteur de base comme ceci : A= [0; 1; 2; 3; 4; 5; 6; 7; 8; 9; 10]Le minimum de A est de 0 et son maximum de 10.
    Quand tu auras normalisé, c'est très simple, tu auras donc A_norm = [0; 0.1; 0.2; 0.3; 0.4; 0.5; 0.6; 0.7; 0.8; 0.9; 1];jusque là tout va bien.

    Maintenant supposons que tu aies une nouvelle valeur égale à 7.5.
    Si tu l'inclus dans ton tableau de départ et que tu normalises elle sera égale à 0.75.

    Pour l'instant pas de problème.

    Maintenant si tu inclus une nouvelle valeur = 17 il faudra refaire ta table de normalisation initiale. cette valeur = 17 correspondra nécessairement à la valeur 1 de ta nouvelle matrice normalisée, mais en effet cela va écraser toutes les autres valeur de cette façon:

    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
    A=cat(1,A,valeur); %valeur = 17
    new_A_norm = (A-min(A))/max(A)
     
    new_A_norm =
     
             0
        0.0588
        0.1176
        0.1765
        0.2353
        0.2941
        0.3529
        0.4118
        0.4706
        0.5294
        0.5882
        1.0000
    En effet, c'est assez génant, puisque tes valeurs de ta matrice de base ont changé... mais tu n'as pas le choix. Si tu veux comparer une valeur avec ta matrice de base normalisé, il faut que cette valeur soit comprise entre le minimum et le maximum de ta matrice initiale A.

    Et si maintenant tu inclus encore une nouvelle valeur? et bien c'est le même principe, il faut l'inclure à la matrice initiale A ainsi que la valeur précédente qui a modifié ta matrice normalisé (ici 17) puis normalisé de nouveau.
    Si vous cherchez des réponses sur ce forum il faudra avant tout expliquer clairement votre problème et exposer la démarche que vous avez entreprise pour le résoudre. Fournissez une base de travail et de réflexion à vos interlocuteurs!

  20. #20
    Membre du Club
    Femme Profil pro
    Inscrit en
    Février 2009
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Février 2009
    Messages : 227
    Points : 69
    Points
    69
    Par défaut
    Merci j'ai trés bien compris
    norlamelent les valeurs que j'ai ne sont pas min max
    maintenant je passe à la pratique comme j'ai 4 valeurs car 4 colonnes différentes ça ne va pas étre évident

Discussions similaires

  1. Fonction qui retourne plusieurs valeurs !
    Par casafa dans le forum C++
    Réponses: 20
    Dernier message: 23/04/2014, 16h56
  2. Réponses: 7
    Dernier message: 15/02/2005, 13h55
  3. [PL/SQL] Fonction qui retourne plusieurs valeurs
    Par Loko dans le forum Oracle
    Réponses: 2
    Dernier message: 07/12/2004, 09h43
  4. Plusieurs valeurs dans un value
    Par nebule dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 30/11/2004, 10h58
  5. [Composant] Drag & Drop de plusieurs valeurs à la fois
    Par slowpoke dans le forum Composants VCL
    Réponses: 3
    Dernier message: 23/12/2003, 10h26

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