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 :

petit bug sur convolution


Sujet :

Traitement d'images

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    124
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 124
    Points : 107
    Points
    107
    Par défaut petit bug sur convolution
    alors je vois pas trop d'ou vient mon probleme, a gauche une image moyennée par ImageJ (radius=10) a droite ma propre implantation.

    je n'arrive pas à expliquer l'effet de stries qu on y voit... problème de base à mon avis

    Pourtant mon parcours ressemble a 2 gouttes d'eau a celui d'IJ :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    int width = img.getWidth();
    int height = img.getHeight();
    int[] res = new int[width*height];
    int rad = 10;
    int xedge = width-rad;
    int yedge = height-rad;
    for (int y = 0 ; y < height; y++ ) {
    	int offset1 = y*width;;
    	for (int x = 0 ; x < width ; x++) {
    		int pixel = x+offset1;
    		int[][] vignet_ =  new int[rad * 2 + 1][rad * 2 + 1];
    		edgePixel = y<rad || y>=yedge || x<rad || x>=xedge;		
    		for (int ym = -rad; ym <= rad; ym++){
    			int offset = x+(y+ym)*width;
    			for (int xm = -rad; xm <= rad; xm++){
    				if (!edgePixel)
    					vignet_[ym+rad][xm+rad] =  ip.get(offset+xm);
    				else 
    					vignet_[ym+rad][xm+rad] =  getPixel(x+xm, y+ym, width, height);
    			}
    		}
    		res[pixel]= (int) mean(vignet_);
    	}
    }
    une idée ?
    Images attachées Images attachées   

  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 : 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
    A première vue le code m'a l'air correct. Tu es sûr que le problème ne vient pas de ta fonction mean() ?
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    124
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 124
    Points : 107
    Points
    107
    Par défaut
    Oui la fonction mean() est correcte, je fais mes tests avec une fonction simple car j'ai eu le même genre d'effet avec les indices d'haralick par exemple : voir l'image suivante, indice 6 des matrices de coocurrence, ce qui me semble vraiment bizar...
    Images attachées Images attachées  

  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 : 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
    J'ai testé ton code sur une BufferedImage et il fonctionne. J'en déduis que le problème vient soit du filtre mean(), soit du chargement de l'image originale, soit de l'affichage du résultat.
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    124
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 124
    Points : 107
    Points
    107
    Par défaut
    Merci pour l'info je vérifie tout ca de plus près...
    A+

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    124
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 124
    Points : 107
    Points
    107
    Par défaut
    Ben je vois pas...

    Voici un plugin "minimal" pour ImageJ. IJ ouvre/affiche correctement les images grâce aux ImagePlus et ImageProcessor, ma fonction mean() semble correcte, et j'observe toujours des stries, c'est pas normal on est d'accord ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
     
    import ij.ImagePlus;
    import ij.plugin.filter.PlugInFilter;
    import ij.process.ByteProcessor;
    import ij.process.ImageProcessor;
     
     
    public class Test_ implements PlugInFilter {
     
    	ImagePlus img ;
     
    	@Override
    	public int setup(String arg, ImagePlus imp) {
    		this.img = imp;
    		return DOES_8G;
    	}
     
    	@Override
    	public void run(ImageProcessor ip) {
    		int rad = 10;
    		int width = img.getWidth();
    		int height = img.getHeight();
    		ImageProcessor ipres = new ByteProcessor(width, height);
    		int xedge = width-rad;
    		int yedge = height-rad;
    		for (int y = 0 ; y < height; y++ ) {
    			int offset1 = y*width;;
    			for (int x = 0 ; x < width ; x++) {
    				int pixel = x+offset1;
    				int[] vignet_ =  new int[(rad * 2 + 1)*(rad * 2 + 1)];
    				int vind =0;
    				boolean edgePixel = y<rad || y>=yedge || x<rad || x>=xedge;		
    				for (int ym = -rad; ym <= rad; ym++){
    					int offset = x+(y+ym)*width;
    					for (int xm = -rad; xm <= rad; xm++){
    						if (!edgePixel)
    							vignet_[vind] =  ip.get(offset+xm);
    						else
    							vignet_[vind] =  getPixel(x+xm, y+ym, width, height);
    						vind++;
    					}
    				}
    				ipres.set(pixel, (int) mean(vignet_));
    			}
    		}
    		ImagePlus resImg = new ImagePlus("res", ipres);
    		resImg.show();
    	}
     
    	private int getPixel(int x, int y, int width, int height) {
    		if (x<=0) x = 0;
    		if (x>=width) x = width-1;
    		if (y<=0) y = 0;
    		if (y>=height) y = height-1;
    		return img.getProcessor().get(x+y*width);
    	}
     
    	public double mean(int[] array) {
    		double m = 0.;
    		for (int i = 0; i < array.length; i++)
    			m += array[i];
    		return m / array.length;
    	}
     
    }

  7. #7
    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 Mr.ux Voir le message
    Ben je vois pas...

    Voici un plugin "minimal" pour ImageJ. IJ ouvre/affiche correctement les images grâce aux ImagePlus et ImageProcessor, ma fonction mean() semble correcte, et j'observe toujours des stries, c'est pas normal on est d'accord ?
    Ca ne fait pas de stries sur mon PC (ImageJ 1.44o)

    Après, ce que tu appelles les "stries" sont peut-être simplement les résultats normaux d'un filtre moyenne.

    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    124
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 124
    Points : 107
    Points
    107
    Par défaut
    Merci de ton aide PseudoCode, tu dois surement avoir raison, bien qu'en faisant la soustraction de mon image moyennée et celle moyennée par IJ on obtient pas que des zeros Et la différence est flagrante sur les images initiales de mon post...
    A+

  9. #9
    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 Mr.ux Voir le message
    Merci de ton aide PseudoCode, tu dois surement avoir raison, bien qu'en faisant la soustraction de mon image moyennée et celle moyennée par IJ on obtient pas que des zeros Et la différence est flagrante sur les images initiales de mon post...
    A+
    C'est peut-être aussi (et surement) parce que IJ utilise un masque circulaire et toi un masque carré.
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    124
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 124
    Points : 107
    Points
    107
    Par défaut
    Citation Envoyé par pseudocode Voir le message
    C'est peut-être aussi (et surement) parce que IJ utilise un masque circulaire et toi un masque carré.
    Ca se tient Merci, je ferme le post du coup.

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

Discussions similaires

  1. Petit bug sur IE avec style.color
    Par zerros dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 14/11/2012, 10h06
  2. Petit bug sur filtre
    Par delcroixf dans le forum IHM
    Réponses: 3
    Dernier message: 20/03/2007, 22h21
  3. Petit bug sur des onglets
    Par pierre.coudert dans le forum Mise en page CSS
    Réponses: 5
    Dernier message: 18/01/2007, 11h28
  4. Réponses: 1
    Dernier message: 29/11/2005, 17h32
  5. [RegEx] Petit Bug sur Expression Régulière
    Par Delphy113 dans le forum Langage
    Réponses: 2
    Dernier message: 25/09/2005, 20h48

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