Page 2 sur 4

Re: Lisseur de nombres

Publié : mar. 13/juin/2017 7:53
par microdevweb
Une technique efficace qui ne fonctionne qu'avec une tableau ou une liste triée est la suivante.

exemple: 10 20 30 40 60 70 90 100 etc je cherche la valeur 20

je vais en premier comparer le milieux donc (40) 20 est plus petit que 40 je vais donc vers la gauche, et je coupe de nouveau en 2

20 est = à 20 j'ai trouvé. Si ce n'était pas le cas, j'irais de nouveau à gauche ou à droite, compare le milieu etc...

Re: Lisseur de nombres

Publié : mar. 13/juin/2017 8:54
par TazNormand
@MicroDevWeb : Recherche Dichotomique, Shadow a déjà lancé un topic sur ça.

@ Shadow : Peux-tu exprimer clairement le but de ta réflexion, car si c'est pour modifier des codes couleurs, à part modifier l'aspect de l'image, ça ne réduira pas vraiment sa taille : si tu remplace un code couleur 247 par 245, tu auras toujours une couleur mais plus "fade".

Autrement je ne vois pas dans quel but effectuer ce lissage, donc éclaire-nous

Re: Lisseur de nombres

Publié : mar. 13/juin/2017 9:19
par Zorro
le lissage des couleurs peut eventuellement s'envisager dans le cadre de l'anti-aliasing

dans ce cas un flou gaussien fait l'affaire :)

http://www.purebasic.fr/french/viewtopi ... u+gaussien


ps: ça peut se faire avec imageMagick aussi

Re: Lisseur de nombres

Publié : mar. 13/juin/2017 11:26
par case
sinon vu que visiblement tu décide arbitrairement de comment tu 'lisse' les nombres

tu peux aussi faire un truc comme ça

Code : Tout sélectionner

Procedure lissage(valeur,range) ; valeur= valeur a lisser.   range : intervalle entre chaque valeur
ProcedureReturn valeur/range*range
EndProcedure
For a=0 To 255
  Debug lissage(a,3)
Next

Re: Lisseur de nombres

Publié : mar. 13/juin/2017 12:49
par Shadow
Merci Case, mais c'est pas encore ça.
Non pas de flou sinon c'est pire, je ne cherche pas a augmenter le nombre de couleurs mais à le diminuer en lissant les nombres qui se suivent.

Case, dans ton exemple des nombres manques !!!
Je pense avoir tous dit...

249, 251, 250, 249, 251, 250, 249, 251 -> 250, 250, 250, 250, 250, 250, 250, 250 = Lissage
248, 251, 250, 249, 252, 250, 251, 249-> 250, 250, 250, 250, 250, 250, 250, 250 = Lissage

Le lissage est fonctions des nombres, sa peut être: 0, 1, 2, 3..., 125, 126....253, 254, 255.
Je dois analyser les nombres et voir si un lissage est possible entre certain d'entre eux.

Ceci est une partie d'autres choses, une pièces d'un puzzle.*
Une autres partie remplacera les partie identique par autre chose pour encore plus de compression...

Ont dois détériorer le moins l'image d'origine possible...

Re: Lisseur de nombres

Publié : mar. 13/juin/2017 13:52
par TazNormand
Diminuer le nombre de couleur ? Et bien je dirai qu'il te faut :
1° référencer toutes les couleurs présentes sur ton image
2° pour celles qui sont les plus nombreuses dans la même teinte (bon courage pour déterminer la teinte), les caler sur une teinte médiane
3° remplacer ces teintes par la teinte médiane

Mais je me répète, diminuer le nombre de couleur avec cette méthode va rendre ton image "fadoche" et générer des artefacts.

L'autre solution serait de supprimer les couleurs peu nombreuses dans ton image, et en fonction de la taille de cette image : une image en 1920x1080 pixels souffrira moins de la suppression d'une couleur présente moins de 20 pixels, mais ce ne sera pas le cas évidemment pour une image en 400x300 pixels.

Re: Lisseur de nombres

Publié : mar. 13/juin/2017 17:15
par Shadow
2° pour celles qui sont les plus nombreuses dans la même teinte (bon courage pour déterminer la teinte), les caler sur une teinte médiane
???

Re: Lisseur de nombres

Publié : mar. 13/juin/2017 21:58
par TazNormand
Si tu as dans ton image 50 nuances de gris par exemple (référence coquine pour les dames :wink: ), tu peux simplifier et mettre la même et unique teinte de gris partout, tu économises ainsi 49 couleurs (= nuances).

Le problème, c'est donc d'identifier les fameuses 50 nuances de gris...

Re: Lisseur de nombres

Publié : mar. 13/juin/2017 23:15
par Zorro
en fait dans ce cas, il faut calculer une "distance" entre le pixel trouvé, et une couleur de Palette

on se fabrique une palette ... (arbitaire avec par exemple 3 rouges , 3 vert ,3 bleu ) (on peut aussi fabriquer cette palette d'apres quelques couleurs piqué aléatoirement dans l'image ....
on se retrouve avec une palette comme ceci

rouge foncé
rouge moyen
rouge clair
---------
Vert foncé
Vert moyen
Vert clair
----------
Bleu foncé
Bleu moyen
Bleu clair
--------
noir
gris (127,127,127)
blanc

nous voila avec 12 couleurs possible

on se fait une petite procedure, qui calcule la distance entre la couleur du pixel analysé (faut analyser tout les pixels de l'image )
et la palette qu'on viens de creer ....
si la distance est proche (avec une tolerance possible )
on utilise la couleur de la palette a la place de la couleur d'origine de la photo

bien sur il faut que la tolerance soit "tolerante" pour forcer le prg a prendre une couleur de la palette au lieu de prendre une couleur qui ne conviendrai pas

ainsi on redessine en fait l'image en utilisant les "crayons" de couleur de notre palette, au lieu d'utiliser les couleurs d'origine ..
de la sorte on reduit de façon coherente le nombre de couleur sans abérations ....

image d'origine :219 Ko
Image

image 4096 couleurs  231 ko                                                                                                                                                                         
Image

image 1024 couleurs 231 ko
Image

image 512 couleurs 229 ko
Image

image 255 couleurs 230 ko
Image

image 128 couleurs 234 ko
Image

image 32 couleurs 228 ko
Image

image 16 couleurs 187 ko
Image

image 8 couleurs 183 ko
Image

image 2 couleurs 118 ko
Image

Re: Lisseur de nombres

Publié : mar. 13/juin/2017 23:24
par Shadow
Merci de vos réponses mais je craint qu'on s'éloigne du sujet.

Re: Lisseur de nombres

Publié : mar. 13/juin/2017 23:29
par case
au vu de ton sujet c'est difficile de savoir ce qui est dans le sujet de ce qui ne l'est pas.
pour moi tout ce qui est dit dans ce post est tout a fait en rapport avec le sujet justement.
tu veux réduire la palette d'une image donc le post de zorro est au contraire pile dans le sujet.

du coup si on s’éloigne du sujet précise quel est le sujet ...

et dans mon exemple aucun nombre ne manque

je réduit juste par 4 le nombre de valeurs possible pour une composantes de la couleur (rgb)

Code : Tout sélectionner

Procedure lissage(valeur,range) ; valeur= valeur a lisser.   range : intervalle entre chaque valeur
ProcedureReturn valeur/range*range
EndProcedure
For a=0 To 255
  Debug str(a)+"->"+str(lissage(a,3))
Next

Re: Lisseur de nombres

Publié : mer. 14/juin/2017 0:06
par case
et voila le chat de dobro passe a la moulinette avec ma procédure ( avec 4 et 8 et 16 comme parametres de range)
converti dans le même format (png) auparavant
original
1 115,2 Ko (1 141 964 octets)
Image
lissage 4
646,66 Ko (662 180 octets)
Image
lissage 8
418,75 Ko (428 797 octets)
Image
lisage 16
257,09 Ko (263 259 octets)
Image

non, je ne posterais pas le code a toi de jouer :)

Re: Lisseur de nombres

Publié : mer. 14/juin/2017 1:20
par Shadow
Bha, je veux lisser les nombres comme j'ai dis !
Sinon pas mal ton résultat.

Re: Lisseur de nombres

Publié : mer. 14/juin/2017 7:20
par SPH
Ouai, ton resultat et nikel :!:

Re: Lisseur de nombres

Publié : mer. 14/juin/2017 7:23
par Zorro
Shadow a écrit :Bha, je veux lisser les nombres comme j'ai dis !
Sinon pas mal ton résultat.

alors je repete ,

en Graphisme lisser les nombre reviens a faire de l'antialiasing ,
il n'y a pas creation de nouvelle couleurs mais modification de couleur intermediaire

exemple , une ligne de pixel ayant 3 pixel : 10,20,13 ; si tu la lisse tu peux obtenir ceci : 10,12,13 , et bien tu as effectué un antialiasing !
car la couleur intermédiaire (celle se trouvant au milieu de ta ligne ) aura été "lissé" !

c'est pareil pour un son , une musique ,etc...

lorsqu'on effectue un Flou sur une image c'est tres exactement ce qui se passe !

dans tout les cas , un lissage represente une perte d'information , non pas que les données soient moins nombreuses
mais par l'information qu'elle contient qui est lissé (modifié ) ,

un joli pixel bien rouge , deviendra "rose" par exemple , en ça , il y a bien une perte d'information ....
a partir de là , autant maitriser la perte , soit en utilisant une palette (comme mes exemples ci dessus )
soit en "floutant" , il existe plein d'algorytme de floutage , voir Flou Gaussien Par exemple ...
le resultat d'un lissage, c'est adoucir , feutrer , ternir ,etc ....