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

Traitement d'images Discussion :

Algorithme d'inpainting par copie de patchs


Sujet :

Traitement d'images

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2011
    Messages : 81
    Par défaut
    (note du modérateur : cette discussion fait référence à la contribution "Inpainting par Continuation des Isophotes")

    Bonjour,

    Pour un cours d'imagerie on me demande de programmer un peu la même chose, un algo qui ressemble beaucoup à celui en pelure d'oignon (cf code que vous avez fournie) mais qui ajoute une valeur de confiance pour le parcourt, de manière à propager les contours en premier.
    Enfin je crois que ca ressemble à l'algo pelure d'oignon, ou bien celui avec la méthode en patch...mais l'idée reste la même.

    Du coup je me demande si vous avez déjà réussi à mettre au point un tel programme : voici l'article qu'on me donne comme référence : http://research.microsoft.com/pubs/6...si_tip2004.pdf

    Vous en pensez quoi ???? Selon vous je fais bien de partir de votre code en pelure d'oignon ???

  2. #2
    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
    Citation Envoyé par mitmal Voir le message
    C'est un sujet très intéressant en effet !!
    Pour un cours d'imagerie on me demande de programmer un peu la même chose, un algo qui ressemble beaucoup à celui en pelure d'oignon (cf code que vous avez fournie) mais qui ajoute une valeur de confiance pour le parcourt, de manière à propager les contours en premier.
    Dans ce cas il ne s'agit pas de "onion peel" mais de "belief propagation".

    Du coup je me demande si vous avez déjà réussi à mettre au point un tel programme : voici l'article qu'on me donne comme référence : http://research.microsoft.com/pubs/6...si_tip2004.pdf

    Vous en pensez quoi ???? Selon vous je fais bien de partir de votre code en pelure d'oignon ???
    Et bien... heu... Etant donné que ce n'est pas le même algorithme, il va falloir recoder une bonne partie de l'algorithme. Je pense qu'il serait plus simple de repartir proprement d'une page blanche.
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2011
    Messages : 81
    Par défaut
    Euh...oui je crois que tu as raison mais je suis un peu perdu et je ne vois pas comment commencer...
    En regardant ton code je comprends bien comment tu fais, quoi que je n'arrive pas à le modifier pour obtenir une image retouchée en couleur...

    Enfin, du coup j'ai compris l'article comme ca : Je dois retoucher l'image de la même façon qu'en onion peel mais en changeant l'ordre de remplissage. Au lieu de faire du pixel le plus en frontière vers celui le plus en profondeur, je dois ajouter un terme pour définir une priorité.

    Après il y a dans l'article le principe de patch, ces gros carrés qui sont dupliqué dans la zone à corriger. Je comprends bien leur rôle ??
    Avec ce genre de procedure je ne risque pas de produire des contours nettement visibles (de la taille des patchs) ???

    Merci de ton aide

  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
    Citation Envoyé par mitmal Voir le message
    Euh...oui je crois que tu as raison mais je suis un peu perdu et je ne vois pas comment commencer...
    En regardant ton code je comprends bien comment tu fais, quoi que je n'arrive pas à le modifier pour obtenir une image retouchée en couleur...
    Le code que j'ai posté fait de la diffusion sur une seule composante (le luminosité = niveau de gris). On pourrait le modifier pour diffuser 3 composantes couleurs, mais de toutes facons ton article n'utilise pas la méthode de diffusion.

    Enfin, du coup j'ai compris l'article comme ca : Je dois retoucher l'image de la même façon qu'en onion peel mais en changeant l'ordre de remplissage. Au lieu de faire du pixel le plus en frontière vers celui le plus en profondeur, je dois ajouter un terme pour définir une priorité.
    C'est tout à fait cela. Il faut maintenir une liste triée des pixels à remplacer. Le tri se fait sur une valeur de priorité, dont le calcul est expliqué dans la formule (1), en page 4.

    Après il y a dans l'article le principe de patch, ces gros carrés qui sont dupliqué dans la zone à corriger. Je comprends bien leur rôle ??
    Avec ce genre de procedure je ne risque pas de produire des contours nettement visibles (de la taille des patchs) ???
    Le calcul de la valeur du pixel "p" à remplacer n'utilise pas la diffusion. Ce pixel a remplacer est vu comme le centre d'une zone carrée (= patch "PhiP"). Il faut alors chercher dans le reste de l'image un autre patch (= patch "PhiQ") qui est le plus semblable au patch PhiP. Une fois ce patch trouvé, la valeur du pixel "p" (centre du patch PhiP) sera celle du pixel "q" (centre du patch PhiQ).



    NB : j'ai lu rapidement l'article, donc il est possible que le calcul de la valeur de "p" ne soit pas un simple remplacement. Les méthodes que je connais qui utilisent des patchs utilisent généralement un système de "vote", mais l'article ne semble pas en parler.
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2011
    Messages : 81
    Par défaut
    Ah d'accord d'accord je comprends mieux merci.
    Donc en gros j'ai deux problèmes maintenant, comment calculer cette priorité ???
    Comme tu l'as noté la formule est donnée : P = C x D
    Mais je vois pas bien ce que sont C et D.
    A ce que j'en ai comprends, C serait le terme de confiance et D(p) celui d’attache aux données... Mais bon ce n'est pas bien net dans mon esprit.

    Par exemple, je comprends qu'au début toute l'image, tous les pixels de l'image, ont une confiance à 1, sauf le masque qui est à 0 (logique) mais donc après coup, si je te suis bien, le pixel central du patch prend comme nouvelle valeur de confiance (Somme de toutes les confiance du patch trouvé) divisé par (taille du patch)...
    Du coup si mon patch trouvé est dans l'image source...La confiance n'est-elle pas de 1 à chaque fois ???

    Ce qui m'amène à me demande comment on trouve le fameux patch ??? Car j'imagine qu'en entrant en profondeur dans le masque la confiance diminue...Puisque les patch trouvés sont de plus en plus dans les pixels déjà retouchés....Mais cela se fera uniquement si mon patch trouvé a des pixel en de confiance moindre... Ma question est donc, comment trouver ce patch ????? On regarde quoi au juste la moyenne des pixels du patch d'origine / la moyenne de ceux du patch trouvé ??? On prend en considération les pixels du masque (confiance nulle) dans le patch source ???

    Et puis, ce D, alors lui par contre je vois pas ce que c'est... J'ai supposé qu'il etait l'attache aux données mais en traduisant bien je lis :
    np est un vecteur unitaire orthogonal à la frontière δΩ au point p et ┸ désigne l'opérateur orthogonal...
    En gros je suis encore plus perdu là

  6. #6
    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
    Citation Envoyé par mitmal Voir le message
    Ah d'accord d'accord je comprends mieux merci.
    Donc en gros j'ai deux problèmes maintenant, comment calculer cette priorité ???
    Comme tu l'as noté la formule est donnée : P = C x D
    Mais je vois pas bien ce que sont C et D.
    A ce que j'en ai comprends, C serait le terme de confiance et D(p) celui d’attache aux données... Mais bon ce n'est pas bien net dans mon esprit.

    Par exemple, je comprends qu'au début toute l'image, tous les pixels de l'image, ont une confiance à 1, sauf le masque qui est à 0 (logique) mais donc après coup, si je te suis bien, le pixel central du patch prend comme nouvelle valeur de confiance (Somme de toutes les confiance du patch trouvé) divisé par (taille du patch)...
    Du coup si mon patch trouvé est dans l'image source...La confiance n'est-elle pas de 1 à chaque fois ???
    Oui.
    Si le patch PhiQ est dans l'image source, sa confiance est maximale = 1.
    Si le patch PhiQ est partiellement dans le masque, la confiance est entre 0 et 1
    Si le patch PhiQ est complètement dans le masque, sa confiance est 0. (peu de chance qu'il soit choisi )

    Une fois qu'on a recopié tous les pixels manquants depuis PhiQ vers PhiP, alors on recalcule la confiance de ces "nouveaux" pixels de PhiP ("Updating confidence values", page 5). L'article dit que leur nouvelle confiance est égale à celle du patch PhiP.

    Car j'imagine qu'en entrant en profondeur dans le masque la confiance diminue...Puisque les patch trouvés sont de plus en plus dans les pixels déjà retouchés....Mais cela se fera uniquement si mon patch trouvé a des pixel en de confiance moindre...
    Oui la confiance diminue. Au départ, un pixel sur la frontière à une confiance qui est une moyenne entre des pixels masqués "C=0" et les pixels connus "C=1". Donc une confiance C(p) entre 0 et 1.

    Après remplissage du patch, tous les "nouveaux" pixels auront une nouvelle valeurs de confiance égale à C(p).

    Au coup suivant, un pixel sur la frontière à une confiance qui est une moyenne entre des pixels masqués "C=0" et des pixels connus ou copiés "C entre 0 et 1".

    Donc ca diminue.

    Ma question est donc, comment trouver ce patch ????? On regarde quoi au juste la moyenne des pixels du patch d'origine / la moyenne de ceux du patch trouvé ??? On prend en considération les pixels du masque (confiance nulle) dans le patch source ???
    Dans l'article on explique : the distance d(Ψa,Ψb) between two generic patches Ψa and Ψb is simply defined as the sum of squared differences (SSD) of the already filled pixels in the two patches

    La distance entre les patchs est la somme des écarts (au carré) entre un pixel de Ψa et le pixel correspondant dans Ψb.

    Dans ce cette étape, on ne prend en compte que les pixels connus de Ψa, et que des patchs Ψb qui sont entièrement remplis. (cf remarque ² en bas de la page 5)

    Et puis, ce D, alors lui par contre je vois pas ce que c'est... J'ai supposé qu'il etait l'attache aux données mais en traduisant bien je lis :
    En gros je suis encore plus perdu là
    Ce terme permet de "booster" la priorité d'un patchs en fonction des données qu'il contient. L'idée c'est de booster la priorité des patchs qui sont dans le prolongement d'une ligne de contour existante.

    Le gradient "∇I" est toujours perpendiculaire au contour. L'orthogonal du gradien "∇I⊥" est donc toujours aligné avec le contour.

    Le produit scalaire (Np.∇I⊥) favorise donc le patch qui est dans le prolongement du contour.
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

Discussions similaires

  1. Faire une sauvegarde par copie de fichier, est-ce fiable ?
    Par guidav dans le forum Administration
    Réponses: 5
    Dernier message: 04/09/2006, 10h17
  2. Passage par copie vs passage par référence
    Par bolhrak dans le forum C++
    Réponses: 11
    Dernier message: 20/08/2006, 23h37
  3. Réponses: 3
    Dernier message: 27/04/2006, 08h03
  4. Constructeur par copie et std::list
    Par Captain_JS dans le forum SL & STL
    Réponses: 5
    Dernier message: 13/12/2005, 19h15
  5. [deb.]Constructeur par copie
    Par Marc_3 dans le forum Débuter
    Réponses: 4
    Dernier message: 19/11/2005, 13h33

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