Die seite weicht am stärksten von allen ab und laut vielen anderen seiten ist das mit dem hsv auch nicht so toll.

Hier mein vertikaler sobel:

Code:
void sobel_filtering2( )
     /* Spatial filtering of image data */
     /* Sobel filter (horizontal differentiation */
     /* Input: image1[y][x] ---- Outout: image2[y][x] */
{
  /* Definition of Sobel filter in horizontal direction */
  int weight[3][3] = {	{ -1,  0,  1 },
						{ -2,  0,  2 },
						{ -1,  0,  1 }};
  int x_size2,y_size2;
  double pixel_value;
  double min, max;
  int x, y, i, j;  /* Loop variable */


  /* Maximum values calculation after filtering*/
  printf("Now, filtering of input image is performed\n\n");
  min = DBL_MAX;
  max = -DBL_MAX;
  for (y = 1; y < Y - 1; y++) {
    for (x = 1; x < X - 1; x++) {
      pixel_value = 0.0;
      for (j = -1; j <= 1; j++) {
	    for (i = -1; i <= 1; i++) {
	      pixel_value += weight[j + 1][i + 1] * picdatagrey[(x+i)+X*(y+j)];//image1[y + j][x + i];
	    }
      }
      if (pixel_value < min) min = pixel_value;
      if (pixel_value > max) max = pixel_value;
    }
  }
  if ((int)(max - min) == 0) {
    printf("Nothing exists!!!\n\n");
    return ;
  }

  printf("max:%f\nmin:%f\n",max,min);

  /* Initialization of image2[y][x] */
  x_size2 = X;
  y_size2 = Y;
  for (y = 0; y < y_size2; y++) {
    for (x = 0; x < x_size2; x++) {
      //image2[y][x] = 0;
		picdatafiltert[x+X*y];
    }
  }
  /* Generation of image2 after linear transformtion */
  for (y = 1; y < Y - 1; y++) {
    for (x = 1; x < X - 1; x++) {
      pixel_value = 0.0;
      for (j = -1; j <= 1; j++) {
	    for (i = -1; i <= 1; i++) {
	      pixel_value += weight[j + 1][i + 1] * picdatagrey[(x+i)+X*(y+j)];//image1[y + j][x + i];
	    }
      }
	  //printf("sobel:%f\n",pixel_value);
      pixel_value = MAX_BRIGHTNESS * (pixel_value - min) / (max - min);
	  
      picdatafiltert[x+X*y] = (unsigned char)pixel_value;
    }
  }
}
Ich berechne vorher noch den maximalen und minimalen wert zur begrenzung.
Mein horizontaler sieht gleich aus, nur andere matrix

und das verbinden:
Code:
void verbinden()
{
	for(int i=0;i<X*Y;i++)
	{
		picdatafiltert3[i]=sqrt(picdatafiltert2[i]*picdatafiltert2[i]+picdatafiltert[i]*picdatafiltert[i]);
		//picdatafiltert3[i]=(picdatafiltert2[i]+picdatafiltert[i])/2;

	}
}
Was mich wundert, wieso die anderen das letzte kombinierte bild so toll schwarz kriegen mit nur den kanten. Bei mir sehen die so aus:

http://mitglied.lycos.de/b534463/vertikal.jpg
http://mitglied.lycos.de/b534463/horizontal.jpg
http://mitglied.lycos.de/b534463/beide.jpg



Von hier hab ich das beispiel:
http://de.wikipedia.org/wiki/Sobel