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

2D Java Discussion :

Détection de contours


Sujet :

2D Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 3
    Par défaut Détection de contours
    Slt tt le monde,

    Je dois faire une détection de contours d'images en java. Pour ce faire je dois dès le départ lire une image bitmap en noir et blanc et afficher dans un tableau ou matrice les 0 et 1 correpondant aux blancs et aux noirs.


    Si qq peut m'aider pr cette 1ère partie ca sera très sympa

    Merci

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 55
    Par défaut
    Bonjour,
    Une fois tu a chargé ton image tu lui applique cette fonction pour la mettre en
    niveaux de gris
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    BufferedImage griserImage (BufferedImage bi)
     {
         ColorSpace cs = ColorSpace.getInstance(ColorSpace.CS_GRAY);
     
         ColorConvertOp op = new ColorConvertOp(cs, null);
     
         return op.filter(bi, null);
     }
    ensuite pour définir les contours tu applique cette autre méthode:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     public BufferedImage definirContours(BufferedImage img)
        {
     
            float[] elements =
            {
                0f, -1f, 0f, -1f, 4.1f, -1f, 0f, -1f, 0f
            };
            Kernel kernel = new Kernel(3, 3, elements);
     
            ConvolveOp op = new ConvolveOp(kernel);
     
            return op.filter(img, null);
     
        }
    en fin tu dois parcourir l'image contours, pour chaque pixel suffisamment blanc
    ( tu fixes un seuil)
    soit tu mets 1 dans ton tableau s'il est suffisamment blanc.
    sinon tu mets un 0.

    bonne continuation.



  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 3
    Par défaut
    Citation Envoyé par kiki2008 Voir le message
    Bonjour,
    Une fois tu a chargé ton image tu lui applique cette fonction pour la mettre en
    niveaux de gris
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    BufferedImage griserImage (BufferedImage bi)
     {
         ColorSpace cs = ColorSpace.getInstance(ColorSpace.CS_GRAY);
     
         ColorConvertOp op = new ColorConvertOp(cs, null);
     
         return op.filter(bi, null);
     }
    ensuite pour définir les contours tu applique cette autre méthode:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     public BufferedImage definirContours(BufferedImage img)
        {
     
            float[] elements =
            {
                0f, -1f, 0f, -1f, 4.1f, -1f, 0f, -1f, 0f
            };
            Kernel kernel = new Kernel(3, 3, elements);
     
            ConvolveOp op = new ConvolveOp(kernel);
     
            return op.filter(img, null);
     
        }
    en fin tu dois parcourir l'image contours, pour chaque pixel suffisamment blanc
    ( tu fixes un seuil)
    soit tu mets 1 dans ton tableau s'il est suffisamment blanc.
    sinon tu mets un 0.

    bonne continuation.


    ----------------------------------------------------------------------
    Merci Kiki

    Sinon concernant le parcours, le seuil il faut le varier pour voir lequel est plus adequat ou est ce qu'il faut prendre la moitié du niveau de gris maximal (128 pr 1 octet par exemple). En effet les valeurs du niveau de gris que je récupère sont très proches (seulement les 3 derniers bits de l'octet qui changent).

    Merci

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 3
    Par défaut
    J'utilise le code suivant en utilisant les méthodes que t as données mais j'obtiens des formes qui ne correspondent pas à l'image prédéfinie.

    En effet je fs un dessin sur paint avec un rectangle ou triangle par exemple (ss couleurs) et j'affiche seulement les "0" qui correspondent aux pixels noirs.

    Je ss pas trop sûr en plus du seuil que j'ai pris comme je l'ai dit dans le message précedent.

    Voici le code :

    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
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
     
     public class LireFichierBMP {
     //Constantes
     private static final int MASK = 0xFF;/**Constante de masque pour la comparaison bit à bit*/
     
     
     public static  BufferedImage readBMP2(String filename) {
    DataInputStream inBMP;
     try{
     inBMP = new DataInputStream(new FileInputStream(new File(filename)));
     }
     catch(Exception e){
    		System.out.print(e.getMessage()); 
    	 return null;
    	 }
     //On va lire le début de l'entête
     try{
     inBMP.skipBytes(18);
     
     //Maintenant, on lit la largeur et la hauteur de l'image
     int width = readInt(inBMP);
     int height = readInt(inBMP); 
     
     //On saute les données inutiles del'entête
     inBMP.skipBytes(28);
     
     //Nous allons remplir le BufferedImage
     BufferedImage img = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
     int sup = (width * 3) % 4;
     //Lecture des données
     for(int y = 0; y < height; y++){
     for(int x = 0; x < width; x++){
     //Récupération des couleurs
     img.setRGB(x, y, readColor(inBMP));
     }
     //On saute le bourrage
     inBMP.skipBytes(sup);
     }
     inBMP.close();
     return img;
     }
     catch(Exception e){
    	System.out.print("erreur fichier"); 
     return null;
     }
     }
       private static int readColor(DataInputStream in){
    	  byte[] b = new byte[3];
    	  int result = 0;
     
    	  try{
    	  in.read(b);
    	  result = b[0] & MASK;
    	  result = result + ((b[1] & MASK) << 8);
    	  result = result + ((b[2] & MASK) << 16);
    	  }
    	  catch(Exception e){
     
    	  }
     
    	  return result;
    	  } 
     
       private static int readInt(DataInputStream in){
    	 byte[] b = new byte[4];
    	  int result = 0;
     
    	  try{
    	  in.read(b);
    	  result = b[0] & MASK;
    	  result = result + ((b[1] & MASK) << 8);
    	  result = result + ((b[2] & MASK) << 16);
    	  result = result + ((b[3] & MASK) << 24);
     
    	  }
    	  catch(Exception e){
     
    	  }
     
    	  return result;
    	  } 
     
       public static int[][] contour(BufferedImage src) {
    	   ColorSpace cs = ColorSpace.getInstance(ColorSpace.CS_GRAY);
    	   ColorConvertOp op = new ColorConvertOp(cs,null);
    	   op.filter(src, null);
    	  // Definition du masque de convolution utilisé pour la détéction des contours de
    		// l'image
    		float[] mask = { 0f, -1f, 0f, -1f, 4.1f, -1f, 0f, -1f, 0f};
    		Kernel kernel = new Kernel(3, 3, mask);
    		// On creer notre outils de convolution
    		ConvolveOp convo = new ConvolveOp(kernel);
    		// On effectue la convolution
    		BufferedImage dst = convo.filter(src, null);
    		  int[][] reponsef = new int[dst.getWidth()][dst.getHeight()];
    		for(int y = 0; y < dst.getHeight(); y++){
    			 for(int x = 0; x < dst.getWidth(); x++){			 
    			if(dst.getRGB(x, y)>=-15132391)//img.getRGB(x, y);//readColor(inBMP);
    				 reponsef[x][y]= 1;
    	        else
    	        	reponsef[x][y]= 0;
    			 }		
    		}
    			 return reponsef;
    	}
     
     
          public static void main(String[] args) {
    		// TODO Auto-generated method stub
        	 BufferedImage bi = LireFichierBMP.readBMP2("test4.bmp");
        	int[][] res =  LireFichierBMP.contour(bi);
    		for(int y = 0; y < bi.getHeight(); y++){
    			 for(int x = 0; x < bi.getWidth(); x++){
    				if(res[x][y]==0)
    				System.out.print(res[x][y]+" ");
    				else
    					System.out.print(" ");
    			 }
    			 System.out.print("\n"); 
    		}
     
    	}
     
     }

Discussions similaires

  1. Détection de contour PREWITT
    Par b_reda31 dans le forum Traitement d'images
    Réponses: 4
    Dernier message: 05/02/2008, 22h44
  2. [Débutante] Détection de contour
    Par diana82 dans le forum Images
    Réponses: 3
    Dernier message: 29/10/2007, 16h20
  3. Détection de contours sur une vidéo
    Par willem77 dans le forum OpenCV
    Réponses: 0
    Dernier message: 11/09/2007, 13h45
  4. [débutant]traitement image, détection de contour
    Par seerauber dans le forum Traitement d'images
    Réponses: 4
    Dernier message: 13/07/2007, 15h25
  5. Détection de contour
    Par biquet dans le forum Images
    Réponses: 11
    Dernier message: 19/01/2007, 17h50

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