svp je cherche un programme pour la detection de contour d une image en java
alors si qlq un peu m aider
svp je cherche un programme pour la detection de contour d une image en java
alors si qlq un peu m aider
le contour de l'image?
en ouvrant l'image tu peux recuperer ses dimensions donc son contour, c'est ca que tu cherche?
Systèmes d'Informations Géographiques
- Projets : Unlicense.science - Apache.SIS
Pour un monde sans BigBrother IxQuick ni censure RSF et Les moutons
Bonjour,
tu peux utiliser des méthodes de traitement d'images : tu peux appliquer par exemple à ton image un filtre Laplacien pour en détecter le contour.
merci pour vos reponses
eclesia: oui c est ce que je veux
azad892000:j ai pas pu faire le programme en java alors si vous pouvez m aider!!
Merci
J'ai pas compris ce que tu veux :
- récupérer les dimensions de l'image ?
- ou bien détecter le contour d'un objet se trouvant dans ton image ?
bonjour
oui je veux détecter le contour d'un objet se trouvant dans ton image
exactement ca alors si vous pouvez m aider
marci d avance
salut,
tu peux chercher dans les documentation de la bibliothèque JAI (java adavanced iamaging) peut être tu trouvrera des fonctions implémentant la méthode de sobel ou une autre méthode de détection de contours.
en tout cas moi aussi je travail sur un petit projet de détection de mouvement dans une vidéo et ça nécessite la détection de contour de chaque objet se trouvant dans les frames de la vidéo si je trouve quelque chose je vais t'informer. et aussi les méthodes de détection de contours ne sont pas difficile à implimenter. il suffit de transformer l'image en pixel puis la multiplier par les deux matrices de sobel par exemple [1 -2 1;0 0 0;1 -2 1] pour la détection des contours vertical et multiplier la matrice d'image par la [1 0 1;-2 0 -2;1 0 1] et puis faire la somme des deux matrices résultats.
Si tu as une image m*n, tu peux faire une image des contours de (m-1)*(n-1) avec pour chaque pixel la moyenne des 3 pixels voisins:Envoyé par fAdoua123
Pour chaque pixel, d = (a + b + c) / 3...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 a b c d
Salut,
il n'est pas très difficile de réaliser cela en effet.
Comme l'a dit Mehdiing, il suffit de récupérer la matrice des valeurs des pixels de l'image et appliquer un filtre dessus.
J'ai déjà réalisé un projet de suivi de mouvement sur une vidéo, et j'ai eu besoin de faire de la détection de contour d'un objet au sein d'une image.
Voici la fonction en C que j'ai utilisé, essaie de l'adapter en java :
Cette fonction prend en arguments :
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 uint8_t* laplacien (uint8_t* image, int width, int height, int nb_iter) { int num; int i, j; uint8_t *temp; uint8_t *image_filtree; temp = (uint8_t*)malloc(width*height*sizeof(uint8_t)); image_filtree = (uint8_t*)malloc(width*height*sizeof(uint8_t)); for (i=0;i<width*height;i++) { temp[i] = image[i]; } for (j=0;j<nb_iter;j++) { for (i=0;i<width*height;i++) { if ((i%width!=0)&&(i%width!=width-1)&&(i>width-1)&&(i<width*(height-1))) { num = 4*temp[i] - temp[i-1] - temp[i+1] - temp[i-width] - temp[i+width]; image_filtree[i] = ((4*abs(num) > 255) ? 255 : 4*abs(num)); } } if (j!=nb_iter-1) { for (i=0;i<width*height;i++) { temp[i] = image_filtree[i]; } } j++; } free(temp); return image_filtree; }
- image : il s'agit d'un tableau contigu des valeurs de pixels de l'image
- width , height : dimensions de l'image en pixels
- iter : le nombre d'itérations à réaliser pour appliquer le filtre
La fonction renvoie l'image filtrée qui correspond aux contours de l'objet dans l'image.
a+++
merci pour vos reponses
le problemes que j arrive pas a faire le programme en java
d habitude je programme en c++ mais la il faut que j travail avec java
et ca marche pas !!!
bon je vais essai encore une fois
merci
Bonjour, azad_892000.
J'ai voulu tester ton code et j'y ai noté quelques erreurs.
Par exemple, il y a un j++ à la fin d'une boucle for. Je pense qu'il est en trop, et d'ailleurs les images générées en fonction du nombre d'itérations sont identiques deux à deux à cause de lui.
Dans ton calcul, image_filtree[i] = ((4*abs(num) > 255) ? 255 : 4*abs(num)); il me semble qu'il faut diviser num par 4 après l'application du filtre plutot que le multiplier. Enfin, c'est ce que j'ai vu d'habitude dans les différents filtres.
J'aimerais bien que tu me montres les résultats que tu obtiens, parce qu'en l'appliquant sur une image de nuages, je n'en obtiens pas vraiment les contours.
A quoi te sert-il de prendre la valeur absolue de num ? Le Laplacien n'est-il pas sensé détecter les passages par zéro, lesquels sont, je pense, effacés en ne conservant que les valeurs absolues.
Pourais-tu m'indiquer ce que sont les itérations qu'il faut passer en paramètre ? Je ne connais pas bien le Laplacien et je ne vois pas ce qu'elles apportent d'image en image.
Merci d'avance
je veux qq cours qui parle (definition de contour,detection de contour,segmentation des images en contours,types de contour(prelmier derivé,deuxiéme derivé),premier dérivée de l'image,deuxiéme derivéé de l'image,laplacien,gaussienne,comparaison entre eux,laplacien de gaussienne,approche local pr les contours,approche golbal pr les contours,contours:transformée de Hough)
j ai un projet sur ca je veux qq document bien expliqué sur ca pr que je puisse comprendre
merci
je vous attends votre réponse
vous pouvez m'aidez svp!!!
Voila un ti bout de code en JAVA que j'ai utilisé pour faire de la détéction de contour. C'est un simple Laplacien mais ca marche pas trop mal
appelle fonction :
ton image source en noir et blanc ca marche mieu
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 BufferedImage img_contour = TDImages.contour(imgSource);
fonction appellée :
Voila, en esperant t'avoir fait avancer un petit peu
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 public static BufferedImage contour(BufferedImage src) { BufferedImage dst = new BufferedImage(src.getWidth(), src.getHeight(), BufferedImage.TYPE_INT_ARGB); // Definition du masque de convolution utilisé pour la détéction des contours de // l'image float[] mask = { -0.1F, -0.1F, -0.1F, -0.1F, 0.8F, -0.1F, -0.1F, -0.1F, -0.1F}; Kernel kernel = new Kernel(3, 3, mask); // On creer notre outils de convolution ConvolveOp convo = new ConvolveOp(kernel); // On effectue la convolution convo.filter(src, dst); // On retourne l'image convoluée return dst; }
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager