IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Contribuez Discussion :

[Java] PatchMatch (Inpainting avec texture)


Sujet :

Contribuez

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Par défaut [Java] PatchMatch (Inpainting avec texture)
    Voici un exemple d'implémentation de l'algorithme PatchMatch (A Randomized Correspondence Algorithm for Structural Image Editing) appliqué à l'inpainting.

    Pour plus d'information sur l'algorithme PatchMatch, vous pouvez consulter le site de princeton



    Le code est pour l'instant assez rudimentaire et manque cruellement d'optimisation, tant au niveau vitesse (calculs redondants/inutiles dans NNF.java) qu'au niveau de la qualité du rendu (fonction de distance inter-patch, algo EM, ...)

    Le source java est disponible ici patchmatch.zip

    Et la version .jar ainsi que l'image d'exemple sont ici patchmatch-demo.zip

    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  2. #2
    Membre confirmé Avatar de highlight
    Homme Profil pro
    Développeur multimédia
    Inscrit en
    Novembre 2008
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur multimédia

    Informations forums :
    Inscription : Novembre 2008
    Messages : 139
    Par défaut
    Bonsoir pseudocode, je te remercie pour ton initiative, j ai essayé de comprendre ton algo, j'ai en fait une ptite question, sur la fonction getsample et setsample qu 'est ce qu elle fait au juste? ce quoi le role de ces fonction?

    J'ai essayé de supprimé une objet dans une image, et j ai passé cet image (masquée), ça ne marché pas au debut, donc j'ai change la methode pr la lecture des images et apres la compilation il lis juste l'image initial et pas le masque, donc il ne remplis pas la zone masquée, je comprends pas du tout

  3. #3
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Par défaut
    La méthode pour utiliser l'algo est :

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    BufferedImage output = new Inpaint().inpaint(input, mask, radius);

    Les paramètres sont les suivants:

    BufferedImage input : l'image d'entrée au format RGB. Si votre image n'est pas dans se format (niveau de gris, palette), il faut absolument la convertir en RGB. Si votre image possède des informations de transparence (canal alpha), elle seront ignorées.

    boolean[][] mask : tableau de booléen de la taille de l'image d'entrée. Si mask[x][y] = true, alors on considère que le pixel (x,y) est masqué et qu'il devra être estimé par l'algo d'inpainting

    int radius : rayon utilisé pour l'extraction des patchs. Il est conseillé de prendre la valeur "2", ce qui donne des patchs de 5x5.

    En sortie on récupère une BufferedImage au format RGB dans laquelle les pixels masqués ont été remplacés.

    Citation Envoyé par highlight Voir le message
    Bonsoir pseudocode, je te remercie pour ton initiative, j ai essayé de comprendre ton algo, j'ai en fait une ptite question, sur la fonction getsample et setsample qu 'est ce qu elle fait au juste? ce quoi le role de ces fonction?
    Comme on peut le voir dans le code, c'est juste une délégation des méthodes de WritableRaster.

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public int getSample(int x, int y, int band) {
    	return image.getRaster().getSample(x, y, band);
    }
     
    public void setSample(int x, int y, int band, int value) {
    	image.getRaster().setSample(x, y, band, value);
    }
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  4. #4
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Par défaut
    Une version spéciale pour faire de l'inpainting : patchmatch-inpaint.jar

    L'implémentation originale a été modifiée :
    - on calcule seulement le NNF entre la cible et la source (Coherence term)
    - on fait une estimation plus précise dans l'étape de maximisation, ce qui donne une texture moins floue.

    Exemple d'inpaint avec l'une des images de démo de GREYCstoration.

    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  5. #5
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Par défaut
    Juste pour le plaisir de jouer avec l'inpainting :
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  6. #6
    Membre émérite Avatar de b_reda31
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2007
    Messages
    899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2007
    Messages : 899
    Par défaut
    Meci pour cette contribution.

    Citation Envoyé par pseudocode Voir le message
    Juste pour le plaisir de jouer avec l'inpainting :
    Super les résultats, ça me fait rappeler le film "l'homme invisible"

Discussions similaires

  1. Problème compatibilité encodage Java et js avec IE
    Par sev22 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 19/04/2006, 09h57
  2. [Java Swing]JButton avec TableModel
    Par dim_italia dans le forum AWT/Swing
    Réponses: 5
    Dernier message: 20/02/2006, 21h04
  3. [Java Script] Lien avec infobulle...
    Par greg1386 dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 09/02/2006, 21h15
  4. [Java] Certification : site avec exemple de question ?
    Par bourbaki2003 dans le forum Certifications
    Réponses: 4
    Dernier message: 07/11/2005, 22h33
  5. BP avec Textures en OpenGL
    Par skyghis dans le forum OpenGL
    Réponses: 11
    Dernier message: 27/11/2003, 17h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo