Also wenn Du Dir Deinen Code ansiehst, siehst Du ja, daß für jeden Pixel die Werte desselben und die der umgebenden ständig dekrementiert werden.
Ein Sobel sieht meines Erachtens so aus
für Horizontal
1 2 1
0 0 0
-1 -2 -1
und für Vertikal
1 0 -1
2 0 -2
1 0 -1.
Du willst ja die Kanten betonen. Die daraus entstehende Formel wendest du nur für den akutelle Pixel, also den Mittelpunktpixel an.
Für ein skalierung, damit die Werte sich nicht zu stark verändern und in der Summe eins bleiben, kannst du 0.166 statt 1 und 0.333 statt 2 nehmen

Code:
double horiSobel = 0;
double vertSobel = 0;

vertSobel += sobelarray[i-1][j-1] * -0.1666;
vertSobel += sobelarray[i-1][j  ] * -0.3333;
vertSobel += sobelarray[i-1][j+1] * -0.1666;

vertSobel += sobelarray[i+1][j-1] * 0.1666;
vertSobel += sobelarray[i+1][j  ] * 0.3333;
vertSobel += sobelarray[i+1][j+1] * 0.1666;

horiSobel += sobelarray[i-1][j-1] * -0.1666;
horiSobel += sobelarray[i  ][j-1] * -0.3333;
horiSobel += sobelarray[i+1][j-1] * -0.1666;

horiSobel += sobelarray[i-1][j-1] * 0.1666;
horiSobel += sobelarray[i  ][j-1] * 0.3333;
horiSobel += sobelarray[i+1][j-1] * 0.1666;
sobelarray[i][j] = 360.0/(2.0*pi(atan(vertSobel / horiSobel)))
Am Ende stehts hier mir dem Arcustangens, musst mal sehen wie die Werte berechnet werden,wichtig scheint die aber Fließkommaarithmetik zu sein und nicht nur Integerwerte.
Du kannst auch nur die horiSobel- oder vertSobel-Werte in deine Matrix eintragen lassen. Dann hast du jeweils die horizontale und vertiakel Komponente. Auf jeden Fall funktioniert es so wie in Wikipedia beim Canny Operator beschrieben.
Wenn du mal verschiedene Faltungen unter Photoshop ausprobieren unter Filter/Sonstige Filter/Eigener Filter

Fragen?

mfg