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 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102
| // 1Ëre solution tel que : n est la taille du filtre ( ex: 3*3 ------> n=3 )
public static BufferedImage average(BufferedImage srcImg, int n){
int w = srcImg.getWidth();
int h = srcImg.getHeight();
BufferedImage dstImg = new BufferedImage(w,h,BufferedImage.TYPE_INT_RGB);
for(int y=0;y<h;++y){
for(int x=0;x<w;++x){
int som = 0;
if(x==0 || y==0||x==w ||y==h){
System.out.print("couleur: ");
System.out.println(Math.abs(srcImg.getRGB(x,y)));
dstImg.setRGB(x, y, Math.abs(srcImg.getRGB(x, y)));
}else
{
for(int j=y;j<n;j++){
for(int i=x;i<n;i++){
som+= srcImg.getRGB(i, j);
}
}
for(int j=y+1;j<n-1;j++){
for(int i=x+1;i<n-1;i++){
dstImg.setRGB(i, j ,(int) som/(n*n));
}
}
}
}
}
return dstImg;
}
// 2Ëme sol:
// le filtre utiliser est:
public static final int [][] moy ={{1,1,1} , {1,1,1} , {1,1,1}};
public static BufferedImage f_moy(BufferedImage img, int[][] filtre){
int x = img.getWidth();
int y = img.getHeight();
BufferedImage dstImg = new BufferedImage(x,y,BufferedImage.TYPE_INT_RGB);
for( int i=1;i<x-1;i++)
{ int p = img.getRGB(i,0);
dstImg.setRGB(i,0,p);
}
for( int i=1;i<x-1;i++)
{ int p = img.getRGB(i,y);
dstImg.setRGB(i,y,p);
}
for( int i=0;i<y;i++)
{ int p = img.getRGB(0,i);
dstImg.setRGB(0,i,p);
}
for( int i=0;i<y;i++)
{ int p = img.getRGB(x,i);
dstImg.setRGB(x,i,p);
}
for(int j=2;j<y-1;++j){
for(int i=2;i<x-1;++i){
int s=0;
// le produit convolutionnaire avec le filtre
for(int m=0,dj=j-1;m<filtre.length;m++,dj++){
for(int n=0,di=i-1;n<filtre[0].length;n++,di++){
int pxl =img.getRGB(di, dj);
s += pxl * filtre[m][n];
}
}
dstImg.setRGB(i, j,s);
}
}
return dstImg;
}
// deuxiËme solution : n est la taille du filtre ( ex: 3*3 ------> n=3 )
public static BufferedImage average(BufferedImage srcImg, int n){
int w = srcImg.getWidth();
int h = srcImg.getHeight();
BufferedImage dstImg = new BufferedImage(w,h,BufferedImage.TYPE_INT_RGB);
for(int y=0;y<h;++y){
for(int x=0;x<w;++x){
int som = 0;
if(x==0 || y==0||x==w ||y==h){
System.out.print("couleur: ");
System.out.println(Math.abs(srcImg.getRGB(x,y)));
dstImg.setRGB(x, y, Math.abs(srcImg.getRGB(x, y)));
}else
{
for(int j=y;j<n;j++){
for(int i=x;i<n;i++){
som+= srcImg.getRGB(i, j);
}
}
for(int j=y+1;j<n-1;j++){
for(int i=x+1;i<n-1;i++){
dstImg.setRGB(i, j ,(int) som/(n*n));
}
}
}
}
}
return dstImg;
} |
Partager