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

C Discussion :

Binarisation par la methode de OTSU


Sujet :

C

  1. #41
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 60
    Par défaut
    bonjour stephl ! voici le code matlab correspondant .

    en ce qui concerne le depassement de capa, puisque sigma est deja declaré en tant que double je pense pas que ca pose problème
    Fichiers attachés Fichiers attachés

  2. #42
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 60
    Par défaut
    je viens de tester la binarisation avec visual studio , l'image obtenue ressemble à celle que j'ai sur matlab mais je comprend pas pourquoi ca marche pas sur cible

  3. #43
    Membre émérite Avatar de stephl
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2007
    Messages : 643
    Par défaut
    Citation Envoyé par kayser33 Voir le message
    bonjour stephl ! voici le code matlab correspondant .

    en ce qui concerne le depassement de capa, puisque sigma est deja declaré en tant que double je pense pas que ca pose problème
    Bonjour kayser33.

    Merci pour le code, je vais jeter un oeil.
    sigma est bien déclarée en double, mais avec les parenthèses autour de (n * n * ...), il n'y a que des entiers donc les calculs sont faits en int. J'en veux pour preuve que le résultat change si je force la conversion en double avant de multiplier.

  4. #44
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 60
    Par défaut
    merci stephl!

  5. #45
    Membre émérite Avatar de stephl
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2007
    Messages : 643
    Par défaut
    De rien! J'espère que nous allons réussir à résoudre le problème.

    Pourrais-tu joindre les résultats que tu obtiens quand tu fais tourner ton programme c avec les données que tu m'as envoyées?

    EDIT
    Que fait la fonction power() dans ton code matlab?

  6. #46
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 60
    Par défaut
    oui bien sur voila l'image obtenue (normalement elle est au format bmp mais j'ai du la convertir en jpeg donc un peu de bruit s'y ajoute)
    Images attachées Images attachées  

  7. #47
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 60
    Par défaut
    La fonction power est la fonction puissance

    C = power(A,B) is called for the syntax 'A .^ B' when A or B is an object.

  8. #48
    Membre émérite Avatar de stephl
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2007
    Messages : 643
    Par défaut
    Citation Envoyé par kayser33 Voir le message
    oui bien sur voila l'image obtenue (normalement elle est au format bmp mais j'ai du la convertir en jpeg donc un peu de bruit s'y ajoute)
    Je préfèrerais les données au format excel si possible, car je crains d'avoir du mal à reconstituer les 6000 et quelques valeurs des points de l'image
    Ce sont bien les données obtenues avec ton programme c?

    Et que fait la fonction power dans ton code matlab? OK merci, je viens de voir ton post.

  9. #49
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 60
    Par défaut
    ok ok juste le temps de récuperer les données et de les enregistrer sous excel ...
    Fichiers attachés Fichiers attachés

  10. #50
    Membre émérite Avatar de stephl
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2007
    Messages : 643
    Par défaut
    Je ne suis pas sûr de bien comprendre. Dans ton code matlab, est-ce que le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    power(myu(255)*omega(i)-myu(i),(omega(i)*(1- omega(i))))
    calcule myu(255)*omega(i)-myu(i) à la puissance (omega(i)*(1- omega(i))) ?

  11. #51
    Membre émérite Avatar de stephl
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2007
    Messages : 643
    Par défaut
    J'ai noté des différences entre ton code matlab et ton code c. Du coup, j'ai écrit une fonction de binarisation en c en suivant scrupuleusement ton code matlab (sans chercher à comprendre) et j'obtiens exactement le résultat que tu m'avais fourni.

  12. #52
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 60
    Par défaut
    bon ben c'est rassurant alors que tu retrouves le même résultat! en fait tu avais raison quant à la conversion en double de la multiplication.

    autre erreur de ma part( je suis desolée) en fait dans le code matlab il faut lire

    sigma(i)=power(myu(255)*omega(i)-myu(i),2)/(omega(i)*(1- omega(i))); à la place de
    sigma(i)=power(myu(255)*omega(i)-myu(i),(omega(i)*(1- omega(i))));


    as tu noté d'autres différences?

    as tu une idée maintenant pourquoi sur cible ça ne marche pas?

  13. #53
    Membre émérite Avatar de stephl
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2007
    Messages : 643
    Par défaut
    Ah ok, je n'arrivais pas à comprendre comment tu avais traduit la fonction power dans ton code c

    Je suis en train d'écrire un petit résumé de mes commentaires. Je le poste dès que c'est prêt.

    EDIT
    Pour le calcul de l'histogramme, c'est ok: les codes c et matlab font la même chose.

    Pour le calcul de omega, c'est correct également: le omega c vaut n fois le omega matlab --il y a d'ailleurs dans ton code matlab une partie inutile de calculs que tu écrases tout de suite après:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    for i=1:256
        omega(i)=hist(i)/(Hauteur*Largeur);
    end
    Il y a des différences dans le calcul de myu. myu(1) matlab est bien égal à myu[0] c, pas de problème. Mais après ce n'est plus le cas.

    matlab:
    myu(2) = myu(1) + 2 * prob(2)
    myu(2) = 0 + 2 * hist(2) / n

    c:
    myu[1] = myu[0] + 1 * histogram[1]
    myu[1] = 0 + histogram[1]

    Or, histogram[1] c correspond à hist(2) matlab. Idem pour les termes suivants. Au final, les vecteurs myu matlab et c sont différents selon moi.

    Dans le code matlab, la matrice résultat est remplie de 0 et de 1. En c, elle est remplie de 0 et 255.

    Dans le code matlab, j'ai l'impression que la matrice résultat comporte 1 si la valeur correspondante de l'image originale est strictement supérieure au seuil, sinon 0.
    Dans le code c, la matrice résultat comporte 255 si la valeur correspondante de l'image originale est supérieure ou égale au seuil, sinon 0.

    Enfin, le seuil matlab peut aller de 1 à 256, tandis que le seuil c peut aller de 0 à 255.

  14. #54
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 60
    Par défaut
    Dans le code matlab, la matrice résultat est remplie de 0 et de 1. En c, elle est remplie de 0 et 255.

    oui ce n'est pas un problème 255=0xFF= valeur max (ndg) = blanc et la valeur 1 dans une image binarisée c'est du blanc aussi.


    Enfin, le seuil matlab peut aller de 1 à 256, tandis que le seuil c peut aller de 0 à 255

    normalement le seuil varie de 0 à 255 c donc une erreur sur le code matlab car au max on a 255 ndg (autant pour moi)


    ps: quand tu ma di que tu retrouvais la meme image tu parlé de celle binarisée en c ou matlab?

  15. #55
    Membre émérite Avatar de stephl
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2007
    Messages : 643
    Par défaut
    Avec quelle formule ont été générées les valeurs matlab que tu avais jointes (donnees binarisees otsu.xls)? Si j'utilise celle qui est dans le fichier matlab (la mauvaise d'après ce que tu dis), alors j'obtiens 0 différence. En revanche, si j'utilise la formule corrigée, j'obtiens 180 différences

  16. #56
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 60
    Par défaut
    je relance mon programme et jte di ca dans quelques instants

  17. #57
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 60
    Par défaut
    donc apparemment elles ont été généré avec la première formule mais la seconde que j'ai corrigée (donc celle qui est traduite en C)me donne de meilleurs résultats.

    En fait j'avais fait des recherches sur le net et j'ai trouvé les 2 formules mais je ne retrouve plus la source exacte qui indiquait d'utiliser la 2eme formule...

  18. #58
    Membre émérite Avatar de stephl
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2007
    Messages : 643
    Par défaut
    Citation Envoyé par kayser33 Voir le message
    donc apparemment elles ont été généré avec la première formule mais la seconde que j'ai corrigée (donc celle qui est traduite en C)est la plus correcte me semble - t- il, car je l'ai testé sur d'autres images et elle me donne de meilleurs résultats.

    Je m'étais inspiré d'un algo que j'ai trouvé sur le net
    Pourrais-tu alors joindre les résultats matlab avec la formule corrigée au format excel afin que je compare (et le fichier matlab si tu as fait d'autres modifs)?

  19. #59
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 60
    Par défaut
    les differences que tu observes c'est entre l'image que tu obtiens avec ton code C et quoi?

  20. #60
    Membre émérite Avatar de stephl
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2007
    Messages : 643
    Par défaut
    Citation Envoyé par kayser33 Voir le message
    les differences que tu observes c'est entre l'image que tu obtiens avec ton code C et quoi?
    Entre l'image obtenue avec le code c et l'image obtenue avec le code matlab. J'ai écrit un petit programme qui extrait les données du fichier excel de l'image binarisée par matlab (donnees binarisees otsu.xls) et les compare à ce que j'obtiens en sortie de la fonction de binarisation c (bien-sûr j'ai changé les 255 en 1 ).

Discussions similaires

  1. Binarisation par la méthode de Otsu
    Par Lost in dans le forum Images
    Réponses: 9
    Dernier message: 28/02/2008, 20h35
  2. url ecrase par une methode get
    Par sam01 dans le forum Langage
    Réponses: 1
    Dernier message: 24/07/2006, 22h35
  3. Envoyer des données par la méthode POST
    Par sorry60 dans le forum Langage
    Réponses: 6
    Dernier message: 31/05/2006, 16h10
  4. Réponses: 4
    Dernier message: 26/05/2006, 18h17
  5. ecriture dans fichier par ma methode print
    Par makohsarah dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 17/05/2006, 20h26

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