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

OpenGL Discussion :

fragment shader: passage en n&b


Sujet :

OpenGL

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 15
    Par défaut fragment shader: passage en n&b
    Bonjour, en fait j'aimerai savoir comment passer une texture en noir et blanc avec un fragment shader pour ke le rendu soit corect ? c-a-d ki ne laisse pas le blanc blanc et tout le reste noir ?
    Doit je passer par une etape en niveau de gris ? et dans ce cas la comment faire ? (avec du glsl)

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Ca dépend ce que tu appelles "noir et blanc" et "rendu correct", il y a une infinité de façons de transformer une image en noir et blanc.

    Je pense qu'effectivement la technique la plus intuitive serait de prendre la formule classique de niveaux de gris, et d'appliquer un seuil (genre 0.5) pour déterminer les pixels noirs et les pixels blancs.

    Ensuite sur la manière de faire en GLSL... Si tu sais utiliser GLSL alors la question ne devrait pas se poser (ce n'est qu'une formule mathématique) ; sinon, commence par lire des tutoriels sur le sujet.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 15
    Par défaut
    si j'ai bien compris ce seuil se fait avec un test sur la variable intensity, mais comment avoir cette variable compte tenu que mon objet n'est pas eclairé ? c juste une texture sur un quad...

    ce serai quelque chose comme ca?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    void main() {
     
    	float intensity;
    	vec4 color;
     
    	intensity = ????
          if (intensity > 0.5)
    		color = vec4(0.0,0.0,0.0,1.0);
    	else
    		color = vec4(1.0,1.0,1.0,1.0);		
     
    	gl_FragColor = color;
    }

  4. #4
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Il te manque juste ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    vec4 input = ... ; // là je te laisse faire
    intensity = input.r * 0.30 + input.g * 0.59 + input.b * 0.11;

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 15
    Par défaut
    merci bcp Laurent ca marche nikel la, pour le niveau de gris je vai chercher un peu et jte consulterai si j'ai un prob ou si le rendu n'est pas bon

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 15
    Par défaut
    Sinon j'aimerai aussi savoir comment faire, toujours dans un fragment shader, une comparaison d'intensité avec les pixels autour de celui ke je pointe ?
    En fait je ne sai pas comment y avoir acces...

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 15
    Par défaut
    en fait jai vu qu'avec un algorithme de sobel on pouvai faire une detection de contour mon idée c de faire de passer une planche de bd en texture puis de crée un effet special en n&b mais l'effet que j'ai fai ne donne pas vraiment...
    par contre je galere un peu j'ai compris comment marche l'algo mais je comprend pas qu'elles fonctions utilisé pour diminuer lintensité des cases adjacentes

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 15
    Par défaut
    je trouvai que le seuillage avec 0.5 ne donnai aps un resultat satisfesan j'ai donc fai kelke modification pour obtenir un meilleur effet:

    l'image de depart


    binarisation avec seuillage a 0.5



    binarisation avec seuillage input.x * input.y



    il mank toujours les contours pour ke le rendu soit optimal mais c deja pas mal je trouve ...

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 15
    Par défaut
    doit je utiliser kelke chose comme ca pour le filtre de sobel ?

    mat3 sobel = gl_NormalMatrix;

    mat3 sobel1 = mat3(1.0, 1.0, 1.0, 0.0, 0.0, 0.0, -1.0, -1.0, -1.0);

    {1,1,1}
    {0,0,0}
    {-1,-1,-1}

    mat3 sobel2 = mat3(1.0, 0.0, -1.0, 1.0, 0.0, -1.0, 1.0, 0.0, -1.0);

    {1,0,-1}
    {1,0,-1}
    {1,0,-1}

  10. #10
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Si tu as des soucis d'algorithmes de traitement d'image, va plutôt les poser sur le forum Algorithmes. Concernant les fragment shaders, apparemment tu n'as pas de mal à les écrire une fois que tu as l'algo.

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 15
    Par défaut
    finalement j'ai fait mes propres recherche et jai reussi a appliker le filtre de sobel a mon images par contre derniere question, comment combiner plusieur effet entre eux ?

    en fait la jai 2 main l'un fesan leffet n&b et lautre la detection de contour

    je comprend pas comment detecter les contours puis kan c fait de binariser l'image obtenu car les 2 algo finisse par "gl_FragColor = ..."

    voila le resultat actuel, jaimerai juste rajouter le n&b ...

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 15
    Par défaut
    en passan la detection avec "laplacien" est vraiment meilleur ...


  13. #13
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Juste pour être sûr... Tes traitements d'image, tu vas finir par les appliquer à du temps réel ? Parce que sinon ça ne sert à rien de t'embêter avec GLSL et les shaders.

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 15
    Par défaut
    non en fait c juste pour convertir des images pour faire une bd avec un style special dans un 1er tps ...mais bon c pas exlu ke je fasse des animation 3D avec... je commence vraiment a bien aimer ce language et les possibilité kil offre

  15. #15
    Membre Expert
    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 : 46
    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
    Par défaut
    Regarde la, je pense que tu vas trouver ton bonheur, enfin j'espère

    http://devernay.free.fr/cours/vision...n%20contour%22

    Plein de filtres de convolution

  16. #16
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Citation Envoyé par nikhun
    en fait jai vu qu'avec un algorithme de sobel on pouvai faire une detection de contour mon idée c de faire de passer une planche de bd en texture puis de crée un effet special en n&b mais l'effet que j'ai fai ne donne pas vraiment...
    par contre je galere un peu j'ai compris comment marche l'algo mais je comprend pas qu'elles fonctions utilisé pour diminuer lintensité des cases adjacentes
    Oublie Sobel, c'est bien de dire qu'on sait ce que ça fait, mais c'est un filtre inefficace par rapport à ce qu'on utilise dans l'industrie aujourd'hui.
    Le laplacien est connu pour être meilleur que Sobel, mais c'est pas du tout de que tu devrais utiliser ! - au fait, Sobel, c'est pas ça, c'est 1 2 1; 0 0 0; -1 -2 -1 par exemple -
    Il y a pleins d'exemples de ce que tu veux faire en temps réel pour l'affichage sur les sites anglais de calcul sur GPU.

Discussions similaires

  1. [GLSL] Texture2D dans un fragment shader
    Par GloW_on_dub dans le forum OpenGL
    Réponses: 7
    Dernier message: 12/04/2010, 16h50
  2. Réponses: 5
    Dernier message: 08/09/2009, 01h10
  3. Fragment Shaders Cg et textures
    Par xelif dans le forum Développement 2D, 3D et Jeux
    Réponses: 1
    Dernier message: 01/09/2009, 22h00
  4. [JOGL+GLSL] Fragment shader et sample2D
    Par xion.luhnis dans le forum OpenGL
    Réponses: 4
    Dernier message: 21/05/2009, 03h10
  5. Fragment shader - linux vs Win
    Par Omeyocan dans le forum OpenGL
    Réponses: 8
    Dernier message: 30/06/2007, 23h41

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