¿Te resulta más fácil leer con fondo crema, un tono de color, más contraste o un texto más grande? Elige tus colores y tu texto una sola vez, para todas las páginas.

Lección gratuita

Cómo separar objetos del fondo con un umbral

Después de esta lección: Puedo elegir un umbral que separe los objetos del fondo.

Lección de 60 min2 comandosLaboratorio de visión por computador: píxeles, umbrales y recuento de objetos en JupyterLab

Un umbral decide qué píxel es objeto

Un umbral es un nivel de gris que separa los píxeles claros de los oscuros, y con él un programa separa los objetos del fondo. Es la forma más sencilla de decirle a un ordenador dónde está una moneda en una foto.

Hoy miras cuántos píxeles hay de cada gris y eliges el umbral con esa vista.

Al final de esta lección

Nota

Puedo elegir un umbral que separe los objetos del fondo.

Palabras clave

PalabraQué significaEjemplo
Histogramacuántos píxeles hay en cada tramo de gris
Bandaun tramo de niveles de gris0 a 63
Umbralel nivel que separa claro de oscuro100
Máscaraimagen de unos y ceros: 1 es objeto
Fondolo que rodea a los objetos

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Un histograma cuenta píxeles por tramo de gris

Un histograma reparte los píxeles en bandas de gris y cuenta cuántos caen en cada una. Si una banda se llena y otra está vacía, hay dos grupos en la imagen.

En la imagen de monedas, el fondo es oscuro y las monedas son claras. Entre los dos grupos queda un hueco, y el umbral va dentro de ese hueco.

Ejemplo resuelto: el histograma de las monedas

Banda de grisPíxelesQué hay ahí
0 a 6363.231El fondo
64 a 1270El hueco: aquí va el umbral
128 a 19113.566Las monedas
192 a 2553Puntos de brillo

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

En qué banda cae un gris

Comando
docker exec jupyter python3 -c "print(158 // 64, 35 // 64)"

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

La división entera da la banda

Dividir un gris entre el ancho de la banda y descartar los decimales da el número de banda. El Ejecutar imprime 2 0.

Un gris de 158, el de una moneda, cae en la banda 2, la de 128 a 191. Un gris de 35, el del fondo, cae en la banda 0.

Un umbral convierte la imagen en máscara

Un umbral hace una pregunta a cada píxel: ¿eres más claro que este nivel? Si la respuesta es sí, el píxel vale 1. Si es no, vale 0.

El resultado es una máscara: una imagen de unos y ceros donde el 1 marca el objeto. Se usa > y no >=, así que un píxel igual al umbral queda fuera.

Una máscara con un umbral

Código: python
# Un umbral convierte cada píxel en un sí o un no.
picture = [
    [12, 30, 190, 200],
    [15, 25, 210, 40],
    [10, 20, 35, 220],
]
level = 100
mask = []
for row in picture:
    new_row = []
    for value in row:
        if value > level:
            new_row.append(1)
        else:
            new_row.append(0)
    mask.append(new_row)
print(mask)
# Cambia level a 30. ¿Qué pasa con el fondo?

Qué cuenta el script del umbral

El script threshold.py prueba tres umbrales sobre coins.png, que tiene 76.800 píxeles. Imprime en inglés: threshold es el umbral y keeps es cuántos píxeles deja.

El umbral 30 deja 58.806, casi toda la imagen. El 100 deja 13.569, que son las monedas. El 160 deja 10.062 y corta parte de cada moneda.

Prueba tres umbrales en las monedas

Comando
docker exec jupyter python3 steps/threshold.py

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Ejemplo resuelto: tres umbrales

UmbralPíxeles que dejaQué pasa
3058.806Deja casi todo el fondo: el ruido pasa de 30
10013.569Deja solo las monedas
16010.062Corta las monedas: su gris ronda 158

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Un error muy común

Advertencia

Mucha gente cree que el ordenador elige solo el umbral correcto. No lo hace: el 100 funciona porque miraste el hueco del histograma. Con luz desigual, un solo umbral puede servir a un lado de la imagen y fallar en el otro. Mira siempre la máscara antes de fiarte.

Para ir más lejos: una página escaneada

Abre scan.png en JupyterLab. Tiene la luz desigual: más clara a la izquierda y más oscura a la derecha.

Prueba un solo umbral sobre toda la imagen y mira dónde falla. Después prueba otro umbral solo en la mitad derecha.

Sobre este laboratorio y su código: Laboratorio de visión por computador: píxeles, umbrales y recuento de objetos en JupyterLab

¿Enseñas a una clase? Asigna este módulo a tus alumnos con guía del profesor, tareas con corrección automática y un laboratorio para cada alumno.