¿Cómo puedo convertir una imagen en escala de grises (.png, .tif, .jpg, etc.) en una matriz xy de texto (ASCII) con un valor z para la intensidad de cada píxel? Idealmente, esta sería una herramienta de línea de comandos de Unix.

Puede hacer esto usando ImageJ , ya sea desde una línea de comandos o interactivamente a través de comandos de menú.

Interactivamente, simplemente arrastre la imagen en escala de grises al icono de ImageJ, o desde ImageJ, seleccione el menú, Archivo-> Abrir …, y seleccione la imagen desde el cuadro de diálogo estándar de abrir archivo, luego seleccione el menú, Archivo-> Guardar como- > Imagen de texto … , y nombra y coloca el archivo usando el cuadro de diálogo de guardar estándar.

Tiene muchas opciones para hacerlo desde la línea de comandos, como se encuentra aquí:

línea de comando imagej – Búsqueda de Google

La forma más fácil puede ser crear una macro con la función de grabación de macro ImageJ (menú Complementos-> Macros-> Grabar … ) para grabar la secuencia de comandos Guardar como imagen de texto anterior, luego guardar y especificar esa macro desde la línea de comandos.

ImageJ funcionará universalmente en Linux, Windows, MacOS e incluso en Android.

Bueno, debes leer la imagen de destino del archivo. Sugiero usar una biblioteca de imágenes existente para esto; tomaría bastante tiempo escribir el tuyo. Para PNG puedo recomendar LodePNG. Hacer esto para una multitud de tipos de archivos lo hace bastante más difícil. Considere escribir una herramienta que use un programa existente para convertir imágenes a (digamos) PNG.

Luego convierta los valores RGB a escala de grises. La forma más sencilla sería tomar la media de los tres; sin embargo, un promedio ponderado se verá mejor.

Luego salida a un archivo. Supongo que puede usar algún tipo de lenguaje de programación, esto debería ser fácil.

Alternativamente, lea sobre el formato Netpbm, que es esencialmente el tipo de archivo que describe, y probablemente existan programas que puedan hacer la conversión por usted en la línea de comandos. Me di cuenta de que quería hacer algo al revés (PPM a PNG) y no pude encontrar un programa apropiado para hacerlo, así que escribí uno durante un viaje en automóvil. Es divertido. Tenía la intención de ponerlo en GitHub, dejar un comentario si quieres que lo ponga allí.

En Linux solo instale jp2a

  sudo apt-get install jp2a

Y luego úsalo así

  jp2a myimage.jpg

EDITAR: Aunque esto solo funciona con jpg’s …