Bonjour, je cherche un programme sous LINUX en C ou JAVA qui permet la segmentation d'une image, Sa lecture et écriture et si possible l'application des Filtres Prewitt et Sobel.
Merci infiniment pour votre aide
Bonjour, je cherche un programme sous LINUX en C ou JAVA qui permet la segmentation d'une image, Sa lecture et écriture et si possible l'application des Filtres Prewitt et Sobel.
Merci infiniment pour votre aide
En java, tu peux aller jetter un oeil du côté de la bibliothèque JAI. Elle fait tout.
http://java.sun.com/javase/technolog...top/media/jai/
En C le choix vraiment trés vaste. Pour ma part je te conseillerais ImageMagick.
Les plus :
- gère énorméments de formats
- 2 niveau d'API (haut et bas niveau)
- les principaux filtres de bases sont disponibles
- bindings vers un quantité incroyable de langages* y compris C, C++ & JAVA
- portable Windows & Unix
Les filtres Prewit ou Sobel sont souvent regroupés dans la catégorie "edge detection". Au pire, s'ils manquent, il suffit d'utiliser un filtre de convolution générique dans lequel tu choisis tes coéfficients.
Enfin, en dernier recours, en C c'est assez rapide, de coder un filtre une fois que tu accès aux pixels de l'image.
Voilà.
* liste des bindings :
Ada
C
Ch
COM+
C++
Java
Lisp
Neko
.NET
Pascal
Perl
PHP
Python
Ruby
Tcl/Tk
C'est fait que si ta priorité est de calculer les filtres de Sobel et de prewitt, tu prends GIMP, c'est intégré dedans. Je n'y avais pas pensé
J'ai découvert récemment que visiblement GIMP utilisait pour ses manipulations d'images la librairie C (C++?) Imlib.
Moi qui croyais que c'était que du GTK+.
Et chose encore plus bizarre cette librairie est hostée chez Enlightment ...
Le monde est petit![]()
Envoyé par mchk0123
C'est bizarre. En tout cas, certaines parties (notamment les opérateurs sont codées) directement, par exemple, dans le source, dans : plug-ins\commons, on trouve sobel.c qui contient par exemple :
Code C : 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 void sobel (GimpDrawable *drawable, gboolean do_horizontal, gboolean do_vertical, gboolean keep_sign, GimpPreview *preview) ... for (col = 0; col < width * bytes; col++) { hor_gradient = (do_horizontal ? ((pr[col - bytes] + 2 * pr[col] + pr[col + bytes]) - (nr[col - bytes] + 2 * nr[col] + nr[col + bytes])) : 0); ver_gradient = (do_vertical ? ((pr[col - bytes] + 2 * cr[col - bytes] + nr[col - bytes]) - (pr[col + bytes] + 2 * cr[col + bytes] + nr[col + bytes])) : 0); gradient = (do_vertical && do_horizontal) ? (ROUND (RMS (hor_gradient, ver_gradient)) / 5.66) /* always >0 */ : (keep_sign ? (127 + (ROUND ((hor_gradient + ver_gradient) / 8.0))) : (ROUND (abs (hor_gradient + ver_gradient) / 4.0))); if (alpha && (((col + 1) % bytes) == 0)) { /* the alpha channel */ *d++ = (counter == 0) ? 0 : 255; counter = 0; } else { *d++ = gradient; if (gradient > 10) counter ++; }
On reconnait bien l'opérateur ici![]()
Partager