[Résolu] Comment lisser une image ?
[Résolu] Comment lisser une image ?
Peut-être avez-vous la réponse ! Moi, je ne sais pas comment on fait, alors je fais appel aux hommes de bonne volonté pour m'aider à combler cette lacune.
Avec tous mes remerciements sincères.
Avec tous mes remerciements sincères.
Dernière modification par Micoute le jeu. 20/sept./2012 15:07, modifié 1 fois.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Un homme doit être poli, mais il doit aussi être libre !
Re: Comment lisser une image ?
voici deja un lien sur L'anti aliasing
http://www.purebasic.fr/french/viewtopi ... i+aliasing
mais en general , le lissage n'est que l'application d'un Filtre sur l'image
c'est a dire un petit calcul numerique sous forme de masque , qui entoure le pixel analysé ..
http://www.purebasic.fr/french/viewtopi ... i+aliasing
mais en general , le lissage n'est que l'application d'un Filtre sur l'image
c'est a dire un petit calcul numerique sous forme de masque , qui entoure le pixel analysé ..

Re: Comment lisser une image ?
C'est très simple.
avec une double boucle imbriqué tu lis la couleur de chaque pixel.
avec une autre boucle tu lis les pixels voisin
tu additionnes les pixels adjacents
tu divises par le nombre de pixel adjacents
tu sauvegardes ton résultat.
voici un code plus parlant :
avec une double boucle imbriqué tu lis la couleur de chaque pixel.
avec une autre boucle tu lis les pixels voisin
tu additionnes les pixels adjacents
tu divises par le nombre de pixel adjacents
tu sauvegardes ton résultat.
voici un code plus parlant :
Code : Tout sélectionner
UsePNGImageDecoder()
UseJPEG2000ImageDecoder()
UseJPEGImageDecoder()
UseTGAImageDecoder()
; 10 passes
#BLUR_PASS = 2
#BLUR_SIZE = 2
image.s = OpenFileRequester("","","",0)
If image
LoadImage(0,image,24)
; Tableau de resultat
Dim colorResult.i(ImageWidth(0),ImageHeight(0))
;Lecture de l'image source
StartDrawing(ImageOutput(0))
For pass = 0 To #BLUR_PASS - 1
For y = 0 To ImageHeight(0)-1
For x = 0 To ImageWidth(0)-1
; Recup du pixel
pixel.i = Point(x,y)
; Des couleurs
rCol = Red(pixel)
gCol = Green(pixel)
bCol = Blue(pixel)
; On regarde autour du pixel , on compte les pixel valide (n) qui sont dans l'image xy>0 & xy<taille
n=1
For yy = -#BLUR_SIZE To #BLUR_SIZE
For xx = -#BLUR_SIZE To #BLUR_SIZE
If x+xx=>0 And x+xx<ImageWidth(0) And y+yy=>0 And y+yy<ImageHeight(0) And xx<>0 And yy<>0
n+1
col.i = Point(x+xx,y+yy)
; on additionne par rapport au pixel precedent
rCol + Red(col)
gCol + Green(col)
bCol + Blue(col)
EndIf
Next
Next
; on divise le pixel par le nombre de pixel valide
rCol / n
gCol / n
bCol / n
; on verifie que la couleur ne dépasse pas 0-255
If rCol > 255 : rCol = 255 : EndIf
If gCol > 255 : gCol = 255 : EndIf
If bCol > 255 : bCol = 255 : EndIf
If rCol < 0 : rCol = 0 : EndIf
If gCol < 0 : gCol = 0 : EndIf
If bCol < 0 : bCol = 0 : EndIf
pixel = RGB(rCol,gCol,bCol)
; on colle le resultat dans le tableau
colorResult(x,y) = pixel
Next
Next
; on met à jour l'image source pour la passe suivante.
For ny = 0 To ImageHeight(0)-1
For nx = 0 To ImageWidth(0)-1
Plot(nx,ny,colorResult(nx,ny))
Next
Next
Next ; passe suivante
; on sauvegarde le resultat dans un .bmp
StopDrawing()
CreateImage(1,ImageWidth(0),ImageHeight(0))
StartDrawing(ImageOutput(1))
For y = 0 To ImageHeight(1)-1
For x = 0 To ImageWidth(1)-1
Plot(x,y,colorResult(x,y))
Next
Next
StopDrawing()
file.s = SaveFileRequester("","","*.bmp",0)
If file
SaveImage(1,file,#PB_ImagePlugin_BMP)
EndIf
EndIf
Re: Comment lisser une image ?
Merci énormément, c'est tout à fait ça que je recherchais, à charge de revanche.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Un homme doit être poli, mais il doit aussi être libre !
-
- Messages : 2194
- Inscription : jeu. 27/janv./2005 19:07
Re: [Résolu] Comment lisser une image ?
Sinon il y a un autre genre de lissage automatique
simplement diviser la taille de l'image par deux!
Cela suppose bien sûr de l'avoir au double ou plus au départ
simplement diviser la taille de l'image par deux!
Cela suppose bien sûr de l'avoir au double ou plus au départ
Re: [Résolu] Comment lisser une image ?
Je pense que c'est surement parce les pixels sont plus petits ! N'est-ce pas ?
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Un homme doit être poli, mais il doit aussi être libre !
Re: [Résolu] Comment lisser une image ?
?Frenchy Pilou a écrit :Sinon il y a un autre genre de lissage automatique
simplement diviser la taille de l'image par deux!
Cela suppose bien sûr de l'avoir au double ou plus au départ
si j'ai une image de 1024x768 est que je la divise en deux , j'aurais la même image en 512x384 sans "lissage"
il faudrait à la rigueur la ré-agrandir , mais ce ne serais pas du lissage, mais de la perte pure de qualité.
-
- Messages : 2194
- Inscription : jeu. 27/janv./2005 19:07
Re: [Résolu] Comment lisser une image ?
Par exemple en illustration on travaille directement au double de valeur finale souhaitée
donc on est déjà net
A la division par deux les effets d'escalier (s'il y en avait encore ) disparaissent d'un facteur 2 de fait
C'est une méthode de boucher, j'en conviens

