task FollowEdge(){
  if(!isDark()){
    panic("Not on an edge!");
    wait10Msec(1000);
    StopAllTasks();
  }
	followingEdge = true;
	edgeFollow(followingEdge);
}
/**
    Se aplica para determinar los bordes de la imagen.
    Primero se buscan los valores que esten por encima del thresholdHigh y
    si es asi se empieza a recorrer en busca de los siguientes puntos que esten por encima del thresholdDown.

*/
void EdgeDetector::hysteresis(int thresholdHigh, int thresholdsDown)
{
    for(int i = 0; i < height; i++){
        for(int j = 0; j < width ; j++){
            //QTextStream (stdout) << (edgeNonMaximumSuppression[i][j]/8)<<" \n";

            if((edgeNonMaximumSuppression[i][j])>=(double)thresholdHigh){//OJO AQUI CON LA DIVISION
                edgeFollow(i,j, thresholdsDown);
            }
        }
    }
    //0 es borde , 1 no es borde
}
/**
    Metodo que  sigue un borde. Toma el pixel actual que es mayor al threshold y se toma como un borde.
    Luego se mueve a la posicion siguiente (90° respecto angulo gradiente contra manecillas reloj).
    Determina si es mayor por lo menos al thresholdDown y si es asi llama recursivamente a la función.
    La función para si ya lo hemos visitado o no es mayor al thresholdDown.
*/
int EdgeDetector::edgeFollow(int posX, int posY, int thresholdsDown)
{
    if(edgeHysteresis[posX][posY]==1){//si no lo visite
        edgeHysteresis[posX][posY]=0;
        int degree = gradientDegreeDiscret[posX][posY];
        //cout << degree << endl;
        switch(degree){//mover al siguiente punto 90° respecto angulo gradiente contra manecillas reloj
        case 0:
            posY--;
            posX--;
            break;
        case 1:
            posX-=2;
            break;
        case 2:
            posY++;
            posX--;
            break;
        case 3:
            posY+=2;
            break;
        case 4:
            posY++;
            posY++;
            break;
        case 5:
            posX+=2;
            break;
        case 6:
            posX++;
            posY--;
            break;
        case 7:
            posY-=2;
            break;

        }
        //siguiente punto
                                                                     //OJO CON LA DIVISION
        if(!(posX<0 || posX>=height) && !(posY<0 || posY>=width) && ((edgeNonMaximumSuppression[posX][posY]) >= (double)thresholdsDown)){//puede interesarme
            if(edgeFollow(posX, posY,thresholdsDown)){
                edgeHysteresis[posX][posY]=0;
                return 1;
            }

        }
        return 1;//REVISAR el valor siguiente aun no se ha asignado
    }
    return 0;
}