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 :

Recherche d'une zone uniforme dans une image


Sujet :

Traitement d'images

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    142
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 142
    Points : 93
    Points
    93
    Par défaut Recherche d'une zone uniforme dans une image
    Bonjour tout le monde.

    Je cherche à détecter une zone uniforme dans une image qui n'en a pas vraiment. Je m'explique.
    J'ai une dérive d'éclairage sur mon image et j'aurais besoin de détecter une colonne uniforme dans mon image pour calculer ma derive d'éclairage puis la corriger.
    Le problème, c'est que, tant que je n'ai pas corrigé ma dérive, il n'y a pas de vrai uniformité. Je vois bien en regardant mon image qu'il y a des zones uniformes mais avec des luminances différentes du à la derive d'éclairage.
    Quelqu'un aurait il une idée pour détecter ma colonne la plus plus uniforme de l'image????
    J'ai essayé avec la teinte mais je trouve des zones uniformes la ou il n'y en a pas car la teinte reste sensiblement la meme pour passer du bleu au blanc par exemple.
    J'espère que j'ai été claire dans mon explication.....

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    si tu sais que ton effet est en colonne :

    tu explores l'image colone par colonne

    tu calcules la moyenne et la variance par colonne

    la colonne qui a la plus petite variance est la plus uniforme....
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    142
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 142
    Points : 93
    Points
    93
    Par défaut
    Bonjour,

    C'est comme ca que j'ai essayé de faire mais ca ne fonctionne pas bien car si toutes mes valeurs sont proches de la moyenne et qu'une est trop éloignée, ma variance reste faible et la valeur éloignée fausse tout.
    Je vais essayer de rajouter un traitement pour ne pas prendre en compte les valeurs éloignées mais ca me rajoute du temps de traitement.
    C'est pour ca que je me demandais si il n'existait pas une autre méthode.

  4. #4
    Membre actif Avatar de ronan99999
    Inscrit en
    Juillet 2003
    Messages
    279
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Juillet 2003
    Messages : 279
    Points : 299
    Points
    299
    Par défaut
    Je suis tombé la dessus.

    ftp://ftp.irisa.fr/techreports/theses/2002/pinel.pdf

    Je pense que tu peux au moins t'en servir pour la manipulation d'espace de couleur.
    Si tu ne te plantes pas, comment veux tu pousser?

  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 : 45
    Localisation : Etats-Unis

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

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

    je pense que la solution tourne également autour de la variance.

    Sinon tu peux t'inspirer des travaux d'Arnaud Letrotter (laboratoire LSIS) qui segment en plage de couleur dominante.
    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
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par mm2405
    Bonjour,

    C'est comme ca que j'ai essayé de faire mais ca ne fonctionne pas bien car si toutes mes valeurs sont proches de la moyenne et qu'une est trop éloignée, ma variance reste faible et la valeur éloignée fausse tout.
    Je vais essayer de rajouter un traitement pour ne pas prendre en compte les valeurs éloignées mais ca me rajoute du temps de traitement.
    C'est pour ca que je me demandais si il n'existait pas une autre méthode.
    Ben par rapport à l'algo donné il y a 2 passes de plus à faire par colonne :

    une fois calculée la variance originale :

    une passe pour recalculer la moyenne en évitant tout les points s'écartant de >= 2 sigma.
    puis une nouvelle passe pour recalculer la nouvelle variance..

    Cela fait effectivement 4 passages par colonne.

    Mais si on en sait pas plus sur le problème physique et/ou l'effet réel que tu veux éliminer, on peut guère en dire plus..
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

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

    Informations professionnelles :
    Activité : Chercheur

    Informations forums :
    Inscription : Avril 2007
    Messages : 985
    Points : 1 158
    Points
    1 158
    Billets dans le blog
    1
    Par défaut
    Bjr, si tu sais que tes données sont en colonne, alors tu peux extraire ta colonne et modéliser ta dérive. En Matlab, c'est une ligne de code (la division à gauche). Dans d'autres langages, c'est plus lourd (moindres carrés, LU décomposition etc.).

    L'avantage est que tu as tout en même temps : la colonne (la suite successive de n colonnes?) des moindes résidus te permet de localiser ton résultat, et les coefficients du modèle te donnent ta dérive pour corriger ton image.

    OL
    "La vraie grandeur se mesure par la liberté que vous donnez aux autres, et non par votre capacité à les contraindre de faire ce que vous voulez." Larry Wall, concepteur de Perl.

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

    Informations professionnelles :
    Activité : Chercheur

    Informations forums :
    Inscription : Avril 2007
    Messages : 985
    Points : 1 158
    Points
    1 158
    Billets dans le blog
    1
    Par défaut
    reBjr,

    par rapport à mon post pécédent, si en extrayant la dérive (ordre 2 doit suffire) tu as encore des confusions avec le reste de ton image, alors tu peux étudier la structure de tes résidus. Si ton modèle est bon, tes résidus doivent être +/- normaux. Un test quick n dirty de normalité est le rapport A/B ou A = écart type des quartiles 2 et 3 (la moitié de l'échantillon centré sur la médiane) et B = l'écart type des quartiles 1 et 4 (le reste de l'échantillon).

    Plus A/B est élevé, plus tu te rapproches d'un modèle normal.
    En théorie pour une loi normale, ce rapport est envirion 1/3.

    algo proposé :
    pour chaque colonne (ou groupe de colonnes contigues)
    déterminer B = f(x) avec B brillance observée, x = position
    modéliser B = a*x^2+b*x+c + epsilon
    calculer V = variance de epsilon
    trier epsilon
    séparer en deux sous-ensembles de même taille :
    M = la moitié médiane et E = les eux quarts extrêmes
    calculer K = var(M)/var(E)
    les bonnes colonnes sont celles qui ont V "petit" et K "grand"

    NB. Tu peux poster ton image pour qu'on se fasse une idée de ton problème.

    OL
    "La vraie grandeur se mesure par la liberté que vous donnez aux autres, et non par votre capacité à les contraindre de faire ce que vous voulez." Larry Wall, concepteur de Perl.

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    142
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 142
    Points : 93
    Points
    93
    Par défaut
    Bonjour,
    Mon problème n'est pas de corriger ma dérive. Je calcule la regression lineaire d'ordre 6 correspondant à mon image car un ordre inferieur ne donne pas des resultats tres convaincant. Le probleme, c'est qu'il me faut des données d'entrées pour faire mon calcul et je dois donc trouver une zone uniforme pour faire mes mesures pour ensuite faire mon calcul.
    C'est cette zone uniforme que j'ai du mal à trouver.
    Pour l'instant, je cherche la colonne ayant la variance la plus faible et en eliminant les colonnes ayant des valeurs trop eloignées de la moyenne. Ca marche pas trop mal mais c'est loin d etre parfait et c'est surtout assez lourd en temps de traitement pour trouver ma zone uniforme.
    Si une methode me permettait d etre au moins autant fiable en allant plus vite en temps de calcul, ca m'interesserait beaucoup.....

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    142
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 142
    Points : 93
    Points
    93
    Par défaut
    Oups, j'ai du effacé la derniere ligne de mon post precedent. Je la rajoute :
    Je vais essayé ta méthode mais j'ai peur que ce ne soit encore plus long. Par contre, c'est surement plus fiable. Merci.

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

    Informations professionnelles :
    Activité : Chercheur

    Informations forums :
    Inscription : Avril 2007
    Messages : 985
    Points : 1 158
    Points
    1 158
    Billets dans le blog
    1
    Par défaut
    autre idée qui doit aller beaucoup beaucoup plus vite.
    Tu FFT ton image par colonnes.
    Tu extrait le spectre de fréquences
    les colonnes homogènes doivent êtres très très différentes ds dolonnes de l'image en particulier :
    * toutes les amplitudes doivent être très basses, sauf éventuellement dans ls fréquences élevées (bruit) et basses (dérive de ton gris)
    * tu ne dois rien avoir aux fréquences moyennes disons de 10 pixels à la moitié de ton image

    alors que là ou tu as des motifs, les fréquences moyennes doivent avoir du monde.

    donc l'algo serait F:

    1/ FT de l'image le long des colonnes (pense à centrer ton image sur une fenêtre puissance de 2 et à remplir les zones inocupées de noir (0)
    2/ calcul des puissances
    3/ virer les fréquences hautes et basses
    4/ les colonnes dans lesquelles il y a le moins de puissance totale sont celles que tu cherche.

    J'essayer un patron de code au vol en matlab.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    % mettre l'image au centre d'une matrice de 2^^n lignes
    F = fft(image) ; % If X is a matrix, fft returns the Fourier transform of each column of the matrix.
    powr = 2 * F .* conj(F) ./ sample_length ./ sample_length ;
    powr = 2 * powr(1:sample_length/2+1,:) ; % keep half plus one
    a = round(size(pow,1)/4) ; % 1/4 de la taille des lignes
    powertot = sum(powr(a:3*a,:)) ;
    [unused idx] = sort(powertot) ;
    % les premier éléments de idx doivent probablement être les colonnes que tu cherche. Sinon, utiliser le fait que les colonnes que t cherche sont groupées pour rendre la détection plus robuste.
    OL
    "La vraie grandeur se mesure par la liberté que vous donnez aux autres, et non par votre capacité à les contraindre de faire ce que vous voulez." Larry Wall, concepteur de Perl.

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

    Informations professionnelles :
    Activité : Chercheur

    Informations forums :
    Inscription : Avril 2007
    Messages : 985
    Points : 1 158
    Points
    1 158
    Billets dans le blog
    1
    Par défaut
    dernière idée en date :
    tu recherche les contours de ton image et tu prend les colonnes qui ont le moins de contour. En Matlab il faut 3 lignes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    [C, t] = edge(M, 'Sobel') ; % recherche les contours. récupère le seuil choisi
    sC = sum(edge(M, 'Sobel', t/2)) ;% deuxieme passe avec un seuil plus bas 
    [unused, idx] = sort (sC) ; % trie. Les colonnes les plus homogènes en tete.
    disp(idx(1:10)) ; % c'est les bonnes colonnes que j'ai trouvé, là, en 3 lignes de matlab ?
    Variante : au lieu de discriminer sur le nombe total de contour, tu peux discriminer sur la plus longue zone sans contour.

    Si t'as pas Matlab, au lieu de travailler sur la variance, travaille sur le carré de de la différence première. les zones avec contours vont avoir des fortes différences premières qui vont bien se discriminer quand tu les passera au carré.

    OL
    "La vraie grandeur se mesure par la liberté que vous donnez aux autres, et non par votre capacité à les contraindre de faire ce que vous voulez." Larry Wall, concepteur de Perl.

  13. #13
    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 : 45
    Localisation : Etats-Unis

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

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

    on vient de me parler de la méthode utilisant les tenseurs et de zones de cohérences pour détecters des zones caractéristiques.

    Pour cela :
    - tu calcules le gradient de ton image.
    - pour chaque pixel, tu calcule le tenseur à partir du gradient, ce qui te donne une carte de cohérence.
    - Si ton pixel a une cohérence plus forte que que la moyenne ds cohérence d'un zone dans laquelle ils se trouve, alors il est caractéristiques. Pour être exact, on prend : Si coherence(x,y) > Moyenne(Zone entourant (x,y)) + 3* EcartType(Zone entourant (x,y)) alors (x,y) caractéristique.
    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.

  14. #14
    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 : 51
    Localisation : France, Hérault (Languedoc Roussillon)

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

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    Citation Envoyé par mm2405
    J'ai une dérive d'éclairage sur mon image et j'aurais besoin de détecter une colonne uniforme dans mon image pour calculer ma derive d'éclairage puis la corriger.
    Le problème, c'est que, tant que je n'ai pas corrigé ma dérive, il n'y a pas de vrai uniformité.
    rechercher des zones avec un Gradient ~ constant (Laplacien nul) ?
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  15. #15
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    142
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 142
    Points : 93
    Points
    93
    Par défaut
    Merci, je n'avais pas du tout pensé au gradient!!!!!! Suis je bête?!?!!!

    Je vais essayer. Merci encore....

Discussions similaires

  1. [XL-2003] Extraction d'une zone ovale d'une photo insérée dans une feuille
    Par bolide7 dans le forum Excel
    Réponses: 4
    Dernier message: 21/04/2011, 18h45
  2. Réponses: 3
    Dernier message: 07/04/2011, 14h38
  3. Réponses: 6
    Dernier message: 13/11/2009, 16h06
  4. Intégrer une zone cachée dans une zone de texte
    Par beegees dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 20/10/2008, 16h20
  5. Réponses: 3
    Dernier message: 29/06/2007, 15h29

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