Lisseur de nombres
- microdevweb
- Messages : 1802
- Inscription : mer. 29/juin/2011 14:11
- Localisation : Belgique
Re: Lisseur de nombres
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...
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...
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Work at Centre Spatial de Liège
- TazNormand
- Messages : 1297
- Inscription : ven. 27/oct./2006 12:19
- Localisation : Calvados (14)
Re: Lisseur de nombres
@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
@ 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
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
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
sinon vu que visiblement tu décide arbitrairement de comment tu 'lisse' les nombres
tu peux aussi faire un truc comme ça
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
Dernière modification par case le mar. 13/juin/2017 17:29, modifié 1 fois.
Re: Lisseur de nombres
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...
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...
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.
PureBasic: 5.60 x64 Bits.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.
PureBasic: 5.60 x64 Bits.
- TazNormand
- Messages : 1297
- Inscription : ven. 27/oct./2006 12:19
- Localisation : Calvados (14)
Re: Lisseur de nombres
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.
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
???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
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.
PureBasic: 5.60 x64 Bits.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.
PureBasic: 5.60 x64 Bits.
- TazNormand
- Messages : 1297
- Inscription : ven. 27/oct./2006 12:19
- Localisation : Calvados (14)
Re: Lisseur de nombres
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...

Le problème, c'est donc d'identifier les fameuses 50 nuances de gris...
Re: Lisseur de nombres
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

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

Dernière modification par Zorro le mer. 14/juin/2017 11:47, modifié 11 fois.
Re: Lisseur de nombres
Merci de vos réponses mais je craint qu'on s'éloigne du sujet.
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.
PureBasic: 5.60 x64 Bits.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.
PureBasic: 5.60 x64 Bits.
Re: Lisseur de nombres
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)
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
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
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

Dernière modification par case le mer. 14/juin/2017 11:23, modifié 1 fois.
Re: Lisseur de nombres
Bha, je veux lisser les nombres comme j'ai dis !
Sinon pas mal ton résultat.
Sinon pas mal ton résultat.
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.
PureBasic: 5.60 x64 Bits.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.
PureBasic: 5.60 x64 Bits.
Re: Lisseur de nombres
Ouai, ton resultat et nikel 

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Re: Lisseur de nombres
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 ....
Dernière modification par Zorro le mer. 14/juin/2017 8:13, modifié 1 fois.