Précédent   Forum du club des développeurs et IT Pro > Autres langages > Algorithmes > Contribuez
Contribuez Proposez vos articles, cours, tutoriels, FAQ, sources, etc.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 05/07/2010, 18h34   #1
pseudocode
Rédacteur/Modérateur
 
Avatar de pseudocode
 
Homme Xavier Philippeau
Architecte système
Inscription : décembre 2006
Messages : 9 838
Détails du profil
Informations personnelles :
Nom : Homme Xavier Philippeau
Âge : 40
Localisation : France, Hérault (Languedoc Roussillon)

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

Informations forums :
Inscription : décembre 2006
Messages : 9 838
Points : 16 518
Points : 16 518
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.
pseudocode est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/07/2010, 00h09   #2
highlight
Membre du Club
 
Avatar de highlight
 
Homme cv fun
Développeur multimédia
Inscription : novembre 2008
Messages : 138
Détails du profil
Informations personnelles :
Nom : Homme cv fun

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

Informations forums :
Inscription : novembre 2008
Messages : 138
Points : 68
Points : 68
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
highlight est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/07/2010, 09h57   #3
pseudocode
Rédacteur/Modérateur
 
Avatar de pseudocode
 
Homme Xavier Philippeau
Architecte système
Inscription : décembre 2006
Messages : 9 838
Détails du profil
Informations personnelles :
Nom : Homme Xavier Philippeau
Âge : 40
Localisation : France, Hérault (Languedoc Roussillon)

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

Informations forums :
Inscription : décembre 2006
Messages : 9 838
Points : 16 518
Points : 16 518
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.
pseudocode est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/07/2010, 12h15   #4
pseudocode
Rédacteur/Modérateur
 
Avatar de pseudocode
 
Homme Xavier Philippeau
Architecte système
Inscription : décembre 2006
Messages : 9 838
Détails du profil
Informations personnelles :
Nom : Homme Xavier Philippeau
Âge : 40
Localisation : France, Hérault (Languedoc Roussillon)

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

Informations forums :
Inscription : décembre 2006
Messages : 9 838
Points : 16 518
Points : 16 518
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.

pseudocode est actuellement connecté   Envoyer un message privé Réponse avec citation 10
Vieux 28/10/2010, 22h45   #5
pseudocode
Rédacteur/Modérateur
 
Avatar de pseudocode
 
Homme Xavier Philippeau
Architecte système
Inscription : décembre 2006
Messages : 9 838
Détails du profil
Informations personnelles :
Nom : Homme Xavier Philippeau
Âge : 40
Localisation : France, Hérault (Languedoc Roussillon)

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

Informations forums :
Inscription : décembre 2006
Messages : 9 838
Points : 16 518
Points : 16 518
Juste pour le plaisir de jouer avec l'inpainting :
__________________
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.
pseudocode est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/10/2010, 10h42   #6
b_reda31
Membre expérimenté
 
Avatar de b_reda31
 
Homme Réda Bentata
Étudiant
Inscription : avril 2007
Messages : 544
Détails du profil
Informations personnelles :
Nom : Homme Réda Bentata
Âge : 29
Localisation : Algérie

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : avril 2007
Messages : 544
Points : 584
Points : 584
Envoyer un message via MSN à b_reda31
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!!»
b_reda31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/10/2010, 12h44   #7
magelan
Modérateur
 
Inscription : août 2007
Messages : 4 117
Détails du profil
Informations forums :
Inscription : août 2007
Messages : 4 117
Points : 5 473
Points : 5 473
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.
magelan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/10/2010, 13h58   #8
pseudocode
Rédacteur/Modérateur
 
Avatar de pseudocode
 
Homme Xavier Philippeau
Architecte système
Inscription : décembre 2006
Messages : 9 838
Détails du profil
Informations personnelles :
Nom : Homme Xavier Philippeau
Âge : 40
Localisation : France, Hérault (Languedoc Roussillon)

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

Informations forums :
Inscription : décembre 2006
Messages : 9 838
Points : 16 518
Points : 16 518
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.
pseudocode est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/10/2010, 14h23   #9
magelan
Modérateur
 
Inscription : août 2007
Messages : 4 117
Détails du profil
Informations forums :
Inscription : août 2007
Messages : 4 117
Points : 5 473
Points : 5 473
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.
magelan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/10/2010, 13h24   #10
pseudocode
Rédacteur/Modérateur
 
Avatar de pseudocode
 
Homme Xavier Philippeau
Architecte système
Inscription : décembre 2006
Messages : 9 838
Détails du profil
Informations personnelles :
Nom : Homme Xavier Philippeau
Âge : 40
Localisation : France, Hérault (Languedoc Roussillon)

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

Informations forums :
Inscription : décembre 2006
Messages : 9 838
Points : 16 518
Points : 16 518
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.
pseudocode est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2010, 11h46   #11
highlight
Membre du Club
 
Avatar de highlight
 
Homme cv fun
Développeur multimédia
Inscription : novembre 2008
Messages : 138
Détails du profil
Informations personnelles :
Nom : Homme cv fun

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

Informations forums :
Inscription : novembre 2008
Messages : 138
Points : 68
Points : 68
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?
highlight est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2010, 12h06   #12
pseudocode
Rédacteur/Modérateur
 
Avatar de pseudocode
 
Homme Xavier Philippeau
Architecte système
Inscription : décembre 2006
Messages : 9 838
Détails du profil
Informations personnelles :
Nom : Homme Xavier Philippeau
Âge : 40
Localisation : France, Hérault (Languedoc Roussillon)

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

Informations forums :
Inscription : décembre 2006
Messages : 9 838
Points : 16 518
Points : 16 518
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.
pseudocode est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2010, 14h25   #13
highlight
Membre du Club
 
Avatar de highlight
 
Homme cv fun
Développeur multimédia
Inscription : novembre 2008
Messages : 138
Détails du profil
Informations personnelles :
Nom : Homme cv fun

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

Informations forums :
Inscription : novembre 2008
Messages : 138
Points : 68
Points : 68
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
highlight est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2010, 16h49   #14
pseudocode
Rédacteur/Modérateur
 
Avatar de pseudocode
 
Homme Xavier Philippeau
Architecte système
Inscription : décembre 2006
Messages : 9 838
Détails du profil
Informations personnelles :
Nom : Homme Xavier Philippeau
Âge : 40
Localisation : France, Hérault (Languedoc Roussillon)

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

Informations forums :
Inscription : décembre 2006
Messages : 9 838
Points : 16 518
Points : 16 518
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.
pseudocode est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2010, 23h31   #15
highlight
Membre du Club
 
Avatar de highlight
 
Homme cv fun
Développeur multimédia
Inscription : novembre 2008
Messages : 138
Détails du profil
Informations personnelles :
Nom : Homme cv fun

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

Informations forums :
Inscription : novembre 2008
Messages : 138
Points : 68
Points : 68
Je te remercie c'est tres interessant comme intro pour CUDA
highlight est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/12/2010, 18h07   #16
Safety
Membre à l'essai
 
Inscription : novembre 2010
Messages : 17
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 17
Points : 20
Points : 20
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!!!!
Safety est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/12/2010, 19h25   #17
pseudocode
Rédacteur/Modérateur
 
Avatar de pseudocode
 
Homme Xavier Philippeau
Architecte système
Inscription : décembre 2006
Messages : 9 838
Détails du profil
Informations personnelles :
Nom : Homme Xavier Philippeau
Âge : 40
Localisation : France, Hérault (Languedoc Roussillon)

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

Informations forums :
Inscription : décembre 2006
Messages : 9 838
Points : 16 518
Points : 16 518
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.
pseudocode est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2010, 04h32   #18
Safety
Membre à l'essai
 
Inscription : novembre 2010
Messages : 17
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 17
Points : 20
Points : 20
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
Safety est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2010, 09h31   #19
pseudocode
Rédacteur/Modérateur
 
Avatar de pseudocode
 
Homme Xavier Philippeau
Architecte système
Inscription : décembre 2006
Messages : 9 838
Détails du profil
Informations personnelles :
Nom : Homme Xavier Philippeau
Âge : 40
Localisation : France, Hérault (Languedoc Roussillon)

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

Informations forums :
Inscription : décembre 2006
Messages : 9 838
Points : 16 518
Points : 16 518
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.
pseudocode est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2010, 16h35   #20
Safety
Membre à l'essai
 
Inscription : novembre 2010
Messages : 17
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 17
Points : 20
Points : 20
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().
Safety est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 10h39.


 
 
 
 
Partenaires

Hébergement Web