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

  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 : 51
    Localisation : France, Hérault (Languedoc Roussillon)

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

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    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 régulier 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
    Points : 101
    Points
    101
    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 : 51
    Localisation : France, Hérault (Languedoc Roussillon)

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

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    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 : 51
    Localisation : France, Hérault (Languedoc Roussillon)

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

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    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 : 51
    Localisation : France, Hérault (Languedoc Roussillon)

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

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    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 éprouvé 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 : 40
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2007
    Messages : 899
    Points : 961
    Points
    961
    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"
    « Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste!!»

  7. #7
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    Effectivement, le résultat est bluffant!

    Très bonne contribution
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  8. #8
    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 : 51
    Localisation : France, Hérault (Languedoc Roussillon)

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

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    Oui enfin restons réaliste. Ca ne marche pas aussi bien sur toutes les images. Pour cela, il faudrait que j'implémente la gestion des contraintes telle qu'elle est décrite dans le document.
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  9. #9
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    Certe, mais je trouve ça quand même bluffant!

    J'utilise sous matlab un algo d'inpainting (pas moi qui l'ai codé), mais cette algo ne prends pas en compte les textures... Autant sur l'image du skieur, le résultat est presque identique (sauf l'ombre du skieur), autant sur les 2 autres on voit nettement la différence (l'algo de matlab n'est finalement qu'une interpolation donc le résultat est plus flou qu'autre chose).

    Je vais étudier le papier pour mieux comprendre comment ça fonctionne.
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  10. #10
    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 : 51
    Localisation : France, Hérault (Languedoc Roussillon)

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

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    Citation Envoyé par magelan Voir le message
    J'utilise sous matlab un algo d'inpainting (pas moi qui l'ai codé), mais cette algo ne prends pas en compte les textures... Autant sur l'image du skieur, le résultat est presque identique (sauf l'ombre du skieur), autant sur les 2 autres on voit nettement la différence (l'algo de matlab n'est finalement qu'une interpolation donc le résultat est plus flou qu'autre chose).
    Oui, tu as raison. Mon exemple ne mettait pas particulièrement en valeur la prise en compte des textures. Celui là est plus pertinent.

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

  11. #11
    Membre régulier 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
    Points : 101
    Points
    101
    Par défaut
    Tres bonne contribution pseudocode, le papier est en effet pas facile a comprendre, en plus les auteurs disent que l'lalgo est trop trop rapide,ils l'ont implémenté sur GPU?

  12. #12
    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 : 51
    Localisation : France, Hérault (Languedoc Roussillon)

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

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    Citation Envoyé par highlight Voir le message
    Tres bonne contribution pseudocode, le papier est en effet pas facile a comprendre, en plus les auteurs disent que l'lalgo est trop trop rapide,ils l'ont implémenté sur GPU?
    La grande force de cet algo c'est que toutes les étapes sont très largement parallélisables, et que chaque calcul est assez simple. Donc oui, ca doit bien s'adapter à de la programmation sur GPU.
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  13. #13
    Membre régulier 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
    Points : 101
    Points
    101
    Par défaut
    Oui d'aacord, je veux bien m'initier à la programmation GPU on s'amusant avec ce programme, avez vous un livre a me recommander pour cela?ça fait logtement que je cherche mais il n'y a pas bcp de reference sur le langage CUDA sur le web... Bonne initiative Pseudocode

  14. #14
    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 : 51
    Localisation : France, Hérault (Languedoc Roussillon)

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

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    Citation Envoyé par highlight Voir le message
    Oui d'aacord, je veux bien m'initier à la programmation GPU on s'amusant avec ce programme, avez vous un livre a me recommander pour cela?ça fait logtement que je cherche mais il n'y a pas bcp de reference sur le langage CUDA sur le web... Bonne initiative Pseudocode
    Peut être peux-tu commencer par la rubrique Cuda sur DVP.
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  15. #15
    Membre régulier 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
    Points : 101
    Points
    101
    Par défaut
    Je te remercie c'est tres interessant comme intro pour CUDA

  16. #16
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 17
    Points : 26
    Points
    26
    Par défaut
    Bonjour,

    Tout d'abord je voudrai remercier Pseudocode pour cette initiative bien poussée, c'est très impressionnant.

    Dans le cadre d'un projet étudiant, je voudrais porter l'inpainting sur un telephone android, or il n'y a pas d'équivalent bufferedImage dans le framework android... j'ai essayé avec des bitmaps mais je coince au niveau de ces fonctions qui sont propres au bufferedImage :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    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);
    }

    Je me suis aussi renseigné sur la portabilité de java.awt.image sur android, mais ce n'est pas abouti...
    http://code.google.com/p/awt-android-compat/

    Donc voila je voudrais savoir comment je peux faire, si quelqu'un aurait des piste...

    Je vous remercie d'avance!!!!

  17. #17
    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 : 51
    Localisation : France, Hérault (Languedoc Roussillon)

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

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    Citation Envoyé par Safety Voir le message
    Donc voila je voudrais savoir comment je peux faire, si quelqu'un aurait des piste...

    Je vous remercie d'avance!!!!
    Peut-être devrais-tu poster ta question dans le forum android.


    NB: je m'interroge sur l'utilité de faire de l'inpainting sur un telephone. Surtout question puissance de calcul.
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  18. #18
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 17
    Points : 26
    Points
    26
    Par défaut
    Oui je l'ai fait également, mais bon comme c'est ici la source je me suis dis pourquoi pas demander

    Bon j'ai voulu le porter sur le téléphone android parce que j'ai vu une vidéo incroyable sur la réalité diminué, sa n'existe pas encore sur mobile :

    http://www.numerama.com/magazine/170...emps-reel.html

    Bon c'est une équipe de chercheur donc je peux pas trop rivaliser lol
    Mais bon faire du Inpainting directement sur le portable na pas vraiment d'intérêt tout de suite, c'est vraiment juste pour mon projet, le plaisir de l'implémenter et d'impressionner aussi

  19. #19
    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 : 51
    Localisation : France, Hérault (Languedoc Roussillon)

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

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    Citation Envoyé par Safety Voir le message
    Oui je l'ai fait également, mais bon comme c'est ici la source je me suis dis pourquoi pas demander

    Bon j'ai voulu le porter sur le téléphone android parce que j'ai vu une vidéo incroyable sur la réalité diminué, sa n'existe pas encore sur mobile :

    http://www.numerama.com/magazine/170...emps-reel.html

    Bon c'est une équipe de chercheur donc je peux pas trop rivaliser lol
    Mais bon faire du Inpainting directement sur le portable na pas vraiment d'intérêt tout de suite, c'est vraiment juste pour mon projet, le plaisir de l'implémenter et d'impressionner aussi
    Pour faire ça en 40ms comme sur la vidéo, il va falloir sacrément optimiser mon code.
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  20. #20
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 17
    Points : 26
    Points
    26
    Par défaut
    Ah sa envoie du rêve...
    Mais ce que tu as fait pour une photo est déjà énorme
    Pas de réponse du coté du forum android...

    Alala... J'aurais une petite question, dans ton algorithme tu fais tes calculs sur 3 bandse sachant qu'on peut pas le faire avec une bitmap sous android, on pourrait essayer de le faire que sur une seul bande?? Comme sa plus besoin de getSample().

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, 10h57
  2. [Java Swing]JButton avec TableModel
    Par dim_italia dans le forum AWT/Swing
    Réponses: 5
    Dernier message: 20/02/2006, 22h04
  3. [Java Script] Lien avec infobulle...
    Par greg1386 dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 09/02/2006, 22h15
  4. [Java] Certification : site avec exemple de question ?
    Par bourbaki2003 dans le forum Certifications
    Réponses: 4
    Dernier message: 07/11/2005, 23h33
  5. BP avec Textures en OpenGL
    Par skyghis dans le forum OpenGL
    Réponses: 11
    Dernier message: 27/11/2003, 18h15

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