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

), 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 4096 couleurs
231 ko
image 1024 couleurs
231 ko
image 512 couleurs
229 ko
image 255 couleurs
230 ko
image 128 couleurs
234 ko
image 32 couleurs
228 ko
image 16 couleurs
187 ko
image 8 couleurs
183 ko
image 2 couleurs
118 ko

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)

lissage 4
646,66 Ko (662 180 octets)

lissage 8
418,75 Ko (428 797 octets)

lisage 16
257,09 Ko (263 259 octets)
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 ....