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

Contribuez Discussion :

[Source] [SDL] Transformations optiques, détections de bords etc.


Sujet :

Contribuez

  1. #1
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Points : 9 818
    Points
    9 818
    Par défaut [Source] [SDL] Transformations optiques, détections de bords etc.
    Voici une mini bibliothèque de fonction que j'ai réalisé pour la bibliothèque SDL.

    Source ici :
    http://neoflo.free.fr/cours_c/SDLoptique/optique.rar

    Des fonctions permettant de :
    - Appliquer une matrice de convolution N*M à une surface ;
    - Réaliser une détection de bords ;
    - Réalise un gaufrage ;
    - Augmentation du contraste ;
    - Effectuer un repoussage ;.
    - Appliquer un flou (lissage);
    - Flou Gaussien (paramètre : sigma et taille du noyau)
    - Améliorer les phrases (je suis pas sûr de la méthode de celle là) ;
    - Inverser les couleurs d'une image ;
    - Seuillage binaire ;
    - Griser une surface.

    Exemple en image, ttention les nieux !!

    Image original (photo de moi):

    Flou = lissage :



    Détection de bords :



    Augmentation constraste :



    Repoussage :



    Gaufrage :



    Inverser :



    Amélioration des phrases :

    Je ne répondrai à aucune question technique en privé

  2. #2
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Points : 9 818
    Points
    9 818
    Par défaut
    En cherchant avec une matrice de convolution proche de celle du repoussage

    M = {{-2,-1,0},{-1,1,1},{0,1,2}}

    Je pense qu'il y a moyen de faire un effet "toon", ce qui peut être intéressant.
    Je ne répondrai à aucune question technique en privé

  3. #3
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Points : 9 818
    Points
    9 818
    Par défaut
    Finalement, après pas mal d'essai, je n'ai rien trouvé de concluant
    Je ne répondrai à aucune question technique en privé

  4. #4
    Membre confirmé

    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    353
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 353
    Points : 573
    Points
    573
    Par défaut
    c'est sympa comme release, merci

  5. #5
    Rédacteur

    Avatar de loka
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2004
    Messages
    2 672
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 672
    Points : 5 509
    Points
    5 509
    Par défaut
    ça me rappelle des tp d'image (fais en c)
    On avait du faire la même chose, c'etais marrant.

  6. #6
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Très bon source, je pense que cela peut intéresser plus d'un!

    J'ai du modifier quelques trucs pour que cela soit acceptable pour un système *nux et j'ai rajouter un test sur le chargement de ta surface origine (cela planter chez moi parce que sous linux, 03.bmp != 03.BMP...

    Bref, j'ai ajouté un makefile aussi... Dis-moi si cela te convient...
    http://fearyourself.developpez.com/temp/optique.zip

    Jc

  7. #7
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Points : 9 818
    Points
    9 818
    Par défaut
    Merci bien, j'ai mis à jour le fichier.

    C'est vrai, je n'avais pas de linux sous la main, donc pas possible à tester.

    Heureusement, l'oubli de tester le pointeur, c'était dans le main, donc moins important pour ceux qui voulait juste utiliser la bibliothèque.

    Quoique, si ça renvoit NULL, ya un SDL_FreeSurface, si c'est comme free, vaut mieux pas l'utiliser avec un pointeur NULL. Mais je ne sais pas comment c'est avec la SDL.


    Mci
    Je ne répondrai à aucune question technique en privé

  8. #8
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Citation Envoyé par millie
    Heureusement, l'oubli de tester le pointeur, c'était dans le main, donc moins important pour ceux qui voulait juste utiliser la bibliothèque.
    Tout à fait

    Quoique, si ça renvoit NULL, ya un SDL_FreeSurface, si c'est comme free, vaut mieux pas l'utiliser avec un pointeur NULL. Mais je ne sais pas comment c'est avec la SDL.

    Mci
    C'est exactement cela, si tu passes NULL à SDL_FreeSurface, cela ne fait rien, comme pour free.

    Par contre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     SDL_BlitSurface(origine, NULL, fond, NULL);
    Le prend moins bien

    Jc

  9. #9
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Points : 9 818
    Points
    9 818
    Par défaut
    Je viens de corriger la fonction de Gaufrage, j'avais oublié une ligne dans la définition Mais j'ai une déf pour des images en noir et blanc, donc j'espère que c'est à peu près pareil.

    Sinon, j'ai vu que t'as renommé mes fonctions, j'ai laissé comme ça, mais j'avais l'habitude d'ajouter un _ pour indiquer que CT des fonctions locales au module. (définie par un static dans le .c). Enfin, j'ai laissé comme t'as changé, ça change rien de tte manière.
    Je ne répondrai à aucune question technique en privé

  10. #10
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Points : 9 818
    Points
    9 818
    Par défaut
    J'ai ajouté 2 fonctions :

    Une permettant d'inverser les couleurs d'une image,

    l'autre permettant d'appliquer un flou.
    Je ne répondrai à aucune question technique en privé

  11. #11
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Citation Envoyé par millie
    Sinon, j'ai vu que t'as renommé mes fonctions, j'ai laissé comme ça, mais j'avais l'habitude d'ajouter un _ pour indiquer que CT des fonctions locales au module. (définie par un static dans le .c). Enfin, j'ai laissé comme t'as changé, ça change rien de tte manière.
    Les fonctions _* sont réservés en fait... Tu pourrais mettre FS pour fonctions statiques...

    Jc

  12. #12
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Points : 9 818
    Points
    9 818
    Par défaut
    Maintenant, on peut appliquer à l'image des matrices de convolution quelconque, j'ai ajouté une fonction permettant d'appliquer des flous gaussiens :
    Les paramètres étant sigma et la taille du noyau (correspond au rayon du flou dans GIMP) (je ferais surement une autre version à un seul argument).

    Exemple : sigma = 2, taille du noyau = 9 : (10 sec de calcul chez moi)
    [Edit 6sec]



    sigma = 4, taille du noyau 15

    Je ne répondrai à aucune question technique en privé

  13. #13
    Membre émérite
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Points : 2 568
    Points
    2 568
    Par défaut
    Pour comprendre le principe ton code est bien.

    Mais voir l'appel de fonction SDL_LireCouleur dans 2 boucles for non inversé....

    Je me rappelle que sur 4 points sur un exam pour a peu prêt la même chose j'ai eu 0/4, non pas que mon code n'était pas correcte (car j'ai demandé pourquoi 0, vu que c'était correcte), mais il n'était pas optimisé... et pourtant c'était quand même bien plus optimisé que ton code…

    J'ai voulu jeter un oeil quand j'ai vu -> "sigma = 2, taille du noyau = 9 : (10 sec de calcul chez moi)"

    Sinon c’est bien pour voir un peu les bases de la TNI

  14. #14
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Points : 9 818
    Points
    9 818
    Par défaut
    OUi, je sais très bien que ce n'est pas encore optimisé sur ce point là. Je cherchai pour l'instant à avoir qqch qui marchait SI tu as des conseilles d'optimisations, je suis preneur. (ou des cours, à n'importe quel niveau de maths/info, ça ira)
    Je ne répondrai à aucune question technique en privé

  15. #15
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Points : 9 818
    Points
    9 818
    Par défaut
    J'ai ajouté une fonction de seuillage binaire, et de grisage d'une surface.

    J'ai modifié la fonction d'amélioration des phrases.
    Je ne répondrai à aucune question technique en privé

  16. #16
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Citation Envoyé par millie
    J'ai ajouté une fonction de seuillage binaire, et de grisage d'une surface.

    J'ai modifié la fonction d'amélioration des phrases.
    Donc ceci se trouve dans le lien du premier post ?
    Est-ce qu'on pourrait avoir une version .zip ?

    Jc

  17. #17
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Points : 9 818
    Points
    9 818
    Par défaut
    Oui, oui, c'est integré me semble-t-il. Tu peux avoir une version .zip ici :

    http://neoflo.free.fr/cours_c/SDLoptique/optique.zip

    En vérité, j'ai une nouvelle version beaucoup plus complète. Qui intégre notamment des transformations en utilisant des transformées de Fourier. Ou encore des fonctions de reconstructions, des filtres passe haut, passe bas... Sans transformation de Fourier, j'ai ajouté une fonction de flou gaussien qui calcule automatiquement la taille du noyau en réalisant une résolution par dichotomie.

    Mais le code devient vraiment lourd, donc ce n'est pas très utilisable par quelque'un qui souhaiteriait qu'une seule fonction.
    Je ne répondrai à aucune question technique en privé

  18. #18
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Citation Envoyé par millie
    Oui, oui, c'est integré me semble-t-il. Tu peux avoir une version .zip ici :

    http://neoflo.free.fr/cours_c/SDLoptique/optique.zip

    En vérité, j'ai une nouvelle version beaucoup plus complète. Qui intégre notamment des transformations en utilisant des transformées de Fourier. Ou encore des fonctions de reconstructions, des filtres passe haut, passe bas... Sans transformation de Fourier, j'ai ajouté une fonction de flou gaussien qui calcule automatiquement la taille du noyau en réalisant une résolution par dichotomie.

    Mais le code devient vraiment lourd, donc ce n'est pas très utilisable par quelque'un qui souhaiteriait qu'une seule fonction.
    Ok ca marche, gardons la source relativement simple

    Jc

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

Discussions similaires

  1. [Source] [SDL] Mirroir d'une image
    Par fearyourself dans le forum Contribuez
    Réponses: 15
    Dernier message: 06/11/2008, 16h50
  2. [FAQ] [Source] [SDL] Nombre de fps
    Par fearyourself dans le forum Contribuez
    Réponses: 10
    Dernier message: 25/07/2006, 09h42
  3. [Source] [SDL] [C++] snake en SDL
    Par loka dans le forum Contribuez
    Réponses: 4
    Dernier message: 14/07/2006, 22h32
  4. Codes sources SDL
    Par raptor70 dans le forum SDL
    Réponses: 0
    Dernier message: 14/07/2006, 05h12
  5. [Source] [SDL] Commencement d'un casse brique
    Par grincheux01 dans le forum Contribuez
    Réponses: 8
    Dernier message: 29/06/2006, 12h27

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