Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1299 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  JAVA2D appliquer un filtre de convolution à une image

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

JAVA2D appliquer un filtre de convolution à une image

n°2350358
xameal
Posté le 31-03-2020 à 19:23:03  profilanswer
 

Bonjour / Bonsoir !  
 
Toujours entrain d'étudier différentes manière de programmer avec mon uni, je me retrouve avec le langage le moins utilisé que je connaisse : JAVA 2D.
C'est simple, tous les tutoriels que je trouve datent de 2008 minimum... Et son souvent très peu complet.
Je vais pas mentir, j'ai un devoir noté sur ça.
J'ai réussi à découvrir l'importance des Panels / Images / Modification de tailles, Visible ou non ,titre ... et d'autre choses.
 
Cependant, il y'a une chose que je GA-LERE, je ne trouve rien sur internet, en anglais ou en français. Enfaite, le peu que je trouve se résume à des bouts de codes qui ne marchent pas quand je les tests.
C'est appliquer un filtre par convolution sur une image !
 
J'ai compris le principe de convolution, le noyau ( kernel ) d'une matrice 3x3 etc...
Hors, je ne comprend rien, je suis perdu, 0 conseils, 0 astuces, et puis avec le confinement, jvous explique pas la galère.
 
J'aimerai savoir, comment appliquer un filtre noir et blanc, ou bien flou avec convolution.  
Ce forum est ma dernière chance  :pt1cable:  
Merci d'avance :D .

mood
Publicité
Posté le 31-03-2020 à 19:23:03  profilanswer
 

n°2350439
leonhard
Posté le 01-04-2020 à 18:28:29  profilanswer
 

xameal a écrit :

Bonjour / Bonsoir !  
 
Merci d'avance :D .


 
Bon c'est vrai, Java2D c'est un peu "old fashion", mais bon c'est quand même assez simple.
Avec ton fichier image, tu peux créer un objet de type BufferedImage... là a juste besoin de 4 méthodes:
 
1) getWidth()
2) getHeight()
3) getRGB(x,y)  (pour lire les composantes RGB d'un pixel de coordonnées x et y)
4) setRGB(x,y)  (pour écrire les 3 composantes RGB dans un pixel au coordonnées x et y)
 
 
Ensuite tu appliques la procédure qui doit se trouver dans ton cours "à la mano"... C'est tout sauf efficace mais c'est pas compliqué. Autre solution de fainéant: tu délègues à OpenCV   ;)  mais pas sûr que ton prof apprécie.

n°2350451
xameal
Posté le 01-04-2020 à 19:19:57  profilanswer
 

Salut,  
 
enfaite, la ou l'exercice est compliquer, c'est que justement, on à pas de cours sur ça :).  
On a appris en théorie la convolution ainsi que les noyaux, mais pas en format "code".
 
Ducoup, pour le moment, j'arrive seulement à afficher une image ( BufferedImage ) dans une fenetre.
Savoir comment appliquer un filtre avec une manière de Convolution et j'afficherai cette deuxième image dans une autre fenêtre.
 
OpenCV ? C'est-à-dire ? Honnêtement que mon prof apprécie ou pas, c'est pas vraiment mon problème, tant que j'arrive à faire ce qu'il demande, et en ayant compris, c'est ce qui m'importe.
 

n°2350607
gilou
Modérateur
Modzilla
Posté le 02-04-2020 à 19:15:34  profilanswer
 

Vas voir du côté de la librairie Twelvemonkeys et la classe ConvolveWithEdgeOp, c'est peut être le genre de chose que tu cherches.
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2350631
leonhard
Posté le 03-04-2020 à 08:20:14  profilanswer
 

xameal a écrit :

Salut,  
 
enfaite, la ou l'exercice est compliquer, c'est que justement, on à pas de cours sur ça :).  
On a appris en théorie la convolution ainsi que les noyaux, mais pas en format "code".


 
Ben si tu es en train de faire une formation d'informatique (je ne vois pas trop sinon dans quel cours on pourrait enseigner la segmentation) c'est justement ce que tu dois fournir comme travail: traduire un algorithme en code. Si tu fais une formation de secrétariat alors effectivement il pourrait vous donner le code et vous demander de le recopier, en mettant de jolies couleurs et si possible quelques petits smiley dans les commentaires du programme.  
 
Non sérieusement:  la matrice de convolution est une matrice 3x3, donc tu dois prendre 9 pixels (aussi 3x3) sur ton image (utiliser getRGB()). Là ça n'a rien à voir avec java2d, c'est juste deux petites boucles avec les limites qui vont bien. Ensuite tu fais les multiplications cellules à cellules comme tu l'as vu au cours et tu obtiens une valeur (en fait normalement 3, une par composante si tu as une image de départ en couleur) et tu stockes cette valeur dans un tableau... (tu peux calculer la taille du tableau de résultat avec la taille de l'image de départ). Quand tu as fini tous les calculs tu crées un autre "BufferedImage" que tu remplis avec les valeurs que tu as calculées. (commentaire pour les pros : oui je sais c'est con mais c'est souvent plus simple à comprendre)... et tu peux ensuite afficher ton image transformée ou la stocker sur disque...
 
 

xameal a écrit :


Ducoup, pour le moment, j'arrive seulement à afficher une image ( BufferedImage ) dans une fenetre.
Savoir comment appliquer un filtre avec une manière de Convolution et j'afficherai cette deuxième image dans une autre fenêtre.
 
OpenCV ? C'est-à-dire ? Honnêtement que mon prof apprécie ou pas, c'est pas vraiment mon problème, tant que j'arrive à faire ce qu'il demande, et en ayant compris, c'est ce qui m'importe.
 


 
OpenCV, voyons voir.... j'ai tapé dans google "java opencv tutorial" et là y'a plein de liens qui expliquent comment faire. Cependant si tu as de la peine avec la version ci-dessus, tu risques ramer sévère. L'utilisation de OpenCV est nettement moins facile que de générer 2 BufferedImage ..  
 
 

n°2352142
xameal
Posté le 20-04-2020 à 18:49:12  profilanswer
 

Merci, j'ai réussi depuis un petit peu l'exercice grâce aux conseils mais j'ai complètement oublier de le dire ici ^^.
Ton commentaire résume à peu près ce que j'avais fait, par contre "traduire un algorithme en code", jvais pas te mentir que c'est facile à dire mais assez compliqué quand y'a très peu de tutoriel sur Internet, c'est pas comme du Java / C / C++ etc...  
 
En tous cas merci, vos conseils ont été grave utile !
Bonne journée à tous, et bonne santé dans ce confinement.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  JAVA2D appliquer un filtre de convolution à une image

 

Sujets relatifs
[React/JS] Actualiser image dans le frontintegration image dans mail
Aggrandir une image de Portfolio en cliquant / JSIntéger les data d'une image au source HTML
ValueError: not enough image data avec PILGénérateur HTML à partir d'une image
Codage bouleversé par une image ?Image bouton html JavaScript
comment récupérer une statistique d'affichage d'une image ?Effet d'assombrissement d'image (WordPress)
Plus de sujets relatifs à : JAVA2D appliquer un filtre de convolution à une image


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR