Taux de ressemblance couleurs RVBA

Réponses à toutes vos questions de la 2nde à la Terminale toutes séries
Buenol
Messages: 2
Enregistré le: 09 Fév 2010, 10:23

Taux de ressemblance couleurs RVBA

par Buenol » 09 Fév 2010, 10:39

Bonjour,

J'ai besoin d'avoir un "taux de ressemblance" entre 2 couleurs.Dans l'idée de faire un remplissage d'une image par graine (dans Paint,le pot de peinture).
J'ai donc mis en place une tolerance (pour pas que le remplissage s'arréte alors que la couleur voisine est proche).

Cette tolerance s'exprime en pourcentage.

J'appelle a,r,v,b les composantes de la premiére couleur et a',r',v',b' les composantes de la deuxiéme couleur. (le a désigne l'alpha que je pense traité autrement que pour les autres composantes).

a,r,v,b compris entre 0 et 1;

Dés lors j'ai pensé à quelques méthodes
D'abord , "prémultiplié" r,v et b par a. (Ce qui semble judicieux)
Donc il ne me reste pour que r,v,b a comparer.

1ére méthode:
Je fais | r - r' | / r pour chaque composante.
J'en fait une moyenne.
Et je regarde si 1 - "cette moyenne de ressemblance" < tolerance.

2éme méthode:
Je calcul la distance entre les 2 vecteurs

->probléme:pas compris entre 0 et 1... (mais c'est fesable)

Et vous,auriez vous une idée ? :id:



Avatar de l’utilisateur
Ben314
Le Ben
Messages: 21709
Enregistré le: 11 Nov 2009, 21:53

par Ben314 » 09 Fév 2010, 11:19

Je comprend pas trop comment tu trouve quatre composantes pour une couleur, normalement, il n'y en a que trois :
- Soit Rouge, Vert, Bleu qui sont en général des entiers entre 0 et 255 (ce qui correspond le mieux à la façon de voir les couleur de la carte graphique) et qu'évidement, en divisant par 255 on peut ramener à des réels de [0,1]
- Soit avec Teinte, Saturation, Luminosité (qui sont aussi souvent des entiers entre 0 et 255) qui correspond sans doute mieux à la vision "humaine" des couleurs.

Il y a des formules assez simple pour faire (R,V,B)<->(Teinte,Sat.,Lum.)
(si tu en as besoin, cherche sous google "codage des couleurs")


Aprés, avec ces TROIS coordonnées, tu peut appliquer l'une ou l'autre de tes deux méthodes : elles donneront sensiblement le même résultat.

(sauf que dans la première méthode, je ne diviserais pas par 'r', je prendrait seulement |r-r'|+|v-v'|+|b-b'| que tu peut, si tu veux diviser par 3, mais ça ne sert à rien)

P.S. : Ou as tu trouvé ton fameux "alpha" ?
Qui n'entend qu'un son n'entend qu'une sonnerie. Signé : Sonfucius

Avatar de l’utilisateur
Ben314
Le Ben
Messages: 21709
Enregistré le: 11 Nov 2009, 21:53

par Ben314 » 09 Fév 2010, 11:30

Je viens de chercher sous google "RVBA" :
Le A est la "transparence" de la couleur, je vois parfaitement à quoi il peut servir lorsque tu "met" un nouveau point : la couleur qui sera mise sur le point va tenir compte (plus ou moins selon la transparence) de la couleur que le point avait avant de mettre la nouvelle couleur.
Par contre, lorsque tu "lit" la couleur d'un point déjà existant, je vois pas trop à quoi peut correspondre la "transparence"...
Qui n'entend qu'un son n'entend qu'une sonnerie. Signé : Sonfucius

Avatar de l’utilisateur
fatal_error
Membre Légendaire
Messages: 6610
Enregistré le: 22 Nov 2007, 12:00

par fatal_error » 09 Fév 2010, 12:08

salut,

d'apres ce lien

C = alphaB B + (1-alphaB) alphaA A
Ici, on a alphaB = a'
alphaA = a
C, B et A sont des vecteurs ayant les composantes (r,v,b).

Pour calculer la distance, on compare le point C(le point apres) avec le point A (le point avant).
Si les coordo de C sont c_r,c_v,c_b et celles de A a_r,a_v,a_b, on peut tenter d'écrire


Cette valeur est comprise entre 0 et 1, 0 etant la plus grande ressemblance entre les points A et C
la vie est une fête :)

Avatar de l’utilisateur
Ben314
Le Ben
Messages: 21709
Enregistré le: 11 Nov 2009, 21:53

par Ben314 » 09 Fév 2010, 12:29

Salut, fatal_error,
Je sais pas si le petit soucis de ta méthode c'est pas qu'il faut connaitre B et alpha_B pour l'appliquer, c'est à dire qu'il faut non seulement connaitre le "papier calque" de l'images que tu veut tripoter, mais aussi l'image sur laquelle tu va poser ton calque.

Je pense (mais pas sûr) que Buenol voudrait fabriquer un nouveau fichier partant d'un seul fichier (celui du "calque") sans savoir sur quel dessin va être appliqué ce "calque".
Dans ce cas, je sais pas trop qu'est ce qui est le plus "logique" pour calculer la distance entre deux points : un point avec alpha=0 est totalement transparent quelque soit les valeurs de r,v,b : j'aurais tendance à dire que deux points avec des alpha tout les deux (quasi) nuls sont trés proches, indépendement du r,v,b.

Ce qu'il y a de sûr, c'est que ce qu'il fait : "produit de alpha par les composantes (r,v,b)" n'est pas bon car un point noir (r=v=b=0) pas transparent du tout (alpha=1) donne la même chose qu'un point totalement transparent (alpha=0, r=?, v=?, b=?) ce qui ne va pas.
Qui n'entend qu'un son n'entend qu'une sonnerie. Signé : Sonfucius

Buenol
Messages: 2
Enregistré le: 09 Fév 2010, 10:23

par Buenol » 09 Fév 2010, 12:54

fatal_error : merci beaucoup (mais tu est vriament sur de toi? ca me parait louche de devoir calculer un nouveau point)

Mais je prend!

Oula,je crois que je me suis mal expliquer:

je tente ceci : algo de remplissage par diffusion (regardez les anims pour comprendre)

Et donc,je veux faire une tolérance pour dire si je continu a me diffuser ou pas sur l'image (pour la remplir donc,mais qu'a un certain endroit)

En clair,je veux savoir le pourcentage de différence en 2 pixels.

Mais j'ai l'impression que vous croyez que je veux faire un composition de 2 image....ce qui n'est pas le cas^^

PS : je vien de me rendre compte que si on me donne la solution pour une couleur RVB ca m'irait trés bien ^^

(et la formule de fatal_error a ca d'interesant,je vais l'utiliser je pense,même si c'est pas trés performant en utilisation (division,utilisation de réels...)

EDIT:Oui,en faite,la formule de fatal_error prend en compte l'alpha,ce qui est super ,et j'ai bien sur connaisance de alphaB et B Ben =)

Avatar de l’utilisateur
fatal_error
Membre Légendaire
Messages: 6610
Enregistré le: 22 Nov 2007, 12:00

par fatal_error » 09 Fév 2010, 17:00

salut ben,

Chui partiellement d'accord :
Dans ce cas, je sais pas trop qu'est ce qui est le plus "logique" pour calculer la distance entre deux points : un point avec alpha=0 est totalement transparent quelque soit les valeurs de r,v,b : j'aurais tendance à dire que deux points avec des alpha tout les deux (quasi) nuls sont trés proches, indépendement du r,v,b.


Si on prend deux couleurs opaques style alpha = 1, vert et vert clair, ben les couleurs sont proches aussi.
Ce qu'on entend par distance, c'est essayer de quantifier la différence de couleur percue par loeil humain, cqui est pas trivial.

Je pense que le produit machin des alphas est correct, c'est utilisé pour svg et d'autre trucs.
La ou je pense que c'est mauvais, c'est dans l'estimation des distances entre deux couleurs.

En partant de ta remarque, on peut admettre que deux couleurs sont identiques si leur canal alpha est faible, et a canal egal si leur composantes rvb sont proches.
On a donc deux critères de différence a exploiter, le canal, et la distance rvb.

La formule que j'ai proposé d(A,C), tient compte des composantes rvb, mais pas dalpha (au moins pas directement) comme tu las fait remarqué.
Jpropose donc une deuxieme formule : un truc avec variance. On considère (et ca parait honnete) le point C comme une moyenne de A et B. On mesure alors la variance.
Le probleme c'est que la formule pour trouver C est pas commutative. Mais jmanque de recul pour voir le problèmes que ca soulève.

Sinon, on peut aussi calculer C l'image de A,B et C' l'image B,A et calculer la distance entre C et C'...
Jtenterais bien deux trois tests, mais là, ya du taff qui s'accumule :marteau:
la vie est une fête :)

Avatar de l’utilisateur
Ben314
Le Ben
Messages: 21709
Enregistré le: 11 Nov 2009, 21:53

par Ben314 » 09 Fév 2010, 17:15

En fait, toute la fin de mon post précédent est... nul et non avenu :
Vu ce qu'il désire faire, il connait le [A,alpha] (couleur de remplissage) et aussi le [B,beta] (couleur du point succeptible d'ètre "rempli") donc il peu parfaitement faire les calculs que tu lui suggère.

La fin de mon post concernait le cas où tu n'as qu'une image qui, plus tard, va servir de "calque" pour se supperposer à quelque chose, mais pour le moment tu ne sait pas à quoi on va superposer l'image. Tu veut quand même "colorier" des zones du calque. Dans ce cas, tu n'as a ta disposition que le (A,alpha) et il faut essayer de définir une notion de distance entre deux couleurs avec uniquement ça. Perso, dans ce cas, je prendrait une notion de distance identique à la tienne mais ou on fait la moyenne sur tout les couples (B,beta) possible, vu qu'on ne les connait pas...
Enfin, bon, de toute façon son problème est plus simple que ce que je craignais et ta soluce marche parfaitement.
Qui n'entend qu'un son n'entend qu'une sonnerie. Signé : Sonfucius

 

Retourner vers ✎✎ Lycée

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 66 invités

Tu pars déja ?



Fais toi aider gratuitement sur Maths-forum !

Créé un compte en 1 minute et pose ta question dans le forum ;-)
Inscription gratuite

Identification

Pas encore inscrit ?

Ou identifiez-vous :

Inscription gratuite