Page 1 sur 1

Flouter une image?

Publié : mar. 30/oct./2007 19:16
par Fortix
Bonsoirs à tous,

Y a t il un moyen de flouter une image qu'on vient de créer façon Photoshop "Flou Gaussien"?

Merci beaucoup :D

Publié : mar. 30/oct./2007 19:40
par Ar-S
Niveau programmation je ne sais pas trop mais niveau théorie,
je me dis qu'en copiant l'image deux fois et en les rendant transparantes à 70% (ou moins) puis en décollant une copie de X pixels à droite puis de une de X pixels à gauche, ça pourrait peut être le faire.

Publié : mar. 30/oct./2007 19:55
par case
pour flouter une image c'est simple :

pour chaque pixel de l'image tu fais la moyenne des pixel l'entourant

pour bien faire tu dois toujours prendre les valeur par raport a l'image d'origine pour eviter de flouter par raport a une valeur deja floutée tu dois aussi prendre en compte que les bords de l'image on moins de pixel autours

pour un flou gaussien tu definit le rayon dans laquelle seront pris les valeurs un exemple sur une un care de 3x3 valeurs x est le pixel traité y sont les pixel alentours

123 xyo 323 yxy 333 oyx 334 yyo 334 yyy 334 oyy 334 ooo 334 ooo 334 ooo 334
456 yyo 456 yyy 456 oyy 456 xyo 456 yxy 456 oyx 455 yyo 455 yyy 455 oyy 455
789 ooo 789 ooo 789 ooo 789 yyo 789 yyy 789 oyy 789 xyo 689 yxy 669 oyx 667

cela reduit la difference entre les couleurs et donc floute l'image

x=(x+somme des y)/(nombre de y+1)

attention tu dois toujours te referer a l'image originale pour chaque point sinon tu vas faire la moyenne a partir de points deja modifies et donc avoir un resultat faussé.

Publié : mar. 30/oct./2007 19:57
par Fortix
Salut @r-s

figure toi que j'ais déjà penser à cette solution, mais à mon niveau ça va être très dure car je pense qu'il faut super poser une copie de l'image sur une autre donc il faut recrée la même image dans un "FlipBuffer"(je l'ais mal écris :oops: ) et ensuite il faut l'a rendre transparente; c'est une technique que j'utilisais avec Photoshop pour ne pas modifier la luminositée des pixels mais très franchement se n'est pas très jolie comme flou; à ce propos j'ais fais un point de départ:

Code : Tout sélectionner

Enumeration 
    #Window_Principale    
EndEnumeration 


Enumeration    
    #GImage_Initial     
    #Button_Ouvrir   
EndEnumeration 


Enumeration    
    #Image_Artificiel ;-0 
    #Image_Initial    ;-1 
    #Image_Convert    ;-2 
EndEnumeration 


UseJPEGImageDecoder() 
UsePNGImageDecoder() 
UseTGAImageDecoder() 
UseTIFFImageDecoder() 

UseJPEGImageEncoder() 
UsePNGImageEncoder() 



If CreateImage(0, 300, 300 ) 
    StartDrawing(ImageOutput(0)) 
        Box(0, 0, 300, 300, $000000 ) 
    StopDrawing() 
EndIf 



Procedure Open_Window_Principale(image) 

    If OpenWindow(#Window_Principale, 0, 0, 304, 350, "MConV",  #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered) 
        SetWindowColor(0,RGB(255,128,0)) 
        
        If CreateGadgetList(WindowID(#Window_Principale))        
            ImageGadget(#GImage_Initial, 2, 40, 300, 300, ImageID(image))
            ButtonGadget(#Button_Ouvrir, 5, 5, 75, 25, "=>IMAGE")      
        EndIf 
        
    EndIf 
    
EndProcedure 


Open_Window_Principale(0) 

Repeat 
  
    Event = WaitWindowEvent() 
    WindowID = EventWindow() 
    GadgetID = EventGadget() 
    EventType = EventType() 
  
    If Event = #PB_Event_Gadget 
    
        Select GadgetID 
        
            Case #Button_Ouvrir 
            
            
                fichier_$ = OpenFileRequester( "Recherche image", "", "Fichier image|*.jpg;*.jpeg;*.png;*.bmp;*.tif;*.tga", 0) 
                
                If fichier_$ 
                    Taille_File = FileSize(fichier_$) 
                    
                    If LoadImage( 1, fichier_$) 
                    
                        L = ImageWidth(1)        
                        H = ImageHeight(1)  
                        
                        ResizeImage(1, 300, 300,  #PB_Image_Smooth) 
                        SetGadgetState(0, ImageID(1)) 
                    Else 
                        MessageRequester("erreur","Impossible d'ouvrir l'image!",0) 
                    EndIf 
                EndIf 
                
        EndSelect 
    
    EndIf 
  
Until Event = #PB_Event_CloseWindow 

CloseWindow(0) 

End 
pour ceux qui veulent se lancer dans l'aventure; mais je sais déjà que "l'usine à gaz" sera inévitable :lol: !!

Publié : mar. 30/oct./2007 20:05
par ATHOW
J'ai fait ça l'an dernier en cours de traitement d'image, mais j'aurais pas trop le temps de transposer le tout en PureBasic, désolé...
Tiens moi au courant si tu veux les sources (Java).

En Pure, l'usine à gaz est évitable grace aux sprite3Ds, mais ce n'est plus du tout le même algo ! L'idée : afficher plusieurs fois l'image, à degrés de transparence égaux, mais légérement dézoomée à chaque fois, et puis refaire un GrabSprite sur le tout...

Publié : mar. 30/oct./2007 21:50
par Anonyme
cherche le post "SuperSprite3D" , dedans y a une fct° qui fait cela.

Publié : mar. 30/oct./2007 22:42
par Fortix
Ha vous êtes super les gars

sympa la proposition de la source en java mais je croix que je ne ferais pas un très bon interpreteur entre PB et JAVA :lol: