Extender la línea

8

Tarea

Dada una imagen con una línea, produzca o muestre una imagen con la línea extendida hasta el borde de la imagen. La línea es negra y el fondo es blanco. El tamaño de la imagen es 100x100la imagen viene en cualquier formato razonable (por ejemplo jpg, png, ppm, bmp).

Formato de línea

Estoy usando una versión simplificada del algoritmo de línea de Bresenham para dibujar líneas. Las líneas solo tendrán una pendiente entera para que la línea nunca cubra parcialmente un píxel pero no lo coloree:

( Imagen de Wikipedia )

Como mínimo, la línea será de 3x3 a menos que la línea sea recta, en cuyo caso solo verá 3x1 o 1x3 en la imagen. Las líneas también tendrán un lado en el borde de la imagen, por lo que solo tendrá que extenderlo en una dirección.

Ejemplo (se .pngagregó una línea roja para que pueda verla):

ingrese la descripción de la imagen aquí ingrese la descripción de la imagen aquí

Ejemplos reales ( .png)

ingrese la descripción de la imagen aquí ingrese la descripción de la imagen aquí

====================

ingrese la descripción de la imagen aquí ingrese la descripción de la imagen aquí

====================

ingrese la descripción de la imagen aquí ingrese la descripción de la imagen aquí

====================

ingrese la descripción de la imagen aquí ingrese la descripción de la imagen aquí

====================

ingrese la descripción de la imagen aquí ingrese la descripción de la imagen aquí

J Atkin
fuente
¿El programa tiene que tomar la entrada de imagen como el nombre del archivo o sería admitido a la entrada en otras formas? (por ejemplo, hexdump, link, upload, copy / paste) Solo pregunto porque algunos lenguajes de programación requerirían el uso de otras formas de entrada.
DanTheMan
1
No conozco ningún idioma que no pueda leer un archivo de imagen. ¿Conoces un formato común que pueda incluir en la sección de E / S como válido?
J Atkin
@JAtkin, ¿podemos tomar la entrada como una URL?
Downgoat
Supongo ... ¿Por qué quieres hacerlo?
J Atkin

Respuestas:

2

Mathematica, 125 bytes

ImageRotate@Image@SparseArray[Array[Floor,101,#&@@ImageLines[ColorNegate@#,Method->"RANSAC"]]+1->0,{101,101},1][[;;-2,;;-2]]&

Explicación

ImageLinesdetectar líneas en la imagen con el método RANSAC. Tomamos la primera línea detectada y la convertimos de nuevo en una imagen. Toda la función toma una imagen como argumento y devuelve una imagen.

njpipeorgan
fuente