Hola todos, hago una actualizacion de esto, he hecho un "parentesis" por que me puse a ver como podria detectar un punto saliente que este entre 2 puntos salientes, siguiendo con la idea que me dio NEBIRE he trazado lineas entre los 2 puntos y ¿como iba a hacer para que el programa detecte el punto saliente del medio?.
Se me ocurrieron 2 formas. La primer manera:
En cualquiera de la dos ideas se tiene un recorrido/ruta que no es mas que los pixeles de una linea, ese recorrido sera lo que indique la direccion del "scanner" que tampoco es mas que una linea donde entre sus puntos en algun momento estara el pixel saliente del medio, en la idea uno el recorrido se marca con una linea amarilla y el escaner con una linea roja, los puntos salientes con azul y con verde el centroide que es el centro de la figura por ultimo de color negro dibujo la linea que une un punto con el otro:

Donde la linea amarilla es el recorrido del scanner, que es la linea roja y este scanner se va moviendo hacia uno de los puntos de la linea.
Para hacer esto superficialmente lo que se hace es:
Calcular angulo de la linea que va desde el punto de salida hasta el punto de llegada, en este caso (foto) el punto de salida es el de abajo, entonces metemos ese punto en un eje cartesiano y calculamos el angulo con el otro punto, esto se hace con trigonometria
Para eso hay que detectar el cuadrante del vector y sumar los angulos del cuadrante anterior: En la imagen al angulo de color celeste se le suman 0 grados, al de marron se le suman 90 grados, y asi con los demas angulos...

Una vez con ese angulo se hace la linea que une esos dos puntos tambien con trigonometria. Despues de esto tenemos una line hecho desde un punto hasta otro punto. (los dos mas salientes),
Lo siguiente es calcular el angulo entre el punto centroide y el punto de salida de la linea, esto se hace de la misma forma:

Con este angulo se puede trazar la lines de recorrido: (linea amarilla) de ahi sale la linea amarilla de la imagen de arriba.

Una vez hecho eso solamente queda comprobar, para comprobar hay que meter en un array cada punto de la linea amarilla (solo la linea amarilla), e ir recorriendo cada punto uno a uno desde el ultimo hasta el primero (se recorre al revez por que se quiere detectar desde afuera hacia adentro) y por cada punto de esos hara una nueva linea, la linea scanner, para hacer la linea usara el angulo de la linea negra:

Forma 2:
Es lo mismo que antes pero cambia en que en ves de calcular la linea de recorrido con un angulo igual al angulo entre centroide y punto de salida lo que hace es calcularla a noventa grados del angulo de la linea, se obtendria esto:

para obtener la linea que es perpendicular se puede sumar o restar 90 grados al angulo de la linea el problema es que a veces habra que sumar y otras veces habra que restar
entonces para saber eso tengo que tener en cuenta que para trazar una una ruta de trayecto/recorrido para el scanner tengo que alejarme del punto centroide y para poder alejarme se tiene primero que: calcular angulo entre punto saliente y centroide, luego sumar 90 grados al angulo (que ya existe calculado antes, arriba) de la linea que se habia llamado "alpha" y obtengo una de las 2 rectas de noventa grados para tener la otra tengo que restar 90 grados al mismo angulo que antes le habia sumado, ¿cual recta elijo?. Para responder esa pregunta hace falta saber la diferencia entre los 3 angulos que se tienen que son marron,violeta,verde:

negro = es el angulo de la linea
marron = es el angulo de la linea + 90 grados.
violeta = es el angulo de la linea -90 grados.
verde = es el angulo entre el punto saliente y el centroide
y ahora hacemos las diferencias:
marron - verde = diferencia entre el angulos+90 y el angulo con centroide
violeta - verde = diferencia entre el angulo-90 y el angulo con centroide
de los dos angulos que me importan (angulo+90 y angulo-90) voy a tomar el que me de mayor diferencia con el angulo centroide por que eso quiere decir que en ese angulo me voy alejar del punto centroide la diferencia seria esta:

la diferencia es bastante en este caso, lo que sigue es igual, se traza la linea amarilla a 90 grados, se recorre esa linea desde fuera hacia dentro y en cada pixel de la linea amarilla trazara nuevas lineas (linea roja, scanner) con el angulo de la linea negra.
Aqui dejo un codigo que ilustra esto:
El codigo es una animacion que muestra los dos tipos de deteccion, si se fijan en la clase Principal hay varias opciones de configuracion, si ponen el valor de la propiedad "tipoDeDeteccion" = 1 veran la forma 1 que explique antes y si ponen "tipoDeDeteccion" = 2 veran la segunda forma, ademas hay una imagen de salida que se guarda en "D:/salidaDiagonales.png" por si quieren ver, la linea de recorrido del scanner se traza en verde, no en amarillo, por ultimo pueden cambiar el punto por defecto por uno que ustedes quieran, y esto me lleva a mencionar algunos errores que pueden pasar...
si ponen tipo de deteccion = 1 y ponen 2 puntos que esten a 45 grados ej: (10,10);(20,20) veran como la deteccion no hace su trabajo como debe ser.
Si ponen tipo de deteccion = 2 hay angulos entre puntos que hara que el programa no sepa que elegir, por ejemplo el punto (10,10);(10,10) al poner ese punto en el momento de elegir el recorrido del scanner hara la diferencia y ambas diferencias son iguales entonces el programa no sabe que elegir...
Espero no haberme olvidado de algo, ya estare viendo si puedo icluir esto en la deteccion de las imagenes de arriba. Saludos.
Subido a googleDrive
Link:
https://drive.google.com/open?id=0B1i-JNEuRD1zOEdoX0Z0NHFpNlU