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

Traitement d'images Discussion :

Couleur ressemblance ( Formule de carron )


Sujet :

Traitement d'images

  1. #1
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    22
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 22
    Points : 25
    Points
    25
    Par défaut Couleur ressemblance ( Formule de carron )
    Bonjour,

    Je cherche à afficher une image sur une sorte de console qui ne peut accueillir que 16 couleurs.

    Je commence par re-grouper des pixel ensemble, pour faire une sorte de gros 'pixel' qui va correspondre a un 'pixel' console. Jusque là, tout va bien.

    Ensuite j'essaie de prendre la couleur la plus ressemblante aux couleurs disponibles. J'ai donc trouvé le cours de Xavier Philippeau sur ce même site et prit sa formule de carron (http://xphilipp.developpez.com/artic...ation/regions/ )

    Le problème, c'est que le résultat n'est pas très bon.

    Je ne sais pas si cela vient de l'algorithme utilisé, ou une erreur de programmation.Je suis un peu perdu.

    Je vous poste mon code que vous pourrez testé :

    La formule de Carron
    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 distanceCarron(h0,l0,s0,h1,s1,l1,rate,offset){
    		var a_s0 = ( (Math.PI / 2) + Math.atan(rate*(s0-offset)) ) / Math.PI ;
    		var a_s1 = ( (Math.PI / 2) + Math.atan(rate*(s1-offset)) ) / Math.PI ;
     
    		var alpha = Math.sqrt(a_s0*a_s1);
     
    		var delta_h = Math.min( Math.abs(h1-h0) , 1 - Math.abs(h1-h0) );
    		var delta_l = Math.abs( l1 - l0 ) ;
     
    		var distance = (alpha * delta_h) + ( (1- alpha) * delta_l ) ;
     
    		return Math.abs(distance);
    		//return distance ;
     
    	}

    La recherche du pixel le plus proche :
    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
    22
    23
    24
    25
    26
     
    function getConsoleColor(r,g,b){
     
    		var rate = document.getElementById('Crate').value ;
    		var offset = document.getElementById('Coffset').value ;
     
    		var s_HLS = RGBtoHSL(r,g,b);
     
    		var fid = -1 ;
    		var distance_min = null ;
    		for( var id in COLOR ){
     
    			var distance = distanceCarron(s_HLS[0],s_HLS[1],s_HLS[2],
    									COLOR_HLS[id][0],COLOR_HLS[id][1],COLOR_HLS[id][2],
    									rate,offset);
    			//console.log(distance);
    			if( distance < distance_min || distance_min == null ){
    				fid = id ;
    				distance_min =distance ;
    			}
    		}
     
    		return COLOR[fid];
                    //COLOR_HLS  == COLOR (r,g,b)
     
    	};
    Et le code complet où vous pourrez testé :
    http://jsfiddle.net/ktqMY/

    http://pastebin.com/daEaEiDS

    Si vous avez des idées pour n'aiguiller, je suis preneur !

    Merci d'avance à tous !

    Bonne journée

  2. #2
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    Il existe d'autre formules de distance, plus proche de la perception humaine.

    Dans RGB, tu peux essayer: Drgb=racine( 2*dR² + 4*dG² + 3*dB² )

    Dans LAB, tu peux utiliser la distance CIE76, qui est simplement la distance euclidienne: Dlab = racine( dL² + dA² + dB² )

    Dans YUV, tu peux aussi prendre une distance euclidienne. (Généralement je pondère la valeur de Y dans le calcul pour prendre en compte la correction gamma)



    Exemple: couleurs qui sont à une distance de 40 du bleu-cyan d'après Drgb et Dlab
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  3. #3
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    22
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 22
    Points : 25
    Points
    25
    Par défaut
    Merci, J'essayerai les autres méthodes voir se que cela donne.


Discussions similaires

  1. [XL-2003] changement de couleur avec formule
    Par spineker dans le forum Excel
    Réponses: 4
    Dernier message: 05/01/2014, 07h31
  2. Formule de Carron
    Par Pipaillon dans le forum Traitement d'images
    Réponses: 6
    Dernier message: 03/04/2013, 18h55
  3. Dénombrer des cellules selon leurs couleurs avec formule
    Par Paenitentia dans le forum Excel
    Réponses: 5
    Dernier message: 14/03/2011, 14h38
  4. Réponses: 5
    Dernier message: 18/12/2007, 20h26
  5. [8.5][Formule] Couleur dans un champ
    Par ickyknox dans le forum Formules
    Réponses: 21
    Dernier message: 27/03/2007, 11h43

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