Lisseur de nombres

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
microdevweb
Messages : 1802
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Re: Lisseur de nombres

Message 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...
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Avatar de l’utilisateur
TazNormand
Messages : 1297
Inscription : ven. 27/oct./2006 12:19
Localisation : Calvados (14)

Re: Lisseur de nombres

Message 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
Image
Image
Avatar de l’utilisateur
Zorro
Messages : 2186
Inscription : mar. 31/mai/2016 9:06

Re: Lisseur de nombres

Message 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
Avatar de l’utilisateur
case
Messages : 1546
Inscription : lun. 10/sept./2007 11:13

Re: Lisseur de nombres

Message 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
Dernière modification par case le mar. 13/juin/2017 17:29, modifié 1 fois.
ImageImage
Shadow
Messages : 1413
Inscription : mer. 04/nov./2015 17:39

Re: Lisseur de nombres

Message 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...
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.
Avatar de l’utilisateur
TazNormand
Messages : 1297
Inscription : ven. 27/oct./2006 12:19
Localisation : Calvados (14)

Re: Lisseur de nombres

Message 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.
Image
Image
Shadow
Messages : 1413
Inscription : mer. 04/nov./2015 17:39

Re: Lisseur de nombres

Message 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
???
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.
Avatar de l’utilisateur
TazNormand
Messages : 1297
Inscription : ven. 27/oct./2006 12:19
Localisation : Calvados (14)

Re: Lisseur de nombres

Message 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...
Image
Image
Avatar de l’utilisateur
Zorro
Messages : 2186
Inscription : mar. 31/mai/2016 9:06

Re: Lisseur de nombres

Message 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
Dernière modification par Zorro le mer. 14/juin/2017 11:47, modifié 11 fois.
Shadow
Messages : 1413
Inscription : mer. 04/nov./2015 17:39

Re: Lisseur de nombres

Message par Shadow »

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.
Avatar de l’utilisateur
case
Messages : 1546
Inscription : lun. 10/sept./2007 11:13

Re: Lisseur de nombres

Message 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
ImageImage
Avatar de l’utilisateur
case
Messages : 1546
Inscription : lun. 10/sept./2007 11:13

Re: Lisseur de nombres

Message 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 :)
Dernière modification par case le mer. 14/juin/2017 11:23, modifié 1 fois.
ImageImage
Shadow
Messages : 1413
Inscription : mer. 04/nov./2015 17:39

Re: Lisseur de nombres

Message par Shadow »

Bha, je veux lisser les nombres comme j'ai dis !
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.
Avatar de l’utilisateur
SPH
Messages : 4947
Inscription : mer. 09/nov./2005 9:53

Re: Lisseur de nombres

Message par SPH »

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
Avatar de l’utilisateur
Zorro
Messages : 2186
Inscription : mar. 31/mai/2016 9:06

Re: Lisseur de nombres

Message 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 ....
Dernière modification par Zorro le mer. 14/juin/2017 8:13, modifié 1 fois.
Répondre