👆 Haga clic en una celda de Entrada Original para oscurecer el píxel (−30) y haga clic con el botón derecho para aclarar (+30). Ajuste el umbral T para la binarización.
4.9.1 EP04_01 🎚️ Umbralización Global por Umbral Fijo
En los escáneres de documentos y en los sistemas de lectura de códigos de barras, la primera etapa del procesamiento siempre consiste en separar lo que es “objeto” (tinta, texto, barras) de lo que es “fondo” (papel, embalaje). La umbralización global hace exactamente esto: compara cada píxel con un único umbral \(T\) y decide, en tiempo real, si pertenece a la clase clara o a la clase oscura. Es el operador de segmentación más simple — y aun así, está detrás de buena parte de los pipelines industriales de inspección visual. Ver en Figura 4.30 una simulación de este EP.
4.9.1.1 📋 Directrices de Implementación
- Dimensiones: Leer los enteros \(L\) (filas) y \(C\) (columnas).
- Umbral: Leer el entero \(T\) (umbral de decisión).
- Datos: Leer los valores enteros de la matriz original fila a fila.
- Mapeo: Para cada píxel \(p\), calcular el nuevo valor mediante la ecuación:
\[ p' = \begin{cases} 255, & \text{si } p > T \\ 0, & \text{si } p \le T \end{cases} \] 5. Salida: Mostrar la matriz binarizada con dimensiones \(L \times C\).
4.9.1.2 📌 Restricciones Computacionales
- Binarización: La salida contiene solo los valores \(0\) o \(255\).
- Comparación estricta: El criterio usa \(> T\) (los píxeles iguales a \(T\) se convierten en fondo).
- Tipo: El resultado final debe ser entero.
- Observación: Este EP sigue la convención de OpenCV (
cv2.THRESL_BINARY): solo los píxeles con valor mayor que \(T\) se convierten en blancos (255); los píxeles con valor igual a \(T\) permanecen negros (0).
4.9.1.3 🧠 Fundamentación Teórica
| Parámetro | Tipo | Impacto Visual |
|---|---|---|
| \(T\) pequeño | Entero | La mayoría de los píxeles se vuelven blancos |
| \(T\) grande | Entero | La mayoría de los píxeles se vuelven negros |
| \(T\) bien elegido | Entero | Separa nítidamente objeto y fondo |
4.9.1.4 📦 Especificación de Entrada y Salida (VPL)
Entrada:
- Línea 1: Entero \(L\).
- Línea 2: Entero \(C\).
- Línea 3: Entero \(T\).
- Líneas siguientes: Elementos enteros de la matriz original.
Salida:
- Matriz binarizada en \(L\) filas y \(C\) columnas, valores \(0\) o \(255\) separados por espacio.
4.9.1.5 📌 Ejemplos
| Entrada | Salida | Observación |
|---|---|---|
| 2 4 100 0 99 100 180 255 30 120 80 |
0 0 0 255 255 0 255 0 |
\(T=100\): solo los píxeles con valor mayor que 100 se vuelven blancos; por eso, 99 y 100 se vuelven negros. |
| 1 3 0 0 50 255 |
0 255 255 | \(T=0\): solo los píxeles con valor estrictamente mayor que 0 se vuelven blancos. |
🎚️ Simulador EP04_01: Umbralización Global
p' = (p > T) ? 255 : 0
128
Entrada Original (Clicable)
Resultado Binarizado (p')
Fórmula aplicada: (p > 128) ? 255 : 0
%%writefile EP04_01.cpp
// your solutionOverwriting EP04_01.cpp
TestSuite("EP04_01.cpp").run()✔️ EP04_01.cases ya existe en casos/
📋 7 caso(s) cargado(s) de casos/EP04_01.cases
🔍 Probando C++: EP04_01.cpp
⚠️ EP04_01.cpp: archivo vacío (menos de 3 líneas). Pruebas omitidas.