Salut,

j'utilise cette fonction Filter3 pour faire le produit de convolution par un noyaux de taille 3*3
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
28
29
30
31
32
33
34
35
36
37
38
void __fastcall TForm1::Filter3(int p0, int p1, int p2, int p3, int p4, int p5, int p6, int p7, int p8, int k)
{
 
w=Srce->Width-1;
h=Srce->Height;
//Intialement
 P = (jRgb*)Srce->ScanLine[0]; // P pointe sur la premiere ligne (y=0) du bitmap Source
 L = (jRgb*)Srce->ScanLine[1]; // L pointe sur la deuxieme ligne (y=1) du bitmap Source
 
        for(int y = 2; y < h; y++)    // on commence la boucle par la "eme ligne (y=2)
    {
    N = (jRgb*)Srce->ScanLine[y];        // N pointe sur la ligne y du bitmap source
    T = (jRgb*)Dest->ScanLine[y-1];   // T pointe sur la ligne y-1 du bitmap Destination
    for(int x = 1; x < w; x++)
        {
        b = (   p0*P[x-1].Blue + p1*P[x].Blue + p2*P[x+1].Blue +
               p3* L[x-1].Blue + p4*L[x].Blue + p5*L[x+1].Blue +
               p6* N[x-1].Blue +p7* N[x].Blue +p8* N[x+1].Blue) / k;
 
 
 
        T[x].Blue = (Byte)b;
        T[x].Green = (Byte)b;
        T[x].Red = (Byte)b;
        }
 
        // passage de P  à la ligne suivante
    P = L;
            // passage de L à la ligne suivante
    L = N;
    }
 
 
         ImageOriginale->Repaint();
      ImageOriginale->Visible=true;
 
         return;
}
et je l'appelle avec les paramètres du noyaux vertical de sobel ainsi:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
Form1->Filter3(-1,0,1,-2,0,2,-1,0,1,4);
j'ai posté le sujet dans le forum de traitement d'image, on dit que le problème est au niveau du code, alors que ce même code fonctionne nickel avec d'autres filtres comme le gaussien et le moyenneur. je ne sais pas peut etre qu'il faut procéder autrement pour les détecteurs de contours. est ce que vous pouvez m'aider là dessus?

Merci d'avance.