Bonjour,

J'ai trouvé dans le code source de imageJ les lignes suivante.

Code : 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
 
 
byteprocessor
   case FIND_EDGES: // 3x3 Sobel filter
                    sum1 = p1 + 2*p2 + p3 - p7 - 2*p8 - p9;
                    sum2 = p1  + 2*p4 + p7 - p3 - 2*p6 - p9;
                    sum = (int)Math.sqrt(sum1*sum1 + sum2*sum2);
                    if (sum> 255) sum = 255;
                    break;
 
shortProcessor
 
  case FIND_EDGES:
                for (int x=roiX; x<xEnd; x++,p++) {
                    if (x<width-1) { p3++; p6++; p9++; }
                    v1 = v2; v2 = v3;
                    v3 = pixels2[p3]&0xffff;
                    v4 = v5; v5 = v6;
                    v6 = pixels2[p6]&0xffff;
                    v7 = v8; v8 = v9;
                    v9 = pixels2[p9]&0xffff;
                    double sum1 = v1 + 2*v2 + v3 - v7 - 2*v8 - v9;
                    double sum2 = v1  + 2*v4 + v7 - v3 - 2*v6 - v9;
                    double result = Math.sqrt(sum1*sum1 + sum2*sum2)+0.5;
                    if (result>65535.0) result = 65535.0;
                    pixels[p] = (short)result;
                }
J'ai chercher sobel sur le site et je suis tomber sur un cour mais je ne comprends pas les formules


J'aimerais que quelqu'un m'explique un peut clairement ce code

J'ai compris que 255 ou encore 65535.0 veule dire "pixel activer faisant partie d'un contour" mon souhait serait simplement de laisser l'image en couleur et de faire quelque chose comme

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
 
if (result == 255)
    result = 0xFF0000 // pixel en rouge
Comment faire

Ce bout de code est-il correcte ou non ?

Merci d'avance