Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : traitement d'image en java [ Divers / Débutant(e) ] (raidana)

vendredi 21 novembre 2008 à 10:11:19 | traitement d'image en java

raidana

Bonjour,
je suis débutante en traitement d'image et java.
je dois développer une application de traitement d'image.
j'ai commencé à réaliser cet application en cherchant des codes par tout et j'ai rassemblé qq codes.Maintenant il reste de les maitriser et les intégrer. J'ai rencontré le pb suivant :
le résultat de l'algorithme filtre gaussien flou m'affiche un image tout en noir et je ne comprend pas pourquoi et je n'ai pas su comment intégré le filtre gaussien et le filtre Median.
le temps coule.Est ce qu'il y a qq qui peut m'aider
merci d'avance

vendredi 21 novembre 2008 à 10:35:32 | Re : traitement d'image en java

laurent1024

L'erreur vient de la ligne 245 de ta source java.

vendredi 21 novembre 2008 à 10:43:27 | Re : traitement d'image en java

raidana

il parait (bien sur) que vous avez jeter un coup d'oeil sur ma source que vous n'avez pas demander meme.

vendredi 21 novembre 2008 à 11:05:21 | Re : traitement d'image en java

Twinuts

Membre Club Administrateur CodeS-SourceS
Salut,

merci de donner le code en cause (ou portion de code) afin d'orienter l'aide de la meilleur façon possible et surtout éviter de poster pour ne rien dire afin que personne ne perde son temps inutilement ...




------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

OoWORAoO

vendredi 21 novembre 2008 à 11:11:43 | Re : traitement d'image en java

raidana

import java.awt.image.*;

public class GaussianFilter extends ConvolveFilter {

 static final long serialVersionUID = 5377089073023183684L;

 protected float radius;
 protected Kernel kernel;
 
 /**
  * Construct a Gaussian filter
  */
 public GaussianFilter() {
  this(2);
 }

 /**
  * Construct a Gaussian filter
  * @param radius blur radius in pixels
  */
 public GaussianFilter(float radius) {
  setRadius(radius);
 }

 /**
  * Set the radius of the kernel, and hence the amount of blur. The bigger the radius, the longer this filter will take.
  * @param radius the radius of the blur in pixels.
  */
 public void setRadius(float radius) {
  this.radius = radius;
  kernel = makeKernel(radius);
 }
 
 /**
  * Get the radius of the kernel.
  * @return the radius
  */
 public float getRadius() {
  return radius;
 }

    public BufferedImage filter( BufferedImage src, BufferedImage dst) {
        int width = src.getWidth();
        int height = src.getHeight();
      

        if ( dst == null )
            dst = createCompatibleDestImage( src, null );

        int[] inPixels = new int[width*height];
        int[] outPixels = new int[width*height];
        src.getRGB( 0, 0, width, height, inPixels, 0, width );

  convolveAndTranspose(kernel, inPixels, outPixels, width, height, alpha, CLAMP_EDGES);
  convolveAndTranspose(kernel, outPixels, inPixels, height, width, alpha, CLAMP_EDGES);

        dst.setRGB( 0, 0, width, height, inPixels, 0, width );
        return dst;
    }

 public static void convolveAndTranspose(Kernel kernel, int[] inPixels, int[] outPixels, int width, int height, boolean alpha, int edgeAction) {
  float[] matrix = kernel.getKernelData( null );
  int cols = kernel.getWidth();
  int cols2 = cols/2;

  for (int y = 0; y < height; y++) {
   int index = y;
   int ioffset = y*width;
   for (int x = 0; x < width; x++) {
    float r = 0, g = 0, b = 0, a = 0;
    int moffset = cols2;
    for (int col = -cols2; col <= cols2; col++) {
     float f = matrix[moffset+col];

     if (f != 0) {
      int ix = x+col;
      if ( ix < 0 ) {
       if ( edgeAction == CLAMP_EDGES )
        ix = 0;
       else if ( edgeAction == WRAP_EDGES )
        ix = (x+width) % width;
      } else if ( ix >= width) {
       if ( edgeAction == CLAMP_EDGES )
        ix = width-1;
       else if ( edgeAction == WRAP_EDGES )
        ix = (x+width) % width;
      }
      int rgb = inPixels[ioffset+ix];
      a += f * ((rgb >> 24) & 0xff);
      r += f * ((rgb >> 16) & 0xff);
      g += f * ((rgb >> 8) & 0xff);
      b += f * (rgb & 0xff);
     }
    }
    int ia = alpha ? PixelUtils.clamp((int)(a+0.5)) : 0xff;
    int ir = PixelUtils.clamp((int)(r+0.5));
    int ig = PixelUtils.clamp((int)(g+0.5));
    int ib = PixelUtils.clamp((int)(b+0.5));
    outPixels[index] = (ia << 24) | (ir << 16) | (ig << 8) | ib;
                index += height;
   }
  }
 }

 /**
  * Make a Gaussian blur kernel.
  */
 public static Kernel makeKernel(float radius) {
  int r = (int)Math.ceil(radius);
  int rows = r*2+1;
  float[] matrix = new float[rows];
  float sigma = radius/3;
  float sigma22 = 2*sigma*sigma;
  float sigmaPi2 = 2*ImageMath.PI*sigma;
  float sqrtSigmaPi2 = (float)Math.sqrt(sigmaPi2);
  float radius2 = radius*radius;
  float total = 0;
  int index = 0;
  for (int row = -r; row <= r; row++) {
   float distance = row*row;
   if (distance > radius2)
    matrix[index] = 0;
   else
    matrix[index] = (float)Math.exp(-(distance)/sigma22) / sqrtSigmaPi2;
   total += matrix[index];
   index++;
  }
  for (int i = 0; i < rows; i++)
   matrix[i] /= total;

  return new Kernel(rows, 1, matrix);
 }

 public String toString() {
  return "Blur/Gaussian Blur...";
 }
}
/////////////////Dans mon appel j'ai écrit le suivant
private class ActionFiltreGausienfImage implements ActionListener {

        public void actionPerformed(ActionEvent e1) {
         //throw new UnsupportedOperationException("Not supported yet.");
         
         BufferedImage bufsc = new BufferedImage(imgOriginal.getImage().getWidth(null), imgOriginal.getImage().getHeight(null), BufferedImage.TYPE_INT_RGB);
         BufferedImage  imageFiltree = (new GaussianFilter()).filter(bufsc,null);
            imgOriginal.setImage(imageFiltree);
            App.this.repaint();
     
           

        }
    }
/////////Il retourne une image tout en noir
je ne comprend pas pourquoi
merci d'avance


vendredi 21 novembre 2008 à 12:28:32 | Re : traitement d'image en java

laurent1024

Re,
ton problème vient d'ici :
       BufferedImage bufsc = new BufferedImage(imgOriginal.getImage().getWidth(null),
                                                                    imgOriginal.getImage().getHeight(null),
                                                                    BufferedImage.TYPE_INT_RGB);

=> doit généré une image bufsc noire
         BufferedImage  imageFiltree = (new GaussianFilter()).filter(bufsc,null);
==> filtre sur une image noire.
            imgOriginal.setImage(imageFiltree);

Tu filtres l'image bufsc alors que celle si est a priori une image tout noir, tu ne récupéré que la taille de imageOriginal. Il faudrait utiliser les methodes getData ou copyData pour initialiser correctement bufsc.



vendredi 21 novembre 2008 à 12:43:23 | Re : traitement d'image en java

raidana

si j'ai bien compris le pb est dans ce null
imgOriginal.getImage().getWidth(null),imgOriginal.getImage().getHeight(null), BufferedImage.TYPE_INT_RGB);

vendredi 21 novembre 2008 à 14:06:54 | Re : traitement d'image en java

laurent1024

non ce n'est pas le null qui pose problème;
mais quand tu fais BufferedImage bufsc = new BufferedImage(imgOriginal.getImage().getWidth(null),
                                                                    imgOriginal.getImage().getHeight(null),
                                                                    BufferedImage.TYPE_INT_RGB);

ca te crée une image qui à la meme taille que imgOriginal, mais par contre le contenu de imgOriginal n'est pas copié dans bufsc. bufsc est donc une nouvelles image qui doit être noire.
Tu dois rajouter
Graphics2D g2d =bufsc.createGraphics();
g2d .drawImage(imgOriginal,0,0,null); // dessine imgOriginal dans bufsc.
g2d.dispose();

ou alors

imabufsc.setData(imgOriginal.getData());

pour copier les pixel de imgOriginal dans bufsc.

par ailleurs tu peux remplacer imgOriginal.getImage().getWidth(null) par imgOriginal.getImage().getWidth()





vendredi 21 novembre 2008 à 14:15:04 | Re : traitement d'image en java

raidana

merci pour ton aide
je suis vraiement reconnaissant

vendredi 21 novembre 2008 à 18:53:21 | Re : traitement d'image en java

raidana

Salut,
Est ce qu'il ya qq qui peut m'aider à saisir la différence entre le "filtre gaussien","le filtre gaussien flou" et "le filtre gaussien smooth".
merci d'avance




Cette discussion est classé dans : java, application, image, traitement, filtre


Répondre à ce message

Sujets en rapport avec ce message

Réalisation d'une application JAVA qui permet de decouper une image [ par tarikphp ] Bonjour,bon,je suis entrain de preparer mon projet de fin d'etude.je vaux realiser une application JAVA qui permet de decouper une image en plusieurs Image en java [ par Fraisoo37 ] Bonjour,Je suis en train de réaliser une application java et j'aimerais insérer des images dans mon application.J'ai divers Panels et dans le panel du traitement image [ par shadow73 ] Bonjour en visitant le site j'ai trouvé que vous avez eu des problèmes avec java et j'aimerai bien que vous m'aidier svp.Je veux utiliser java pour le Traitement d'image médicale en java [ par raidana ] Bonjourje dois développer une application qui permet d'ouvrir un image, le convertir en NB, appliquer le filtre médian et le filtre gaussien, applique probleme avec draw Image [ par dipin ] bonjour !alors je suis débutant dans le java mais j'ai un petit bug qui m'empêche d'afficher une image pourtant aucun erreur en retour ni d'exception Créer une application java [ par gregoiroux ] Je voudrais savoir si c'est possible de trouver sur le site tout le codage d'un mini jeu ??? Executer une application Java pour mac sous windows [ par Makia ] Bonjour à tous , j'ai récupérer une application java  fonctionnant sous Mac et je souhaiterais savoir l'exécuter sous windows , pouvre me dire comment connexion à une base de documents lotus à partir d'une application java [ par aminekhouja ] Bonjour tout le monde,je veux savoir comment je peux accéder à une base de document Lotus à partir d'une application java. mon probleme consiste à met connection application java avec une base des données mysql [ par aladino ] bonjour mon projet conciste à créer une base des données avec mysql et le geré en utilisant une application java mais le probleme que je connais comme manipulation d'image en java [ par issamo36 ] bonjour, mon problem 'est que j'ai un projet sig en java et je veux afficher des icone d'emplacements sur la carte(image) et je doit les déplacer


Nos sponsors

Sondage...

CalendriCode

Janvier 2009
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

Consulter la suite du CalendriCode



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,359 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.