Inversion des couleurs d'une image

Aller en bas

Inversion des couleurs d'une image Empty Inversion des couleurs d'une image

Message  Gus le Ven 8 Juil - 19:37

A présent, je vais présenter 4 entités de traitement d'image pour inverser les couleurs, soit selon les 3 composantes Rouge, Vert, Bleu (ce qui correspond au négatif d'une photo), soit selon l'une d'entre elles. Ils s'agit de transformations réversibles puisque appliquées deux fois de suite, elles redonnent la même image.

Image d'origine :
Inversion des couleurs d'une image Mononoke_original

négatif photo : gus.image.transform.rendered.color.invert
Code:
package gus05.entity.gus.image.transform.rendered.color.invert;

import java.awt.image.RenderedImage;
import java.awt.image.renderable.ParameterBlock;
import javax.media.jai.JAI;
import gus05.framework.core.Entity;
import gus05.framework.features.Transform;

public class ImageColorInvert implements Entity, Transform {

    public String getName()            {return "gus.image.transform.rendered.color.invert";}
    public String getCreationDate()      {return "2011.07.05";}

    public Object transform(Object obj) throws Exception
    {
       RenderedImage image = (RenderedImage) obj;
       ParameterBlock pb = new ParameterBlock();
      pb.addSource(image);
      return JAI.create("invert",pb);
    }
}
Inversion des couleurs d'une image Mononoke_invcolor_allbands

négatif de la bande rouge : gus.image.transform.rendered.color.invert.firstband
Code:
package gus05.entity.gus.image.transform.rendered.color.invert.firstband;

import java.awt.image.RenderedImage;
import java.awt.image.renderable.ParameterBlock;
import javax.media.jai.JAI;
import gus05.framework.core.Entity;
import gus05.framework.features.Transform;

public class ImageColorInvertFirstBand implements Entity, Transform {

    public String getName()            {return "gus.image.transform.rendered.color.invert.firstband";}
    public String getCreationDate()      {return "2011.07.06";}

    public static final double[][] matrix_invert_first_band = {
      { -1.0d,   0.0d,      0.0d,      255.0d },
      { 0.0d,      1.0d,      0.0d,      0.0d },
      { 0.0d,      0.0d,      1.0d,      0.0d },
    };

    public Object transform(Object obj) throws Exception
    {
       RenderedImage image = (RenderedImage) obj;
       ParameterBlock pb = new ParameterBlock();
      pb.addSource(image);
      pb.add(matrix_invert_first_band);
      
      return JAI.create("bandcombine",pb,null);
    }
}
Inversion des couleurs d'une image Mononoke_invcolor_firstband

négatif de la bande verte : gus.image.transform.rendered.color.invert.centerband
Code:
package gus05.entity.gus.image.transform.rendered.color.invert.centerband;

import java.awt.image.RenderedImage;
import java.awt.image.renderable.ParameterBlock;
import javax.media.jai.JAI;
import gus05.framework.core.Entity;
import gus05.framework.features.Transform;

public class ImageColorInvertCenterBand implements Entity, Transform {

    public String getName()            {return "gus.image.transform.rendered.color.invert.centerband";}
    public String getCreationDate()      {return "2011.07.06";}

    public static final double[][] matrix_invert_center_band = {
      { 1.0d,      0.0d,      0.0d,      0.0d },
      { 0.0d,      -1.0d,      0.0d,      255.0d },
      { 0.0d,      0.0d,      1.0d,      0.0d },
    };

    public Object transform(Object obj) throws Exception
    {
       RenderedImage image = (RenderedImage) obj;
       ParameterBlock pb = new ParameterBlock();
      pb.addSource(image);
      pb.add(matrix_invert_center_band);
      
      return JAI.create("bandcombine",pb,null);
    }
}
Inversion des couleurs d'une image Mononoke_invcolor_centerband

négatif de la bande bleue : gus.image.transform.rendered.color.invert.lastband
Code:
package gus05.entity.gus.image.transform.rendered.color.invert.lastband;

import java.awt.image.RenderedImage;
import java.awt.image.renderable.ParameterBlock;
import javax.media.jai.JAI;
import gus05.framework.core.Entity;
import gus05.framework.features.Transform;

public class ImageColorInvertLastBand implements Entity, Transform {

    public String getName()            {return "gus.image.transform.rendered.color.invert.lastband";}
    public String getCreationDate()      {return "2011.07.07";}

    public static final double[][] matrix_invert_last_band = {
      { 1.0d,      0.0d,      0.0d,      0.0d },
      { 0.0d,      1.0d,      0.0d,      0.0d },
      { 0.0d,      0.0d,      -1.0d,      255.0d },
    };
 
    public Object transform(Object obj) throws Exception
    {
       RenderedImage image = (RenderedImage) obj;
       ParameterBlock pb = new ParameterBlock();
      pb.addSource(image);
      pb.add(matrix_invert_last_band);
      
      return JAI.create("bandcombine",pb,null);
    }
}
Inversion des couleurs d'une image Mononoke_invcolor_lastband

Toutes ces entités font appel aux fonctionnalités de traitement de l'API JAI en particulier la méthode statique create de la classe JAI qui permet de faire énormément de choses. Concernant le traitement avec le nom "bandcombine" qui est utilisé dans les trois dernières entités, le traitement permet de faire de très nombreuses transformations sur les couleurs de l'image suivant les valeurs qu'on prend dans la matrice double[][] de dimension [3,4] passée en paramètre. Je n'ai pas pris le temps d'approfondir le mécanisme mais il semble qu'il y ait là encore de nombreuses pistes à explorer pour obtenir de nouveaux traitements.
Gus
Gus
Admin

Messages : 249
Date d'inscription : 01/09/2009

Voir le profil de l'utilisateur http://www.gus05.com

Revenir en haut Aller en bas

Revenir en haut


 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum