+ Répondre à la discussion
Page 1 sur 2 12 DernièreDernière
Affichage des résultats 1 à 20 sur 23
  1. #1
    Rédacteur/Modérateur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    décembre 2006
    Messages
    9 960
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

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

    Informations forums :
    Inscription : décembre 2006
    Messages : 9 960
    Points : 15 759
    Points
    15 759

    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

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

    Informations forums :
    Inscription : novembre 2008
    Messages : 139
    Points : 71
    Points
    71

    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/Modérateur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    décembre 2006
    Messages
    9 960
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

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

    Informations forums :
    Inscription : décembre 2006
    Messages : 9 960
    Points : 15 759
    Points
    15 759

    Par défaut

    La méthode pour utiliser l'algo est :

    Code java :
    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 :
    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/Modérateur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    décembre 2006
    Messages
    9 960
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

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

    Informations forums :
    Inscription : décembre 2006
    Messages : 9 960
    Points : 15 759
    Points
    15 759

    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.


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

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

    Informations forums :
    Inscription : décembre 2006
    Messages : 9 960
    Points : 15 759
    Points
    15 759

    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 chevronné Avatar de b_reda31
    Homme Profil pro
    Étudiant
    Inscrit en
    avril 2007
    Messages
    594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : avril 2007
    Messages : 594
    Points : 624
    Points
    624

    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

    Inscrit en
    août 2007
    Messages
    4 334
    Détails du profil
    Informations forums :
    Inscription : août 2007
    Messages : 4 334
    Points : 6 244
    Points
    6 244

    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/Modérateur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    décembre 2006
    Messages
    9 960
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

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

    Informations forums :
    Inscription : décembre 2006
    Messages : 9 960
    Points : 15 759
    Points
    15 759

    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

    Inscrit en
    août 2007
    Messages
    4 334
    Détails du profil
    Informations forums :
    Inscription : août 2007
    Messages : 4 334
    Points : 6 244
    Points
    6 244

    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/Modérateur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    décembre 2006
    Messages
    9 960
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

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

    Informations forums :
    Inscription : décembre 2006
    Messages : 9 960
    Points : 15 759
    Points
    15 759

    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

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

    Informations forums :
    Inscription : novembre 2008
    Messages : 139
    Points : 71
    Points
    71

    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/Modérateur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    décembre 2006
    Messages
    9 960
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

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

    Informations forums :
    Inscription : décembre 2006
    Messages : 9 960
    Points : 15 759
    Points
    15 759

    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

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

    Informations forums :
    Inscription : novembre 2008
    Messages : 139
    Points : 71
    Points
    71

    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/Modérateur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    décembre 2006
    Messages
    9 960
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

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

    Informations forums :
    Inscription : décembre 2006
    Messages : 9 960
    Points : 15 759
    Points
    15 759

    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

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

    Informations forums :
    Inscription : novembre 2008
    Messages : 139
    Points : 71
    Points
    71

    Par défaut

    Je te remercie c'est tres interessant comme intro pour CUDA

  16. #16
    Membre à l'essai
    Inscrit en
    novembre 2010
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : novembre 2010
    Messages : 17
    Points : 22
    Points
    22

    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 :
    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/Modérateur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    décembre 2006
    Messages
    9 960
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

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

    Informations forums :
    Inscription : décembre 2006
    Messages : 9 960
    Points : 15 759
    Points
    15 759

    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
    Membre à l'essai
    Inscrit en
    novembre 2010
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : novembre 2010
    Messages : 17
    Points : 22
    Points
    22

    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/Modérateur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    décembre 2006
    Messages
    9 960
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

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

    Informations forums :
    Inscription : décembre 2006
    Messages : 9 960
    Points : 15 759
    Points
    15 759

    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
    Membre à l'essai
    Inscrit en
    novembre 2010
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : novembre 2010
    Messages : 17
    Points : 22
    Points
    22

    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().

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •