|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 |
![]() ![]() Xavier PhilippeauArchitecte système Inscription : décembre 2006 Messages : 9 838 ![]() |
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 Et la version .jar ainsi que l'image d'exemple sont ici
__________________
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple. |
|
00
|
|
|
#2 |
|
Membre du Club
![]() cv fun Développeur multimédia Inscription : novembre 2008 Messages : 138 ![]() |
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 |
|
|
00
|
|
|
#3 | |||
![]() ![]() Xavier PhilippeauArchitecte système Inscription : décembre 2006 Messages : 9 838 ![]() |
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:
Code java :
__________________
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple. |
|||
|
00
|
|
|
#4 |
![]() ![]() Xavier PhilippeauArchitecte système Inscription : décembre 2006 Messages : 9 838 ![]() |
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.
|
|
10
|
|
|
#5 |
![]() ![]() Xavier PhilippeauArchitecte système Inscription : décembre 2006 Messages : 9 838 ![]() |
Juste pour le plaisir de jouer avec l'inpainting
__________________
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple. |
|
00
|
|
|
#6 |
|
Membre expérimenté
![]() |
Meci pour cette contribution.
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!!» |
|
|
00
|
|
|
#7 |
![]() ![]() Inscription : août 2007 Messages : 4 117 ![]() |
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 sourcesLa nature est un livre écrit en langage mathématique. Galilée. |
|
|
00
|
|
|
#8 |
![]() ![]() Xavier PhilippeauArchitecte système Inscription : décembre 2006 Messages : 9 838 ![]() |
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. |
|
00
|
|
|
#9 |
![]() ![]() Inscription : août 2007 Messages : 4 117 ![]() |
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 sourcesLa nature est un livre écrit en langage mathématique. Galilée. |
|
|
00
|
|
|
#10 | |
![]() ![]() Xavier PhilippeauArchitecte système Inscription : décembre 2006 Messages : 9 838 ![]() |
Citation:
__________________
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple. |
|
|
00
|
|
|
#11 |
|
Membre du Club
![]() cv fun Développeur multimédia Inscription : novembre 2008 Messages : 138 ![]() |
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?
|
|
|
00
|
|
|
#12 |
![]() ![]() Xavier PhilippeauArchitecte système Inscription : décembre 2006 Messages : 9 838 ![]() |
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. |
|
00
|
|
|
#13 |
|
Membre du Club
![]() cv fun Développeur multimédia Inscription : novembre 2008 Messages : 138 ![]() |
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
|
|
|
00
|
|
|
#14 | |
![]() ![]() Xavier PhilippeauArchitecte système Inscription : décembre 2006 Messages : 9 838 ![]() |
Citation:
__________________
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple. |
|
|
00
|
|
|
#15 |
|
Membre du Club
![]() cv fun Développeur multimédia Inscription : novembre 2008 Messages : 138 ![]() |
Je te remercie c'est tres interessant comme intro pour CUDA
|
|
|
00
|
|
|
#16 | ||
|
Membre à l'essai
![]() Inscription : novembre 2010 Messages : 17 ![]() |
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 :
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!!!! |
||
|
|
00
|
|
|
#17 | |
![]() ![]() Xavier PhilippeauArchitecte système Inscription : décembre 2006 Messages : 9 838 ![]() |
Citation:
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. |
|
|
00
|
|
|
#18 |
|
Membre à l'essai
![]() Inscription : novembre 2010 Messages : 17 ![]() |
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 |
|
|
00
|
|
|
#19 | |
![]() ![]() Xavier PhilippeauArchitecte système Inscription : décembre 2006 Messages : 9 838 ![]() |
Citation:
__________________
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple. |
|
|
00
|
|
|
#20 |
|
Membre à l'essai
![]() Inscription : novembre 2010 Messages : 17 ![]() |
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(). |
|
|
00
|
Copyright © 2000-2013 - www.developpez.com