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 :

Comment optimiser le calcul du gradient d'une image dans matlab


Sujet :

Traitement d'images

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 126
    Par défaut Comment optimiser le calcul du gradient d'une image dans matlab
    Bonjour,

    Je dois calculer le gradient de certaines images, de très hautes résolution (des dimensions de l'ordre de 4000*2000), et comme l'algorithme gradient me semble assez long, je me demandais s'il y a moyen d'accélérer cette étape, d'autant plus que les gradient doivent être calculées itérativement jusqu'à convergence de l'algorithme.

    Merci d'avance de vos réponses
    L.H.

  2. #2
    Membre émérite
    Avatar de ol9245
    Homme Profil pro
    Chercheur
    Inscrit en
    Avril 2007
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chercheur

    Informations forums :
    Inscription : Avril 2007
    Messages : 985
    Billets dans le blog
    1
    Par défaut
    j'ai pas une réponse directe à ta question. Juste une suggestion : fais converger ton algo sur une sous-partie de ton image (par exemple 4 petites vignettes échantillonées à mi-distance entre le centre de l'image et chacun des 4 coins. UNe fois que tu a les paramètres gradient que tu veux, tu balance l'algo sur toute l'image.

  3. #3
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Par défaut
    Bonjour,

    selon le gradient, il te faut traiter tous les pixels.
    Si tu as des zones homogènes, tu peux éviter certains calculs.
    Sinon, multi-processing.
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 126
    Par défaut
    Bonjour,

    je travaille sur des images astronomiques, donc très bruitées, et pas de régions homogènes dans les images..
    en ce qui concerne le multi-threading, c'est justement ma question, je en sais pas du tout comment voir ça, car si je segmente l'image en vignette, comment faire pour calculer le gradient au niveau des bords?

    et je me demandais également si l'opérateur gradient de Matlab est assez robuste, vue la nature des images?
    Merci
    LH

  5. #5
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Par défaut
    Bonjour,

    si tes images sont très bruitées, il il te faut tout d'abord les améliorer un peu, sinon tu auras un fort gradient autour du bruit

    Tu peux effectivement découper les images en vignettes... ou mieux, passer les coins de la vignette à ta méthode et un pointeur sur ton image afin qu'elle puisse gérer les bords ;-)
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 126
    Par défaut
    si tes images sont très bruitées, il il te faut tout d'abord les améliorer un peu, sinon tu auras un fort gradient autour du bruit
    Mais alors, comment faire pour lisser l'effet du bruit, sans étendre les objets, ou fausser les formes des étoiles et autres...
    Une opération de morphologie mathématique pourrait être tentée également avant, mais c'est toujours le même problème: perdre des objets, ou en en déformer certains
    Des conseils a ce propos? je suis bien prenante :-)
    Ps: Pour mon application particulière, je considère que le bruit blanc, additif, ca pourrait être exploité?
    Tu peux effectivement découper les images en vignettes... ou mieux, passer les coins de la vignette à ta méthode et un pointeur sur ton image afin qu'elle puisse gérer les bords ;-)
    je peux appeler la fonction gradient (voire conv2(), si c'est pas possible avec gradient())en spécifiant les limites de la portion a considérer?


    Merci
    L.H.

  7. #7
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Par défaut
    Bonjour,

    oui, tu appelles deux fois gradients dans deux thread différent, mais tu limites les champs d'applications. Si tu as plus de processeurs, libre à toi de l'appeler plus souvent ;-)

    Pour le bruit, le mieux est toujours de nous montrer au moins un exemple.
    Si c'est un bruit blanc ou poivre/sel, tu peux essayer un filtre médian. C'est moins sauvage que la morphologie mathématique.
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 126
    Par défaut
    bonjour,
    j'ai des captures d'écran, mais c'est peut être pas la meilleure résolution, ni la meilleure échelle, néanmoins, ça peut illustrer le type d'images:
    la partie supérieure de cette images, est les données propres, celle du bas représente l'inverse de la variance de l'erreur en chaque pixel ( carte de poids)
    ;
    ok, je vais chercher comment appeler la fonction gradient partiellement.
    Images attachées Images attachées   

  9. #9
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Par défaut
    Bonjour,

    mmm... j'ai quand même un doute pour l'image du bas
    Il est étonnant de retrouver toutes ces lignes sorties d'on ne sait où :s
    Sur ce genre d'image, une segmentation par Snakes (contours actifs) ou level set donne souvent de bon résultats.
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 126
    Par défaut
    bonsoir,
    désolée de répondre si tard à vos questions concernant les images.
    La deuxième partie de la première image est une carte de poids "Weight Map", autrement dit, l'inverse de la variance du bruit dans une images astro 5le bruit étant considéré souvent comme poissonien ou blanc).
    Ces cartes de poids sont calculées à base de la quantité de photons reçue et de fonctions PSF (Point Spread Function), donc, il existe des outils pour estimer le bruit de chaque image acquise.
    Les régions sombres ont été masquées car elles sont peu fiables, et le but est de justement reconstruire ce signal et d'interpoler tout ce qui à était masqué.

    Pour les méthodes contours actifs et snakes, je vais les tenter pour voir ce que ça donne effectivement, mais le but de mon application est d'utiliser l'information isophotes de l'image "données", ce qui est estimé par le gradient, d'où ma question, car la grandeur de cette quantité compte tout autant que sa position.
    J'ai pensé à une alternative:
    Je calcul les gradients une fois pour l'image originelle et le masque, et au fur et à mesure que j'avance dans le processus de restauration, je calcule le gradient dans la région restaurée uniquement5plus au moins un pixel de coté pour assurer la continuité de la fonction), voir copier ces valeurs des parties d'où je les ai interpolées.
    Merci de vos réponses, et je suis ouverte à toute nouvelle suggestion
    LH

  11. #11
    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 MPEG4 Voir le message
    le but de mon application est d'utiliser l'information isophotes de l'image "données", ce qui est estimé par le gradient, d'où ma question, car la grandeur de cette quantité compte tout autant que sa position.
    Une sorte d'inpainting pour des images astronomiques ?
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 126
    Par défaut
    Oui :-) de la restauration / interpolation d'images astro

  13. #13
    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 MPEG4 Voir le message
    Oui :-) de la restauration / interpolation d'images astro
    Vu le bruit sur les images, ça doit pas être évident de trouver un modèle a base de dérivées partielles.
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 126
    Par défaut
    RE-Bonjour

    oui, effectivement, l'application des techniques d'inpainting basées PDE ne serait pas très évident ici. d'où le choix des techniques dites " Exemplar-based image Inpainting"
    (du genre copier/coller)

    l'objectif de ce type d'algorithme est de poursuivre les contours tout en respectant la texture ambiante, d'où la nécessite d'un calcul efficace des gradients de l'images et du masque de remplissage des images.
    L'opérateur gradient n'est pas le plus robuste qui puisse exister pour bien estimer la dérivée des images, mais j'en connais pas d'autres.
    Donc, si d'autres suggestions, je suis ouverte a toute bonne proposition :-)

    Merci d'avance
    LH

  15. #15
    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 MPEG4 Voir le message
    oui, effectivement, l'application des techniques d'inpainting basées PDE ne serait pas très évident ici. d'où le choix des techniques dites " Exemplar-based image Inpainting" (du genre copier/coller)
    Oui, j'avais testé ce genre d'algo. Couplé avec une synthèse de texture ca donne de très bon résultats (du moins sur des photos traditionnelles).

    Effectivement ça nécessite d'avoir un gradient "propre" pour estimer correctement la direction de l'isophote. Pour une image très bruitée, il faut peut-être tenter une approche multi-echelle pour trouver une direction "générale" du gradient.
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  16. #16
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 126
    Par défaut
    il faut peut-être tenter une approche multi-échelle pour trouver une direction "générale" du gradient.
    Pourriez vous m'orienter vers des références où je pourrais apprendre a utiliser le concept de multi-échelle. j'ai eu tellement de cours, mais ça est toujours restée théorique.... et pas la moindre idée de comment le mettre en œuvre

  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 : 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 MPEG4 Voir le message
    Pourriez vous m'orienter vers des références où je pourrais apprendre a utiliser le concept de multi-échelle. j'ai eu tellement de cours, mais ça est toujours restée théorique.... et pas la moindre idée de comment le mettre en œuvre
    Le concept est ultra simple. Il suffit de créer une pyramide d'image, composée de l'image de départ à différentes tailles (=différentes échelles).

    (cf. le détecteur SIFT de David Lowe)

    Ensuite, lorsqu'on cherche a calculer une valeur (ici le gradient) on se positionne sur l'image de la pyramide qui donne le meilleur score pour le calcul. Évidemment cela implique de définir une fonction de "score" pour le calcul du gradient.
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  18. #18
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 126
    Par défaut
    et pour l'image a une échelle donnée, on fait un simple échantillonnage de pixels, ou une interpolation particulière.
    Pour le détecteur SIFT, je l'ai utilise pour de la reconstruction 3D, mais c'est vrai que ce n'est pas tout a fait la même chose ici.
    Ok, je vais chercher de ce cote la :-)

    PS:
    Désolée pour les accents manquant, j'ai un clavier qwert, et ce que mon correcteur d'orthographe ne détecte pas,je ne peux l'ajouter manuellement.

    Merci

  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 : 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 MPEG4 Voir le message
    et pour l'image a une échelle donnée, on fait un simple échantillonnage de pixels, ou une interpolation particulière.
    Ah, s'il y avait une réponse universelle... Mais non. Il faut voir en fonction des images. L'interpolation donne du flou, le ré-échantillonage donne des artéfacts. Bref, le monde n'est pas parfait.
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  20. #20
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 126
    Par défaut
    c'est de ça que j'avais peur!!
    En plus, avec le coup que ça rajoute a l'exécution... l'application doit être optimiser, alors, si je dois en plus trouver une pyramide d'images de tailles supérieure a 2000*4000... et que je devrais rajouter d'autres tests à l'algorithme, en plus des simples translations pour le copier/coller, ça va exploser le temps Cpu!!
    Merci pour votre aide
    LH

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 30/05/2007, 16h44
  2. Comment optimiser les temps de réponse d'une requête ?
    Par renaudjuif dans le forum Requêtes
    Réponses: 3
    Dernier message: 19/02/2007, 14h12
  3. Réponses: 3
    Dernier message: 19/12/2006, 17h43

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