¿Cómo se binariza una imagen en color?

14

Mi amigo tiene una imagen en color con letra china (básicamente al tomar una foto o escanear lo que escribió en un papel blanco), y le gustaría que la convierta en una imagen binaria en blanco y negro. ¿Hay aplicaciones en Ubuntu que puedan lograr eso?

Aquí hay una imagen de ejemplo:

ingrese la descripción de la imagen aquí

Tim
fuente

Respuestas:

27

Lo que desea se conoce como "umbral" en el procesamiento de imágenes. Básicamente, toma una imagen como entrada y genera una imagen que tiene todos los píxeles con un valor por debajo de un umbral determinado establecido en negro, y todos los píxeles cuyo valor está por encima del umbral establecido en blanco. Esto da como resultado una imagen en blanco y negro de una imagen de entrada arbitraria.

En general, primero desea convertir a escala de grises para obtener resultados más predecibles, pero también es posible establecer un umbral de una imagen a todo color.

Puede usar una herramienta gráfica como GIMP para hacer esto de forma interactiva (encontrará la herramienta a través del menú principal -> Colores -> Umbral), o puede usar ImageMagick de la siguiente manera:

convert colored.png -threshold 75% thres_colored.png

Ejecutar el comando anterior en la imagen de ejemplo produce el resultado que se muestra a continuación.

Versión en blanco y negro de la imagen de OP

Dado que el umbral suele ser algo así como un proceso de prueba y error para obtener un resultado con el que esté satisfecho, especialmente si la imagen de origen ya no está muy cerca de blanco y negro, recomiendo el enfoque GUI si es posible, pero si esa no es una opción por la razón que sea, también puede hacerlo a través de la línea de comando. Para un control más preciso de la salida, puede usar herramientas como curvas de color, niveles y contraste primero para aislar mejor las partes claras y oscuras de la imagen antes de establecer el umbral. (En realidad, el umbral puede verse como un caso extremo de uso de la herramienta de curvas de color).

un CVn
fuente
2
¡Gracias! Dado que una imagen en color tiene tres canales RBG, ¿a qué se aplica / puede aplicarse el umbral en general?
Tim
@Tim Probablemente depende del software, pero esperaría que el umbral (a menos que especifique por canal o para un canal específico, vea, por ejemplo, la -channelopción de conversión de ImageMagick ) se aplique a algún tipo de "valor" del píxel, que se calcula de todos los canales Esa es la razón por la que dije que es posible que primero desee convertir a escala de grises para obtener resultados más predecibles. (También vea mi edición.)
un CVn
¡Gracias! ¿Existe alguna documentación a la que se aplica el umbral en el comando que se muestra en su publicación?
Tim
@Tim No realmente. Esperaba que convertir tomara un porcentaje del valor máximo (que debería haber sido 256 por canal) o un valor específico, pero solo pude obtener un resultado útil al especificar un porcentaje. Cuando lo hace con una herramienta gráfica, que incluye GIMP, generalmente tendrá un histograma que muestra la distribución tonal de la imagen; eso será de gran ayuda para elegir el valor adecuado. Usar solo la línea de comando, a menos que tenga una razón específica para hacerlo, probablemente sea más problema de lo que realmente vale.
un CVn
2
Como nota al margen, existen otros métodos de umbral que no tienen que depender de un nivel de umbral codificado. Por ejemplo, ImageMagick incluye el -latque realiza un umbral adaptativo local, teniendo en cuenta los píxeles circundantes.
voithos
7

Puedes usar Imagemagick:

convert test.png -colorspace Gray gray_colorspace.png

A partir de aquí .

Esto es lo que obtuve después de aplicar a su imagen:

ingrese la descripción de la imagen aquí

mkc
fuente
10
"Binario" viene de "bi" que significa "dos", por lo que supongo que el OP quiere convertir la imagen a blanco y negro puro. La conversión a escala de grises produce mucho más de dos niveles.
un CVn
¡Convenido! tiene sentido, +1.
mkc
2

-monochrome de ImageMagick es una opción que utiliza un tramado inteligente y hace que la salida sea mucho más visible que-thresholdsi se destinara al consumo humano:

convert -monochrome signature.png out.png

ingrese la descripción de la imagen aquí

No hace mucha diferencia para una imagen tan simple, pero para las más grandes, es sorprendente.

Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
fuente
1

También puede hacerlo fácilmente con el netpbmkit de herramientas:

anytopnm inputfile | ppmtopgm | pgmtopbm > outputfile

ppmtopgmse convierte en una imagen en escala de grises, se pgmtopbmconvierte en una imagen en blanco y negro, y luego redirigimos la salida a un archivo. Estará en formato pbm; Si desea algo más común, tendrá que agregar un convertidor de salida (por ejemplo, pnmtopngo algo así)

Wouter Verhelst
fuente