Su tarea es escribir un programa que tome una imagen de entrada y ejecutarla a través de detección de bordes para convertirse en una imagen de salida.
La detección de bordes funciona de la siguiente manera (si no está claro, ver detección de bordes sobel ):
- El valor de un píxel es el brillo total de un píxel, por lo que si está en color, primero deberá convertirlo a escala de grises (para mantener las cosas simples y aptas para el golf, puede tomar el valor promedio para R, G y SI).
- Las fórmulas para G x y G y para el píxel p (i, j) son:
- G x = -1 * p (i-1, j-1) - 2 * p (i-1, j) - 1 * p (i-1, j + 1) + 1 * p (i + 1, j -1) + 2 * p (i + 1, j) + 1 * p (i + 1, j + 1)
- G y = -1 * p (i-1, j-1) - 2 * p (i, j-1) - 1 * p (i + 1, j-1) + 1 * p (i-1, j +1) + 2 * p (i, j + 1) + 1 * p (i + 1, j + 1)
- El valor para el tamaño del borde en ese píxel es entonces: √ (G x 2 + G y 2 )
La imagen de salida es para cada píxel del tamaño del borde √ (G x 2 + G y 2 ) como escala de grises.
Bonificaciones:
- Realice un desenfoque gaussiano para suavizar la imagen antes de que se active la detección de bordes, para omitir los bordes más pequeños. Esto le da un bono de -30% en el resultado final.
- Tome el ángulo del borde en cuenta. Le da un poco de color al píxel de salida, tomando el mismo valor de escala de grises y agregando color de una rueda de colores usando el ángulo obtenido de la fórmula arctan (G y / G x ). Esto le da otra bonificación de -30% en el resultado final.
Reglas:
- Puede omitir el valor de los píxeles de borde y establecerlos en negro, o puede usar 0 para cualquier píxel fuera de la imagen.
- Su imagen de salida debe estar en un formato de imagen que se pueda abrir en la mayoría de las computadoras.
- La salida debe escribirse en el disco o ser canalizable a un archivo.
- La entrada se proporciona como un argumento de línea de comandos, en forma de una ruta relativa a la imagen, o se canaliza desde la línea de comandos.
- Este es el código de golf, por lo que gana el código más corto en bytes.