donc on est déjà net
A la division par deux les effets d'escalier (s'il y en avait encore ) disparaissent d'un facteur 2 de fait
C'est une méthode de boucher, j'en conviens

Re: [Résolu] Comment lisser une image ?
non Frenchy , pour le coup tu te plante là 
comme le Dis G-rom , le fait de reduire la resolution ne fait Que perdre des Pixels...rien de plus
en plus ton exempl n'est pas bonpour 2 raisons !
1- tu utilise surement un logiciel pour reduire la resolution de l'image , il est fort probable qu'il colle un algo de lissage sans que tu sois au courant
2- tu utilise le format Jpg , qui de toute façon applique un lissage !
j'ai travaillé pas mal de temps dans l'imprimerie, et le probleme du changement de résolution etait a l'epoque de l'arrrivé des Mac dans les salles de montage un vrais probleme
ça sortait des images pouraves a imprimer
le principe du lissage a tres bien ete expliqué par G-rom
en clair sur 3 pixel
MMM MMM MMM
il faut faire la moyenne ce qui va donner :
MMM MMM MMM
le pixel du centre sert de lissage

comme le Dis G-rom , le fait de reduire la resolution ne fait Que perdre des Pixels...rien de plus
en plus ton exempl n'est pas bonpour 2 raisons !
1- tu utilise surement un logiciel pour reduire la resolution de l'image , il est fort probable qu'il colle un algo de lissage sans que tu sois au courant
2- tu utilise le format Jpg , qui de toute façon applique un lissage !
j'ai travaillé pas mal de temps dans l'imprimerie, et le probleme du changement de résolution etait a l'epoque de l'arrrivé des Mac dans les salles de montage un vrais probleme
ça sortait des images pouraves a imprimer

le principe du lissage a tres bien ete expliqué par G-rom
en clair sur 3 pixel
MMM MMM MMM
il faut faire la moyenne ce qui va donner :
MMM MMM MMM
le pixel du centre sert de lissage

-
- Messages : 2194
- Inscription : jeu. 27/janv./2005 19:07
Re: [Résolu] Comment lisser une image ?
Je m'étais arreté à cela


voici déjà un lien sur L'anti aliasing
Re: [Résolu] Comment lisser une image ?
ton truc pilou serait alors d'utiliser un filtre de sobel pour la détection de contour , puis via le même principe "smoothé" ce contour.
pour la 3D cela se fait au niveau de la rasterization , généralement les api s'en charge très bien ( opengl / directx )
Comme t'es un fragment du moteur google , je te laisse cherché sur le forum, j'avais posté un truc la dessus
pour la 3D cela se fait au niveau de la rasterization , généralement les api s'en charge très bien ( opengl / directx )
Comme t'es un fragment du moteur google , je te laisse cherché sur le forum, j'avais posté un truc la dessus

-
- Messages : 2194
- Inscription : jeu. 27/janv./2005 19:07
Re: [Résolu] Comment lisser une image ?
Pour ma petite manipe de boucher, PureBasic utiliserait cela
ResizeImage()
Syntaxe
Resultat = ResizeImage(#Image, Largeur, Hauteur [, Mode])
Description
Redimensionne l'#Image conformément aux largeur et hauteur spécifiées (en pixels).
Le paramètre optionel 'Mode' peut prendre une des valeurs suivantes:
#PB_Image_Smooth: Redimensionne l'image avec interpolation (mode par défaut).
et si cela ne suffit pas on appliquerait alors vos descriptions pour "lisser" l'image
Mais le flou ou la profondeur de champ (pour faire réaliste) dans les images d'un point de vue artistique, il y a le pour et le contre
L'oeil ne voit pas du flou, ce brouillard vaporeux!
Un appareil photo oui ou tout du moins le fabrique
Et plus on avance on âge plus on se rend compte que cette netteté naturelle manque dans la vie de tout les jours!
Que l'oeil s'use...et que sans le concours de lunettes...
Par exemple pour ces 2 images l'oeil va préférer la "nette" mais bon...les goûts... les couleurs
By Bio-designer avec la Shadowbox de ZBrush


ResizeImage()
Syntaxe
Resultat = ResizeImage(#Image, Largeur, Hauteur [, Mode])
Description
Redimensionne l'#Image conformément aux largeur et hauteur spécifiées (en pixels).
Le paramètre optionel 'Mode' peut prendre une des valeurs suivantes:
#PB_Image_Smooth: Redimensionne l'image avec interpolation (mode par défaut).
et si cela ne suffit pas on appliquerait alors vos descriptions pour "lisser" l'image

Mais le flou ou la profondeur de champ (pour faire réaliste) dans les images d'un point de vue artistique, il y a le pour et le contre

L'oeil ne voit pas du flou, ce brouillard vaporeux!

Un appareil photo oui ou tout du moins le fabrique

Et plus on avance on âge plus on se rend compte que cette netteté naturelle manque dans la vie de tout les jours!
Que l'oeil s'use...et que sans le concours de lunettes...
Par exemple pour ces 2 images l'oeil va préférer la "nette" mais bon...les goûts... les couleurs

By Bio-designer avec la Shadowbox de ZBrush
Re: [Résolu] Comment lisser une image ?
Késki raconte ???Frenchy Pilou a écrit :Mais le flou ou la profondeur de champ (pour faire réaliste) dans les images d'un point de vue artistique, il y a le pour et le contre
L'oeil ne voit pas du flou, ce brouillard vaporeux!
Un appareil photo oui ou tout du moins le fabrique![]()
Et plus on avance on âge plus on se rend compte que cette netteté naturelle manque dans la vie de tout les jours!
Que l'oeil s'use...et que sans le concours de lunettes...
Par exemple pour ces 2 images l'oeil va préférer la "nette" mais bon...les goûts... les couleurs![]()
By Bio-designer avec la Shadowbox de ZBrush

Re: [Résolu] Comment lisser une image ?
Code : Tout sélectionner
UseJPEGImageDecoder()
UseJPEGImageEncoder()
LoadImage(0,"double.jpg")
w = ImageWidth(0)
h = ImageHeight(0)
ResizeImage(0,w/2,h/2,#PB_Image_Smooth)
ResizeImage(0,w,h,#PB_Image_Smooth)
SaveImage(0,"butcher.jpg",#PB_ImagePlugin_JPEG)

