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![]()
In extenso :
Dans la FAQ libs C/C++. Une coquille ?Imlib : Bibliothèque de traitement d'image qui supporte les formats TIFF, PNG, XPM, JPEG et EIM (entres autres). Pas de GIF, à cause des brevets.
C'est la bibliothèque utilisée pour le célèbre logiciel de traitement d'image GIMP et pour le projet GNOME (ce n'est pas rien !).
La bibliothèque supporte par exemple le rééchantillonage, la transparence, les écrans en 256 couleurs, et est dotée d'un système de cache pour accélérer l'ensemble
Ouais, ça me semble franchement bizarre que ce soit utiliser pour les opérateurs. Dans le dossier des sources de gimp, dans plug-ins/common, il y a la définition de touts les formats d'images, de tous les opérateurs...Envoyé par mchk0123
Par contre, il est possible qu'ils utilisent la bibliothèque pour autre chose (peut être l'affichage ?)
Bon aprés investigation, c'est n'est pas une bibliothèque de manipulation d'images mais de chargement d'images et de rendering 2D.
En plus purement Unix (car basée X11).
Donc coquille dans la FAQ, je remonte l'info.
Je ferme ici le HS. )))))))
Tu peux jetter à un oeil à ça :
http://jeux.developpez.com/sources/s...ransformations
Qui te permet de charger des BMP, et faire quelques opérations de base (laplacien...)
merci beaucoup pour le lien. et si vous en avez d'autre ils seront tjs les bienvenu. et si j'insiste trop c parceke je ss désespéré![]()
![]()
![]()
Tu pourrais éviter le sms.
Avec les informations que je t'ai donné, tu pourrais trouver par toi même sur google. Les mots clefs : JAI sobel java me donnes par exemple le lien : https://jaistuff.dev.java.net/code/operators.Edge.html
Au passage, si c'est la théorie que tu ne comprends pas, tu peux regarder ici : http://humbert-florent.developpez.co.../introduction/
J'ai un peu modifié le code pour le faire marcher juste en ayant à installer JAI :
Code Java : 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 import java.awt.*; import javax.swing.*; import java.awt.event.*; import javax.media.jai.JAI; import javax.media.jai.KernelJAI; import javax.media.jai.PlanarImage; import com.sun.media.jai.widget.DisplayJAI; public class Main { public static void main(String[] args) { float[] kernelMatrix = { -1, -2, -1, 0, 0, 0, 1, 2, 1 }; PlanarImage input = JAI.create("image chargée", "avatar.jpg"); KernelJAI kernel = new KernelJAI(3,3,kernelMatrix); /*application de la convolution*/ PlanarImage output = JAI.create("convolution", input, kernel); /* Utile pour directement afficher*/ JFrame frame = new JFrame(); Container contentPane = frame.getContentPane(); frame.setTitle("avatar : détection de bords"); contentPane.setLayout(new BorderLayout()); DisplayJAI dj = new DisplayJAI(output); contentPane.add(new JScrollPane(dj),BorderLayout.CENTER); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } }
Le fichier ouvert s'appelera avatar.jpg
Il est même possible d'utiliser les masques prédéfinis dans la classe KernelJAI. Par exemple :
Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 .... PlanarImage input = JAI.create("image chargée", "avatar.jpg"); /*application de la convolution*/ PlanarImage output = JAI.create("convolution", input, KernelJAI.GRADIENT_MASK_SOBEL_HORIZONTAL); ....
Pour information, j'ai débuté un "petit" projet en C++. Ca sera une bibliothèque de traitement numérique d'images. Je metterai tout ce qui est nécessaire pour les entrées sorties (j'ai déjà codé pour les BMP en utilisant SDL). Faire des opérations géométriques, optiques (avec les noyaux de convolution), application de filtre dans le domaine de Fourier, peut être des opérateurs morphologiques, et peut être ajouter des techniques de restaurations itératives...
En tout cas, j'ai essayé de concevoir pour que ce soit le plus simple possible, je me suis un peu inspiré de JAI.
Mais il faudra un peu attendre![]()
millie, il faudra que l'on discute hors topic, car je fait la même chose de mon côté (surement des articles ou code à échanger) :
Librairie C++ de traitement d'image. Je ne suis pas aussi avancé que toipour les opérateurs (les + basiques : une petite 30-aine), mais pour les formats je supporte déjà BMP JPG PNG GIF RAW, en 32/24/8 bits, palettes indexing, grayscales & binaries.
Heu bonjour je ne voudrais pas vous embeter, mais c'est aussi valable pour Psycho, vous avez pensé a OpenCV qui est libre de surcroit ?Envoyé par mchk0123
OpenCV Intel
Sources
Bonne Journée![]()
J'ai vu dans les codes d'exemples que c'était en C et pas en C++ par contre![]()
Je n'ai pas regardé dans le détail, mais l'idée d'un bibliothèque free sur la CV ça me plait bien.
Hop dans le bookmark ...
Pour en revenir au sujet de pysco_xn, cette bibliothèque risque d'être malheureusement le marteau piqueur pour écraser une mouche.
Partager