Grâce à Pseudocode, j'ai pu mettre en pratique ma théorie sur la quantification de la variation spatiale des couleurs afin de faire un distingo entre les images CGI et les véritables photos, telle que définie ci-dessous:
Nous avons utilisé l'observation que les changements de couleurs se produisent dans une moindre mesure de pixels en pixels dans les CGIs que dans les photographies.
La raison est probablement parce que les photographies contiennent de vrais scènes et objets avec beaucoup de changements de couleurs naturelles, tandis que les CGIs n'ont pas un tel luxe en raison des limitations inhérentes au dessin avec une palette de couleur limitée.
Afin de mesurer la variation spatiale des couleurs, pour chaque pixel des images, nous avons déterminé l'orientation du plan le mieux adapté à un voisinage 5*5 centré sur le pixel concerné. Après normalisation des triplets <R, G, B> vers nR, nG, nB, alors une variation alpha peut être obtenu par:

là où la distance Euclidienne de chaque Pixel dans le voisinage 5*5 du pixel central se résume et est normalisée par le chiffre 25.
Voici le code correspondant:
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
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
package spatial;
 
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
 
import javax.imageio.ImageIO;
 
 
public class spatialvariation {
 
	public static void main(String[] args)throws Exception {
 
		// lecture de l'image
		BufferedImage image = null; 
		try {
			image = ImageIO.read(new File("1.bmp"));
		} catch (IOException e) {
			e.printStackTrace();
			return;
		}
 
	}
		// retourne un triplet de couleur normé
		public static double[] getRGB(BufferedImage image, int x, int y) {
			int argb = image.getRGB(x,y);
			int a = (argb >>24 ) & 0xFF;
			int r = (argb >>16 ) & 0xFF;
			int g = (argb >> 8 ) & 0xFF;
			int b = argb & 0xFF;
			double norme = Math.sqrt(r*r + g*g + b*b);
			return new double[] {r/norme, g/norme, b/norme};
		}
 
		public static double getAlpha(BufferedImage image, int x, int y) {
			double alpha=0;
 
			// triplet central
			double[] rgb_0 = getRGB(image,x,y); 
 
			// pour tout le voisinage 5x5 = [-2,-1,0,1,2]x[-2,-1,0,1,2]
			for(int dy=-2;dy<=2;dy++) {
				for(int dx=-2;dx<=2;dx++) {
 
					// coordonnées du voisin
					int y_i = y+dy;
					int x_i = x+dx;
 
					// gestion des bords
					if (y_i<0) y_i=0;
					if (y_i>=image.getHeight()) y_i=image.getHeight()-1;
					if (x_i<0) x_i=0;
					if (x_i>=image.getWidth()) x_i=image.getWidth()-1;
 
					// triplet du voisin
					double[] rgb_i = getRGB(image,x_i,y_i);
 
					// calcul de alpha
					double delta_r = rgb_i[0]-rgb_0[0];
					double delta_g = rgb_i[1]-rgb_0[1];
					double delta_b = rgb_i[2]-rgb_0[2];
					alpha+=Math.sqrt( delta_r*delta_r + delta_g*delta_g + delta_b*delta_b );
				}
			}
 
			return alpha/25;
		}
 
}
J'ai essayé aussi avec un
Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
private static BufferedImage image;
entre public class et public static void main; mais dans les deux cas, je n'ai rien en sortie (sous Eclipse), pas de bug ni de message d'erreur....RIEN.
J'ai dû faire une erreur dans le code concernant l'output de mon image, mais je débute en Java et je ne vois pas où.....

Quelqu'un peux m'aider??
Merci