Para trabajar seriamente en visión por computadora hay que entender una idea central: una imagen digital no es una fotografía "mágica" para la máquina, sino una estructura numérica. Todo lo que hace un algoritmo visual, desde detectar bordes hasta clasificar una radiografía, ocurre porque la imagen está representada como datos que pueden almacenarse, leerse y transformarse matemáticamente.
En este tema estudiaremos cómo se representa una imagen en una computadora. Veremos qué es un píxel, qué significan las dimensiones, cómo se expresa el color, qué papel cumple la profundidad de bits y por qué las imágenes pueden pensarse como matrices.
Esta base es imprescindible porque los próximos temas se apoyarán directamente sobre estos conceptos al trabajar con OpenCV, NumPy y PyTorch.
Una escena del mundo real es continua: la luz cambia de forma suave en el espacio, los objetos tienen bordes físicos y el color puede variar de manera muy fina. Sin embargo, una computadora no almacena esa continuidad. Lo que hace es convertir la escena en una representación discreta.
Esa conversión implica dos procesos fundamentales:
El resultado es una rejilla de valores. Cada valor representa la información visual de una pequeña región de la escena original.
La unidad básica de una imagen digital es el píxel. La palabra proviene de picture element, es decir, elemento de imagen. Un píxel representa la información visual asociada a una posición concreta dentro de la imagen.
Es importante no pensar el píxel como un cuadradito físico del mundo real, sino como una unidad de información dentro de la representación digital. En imágenes en escala de grises, cada píxel guarda un nivel de intensidad. En imágenes en color, cada píxel guarda varios valores, normalmente uno por canal.
Si observamos una imagen muy ampliada, empezamos a ver la rejilla de píxeles. Eso muestra que la imagen digital tiene resolución finita y que su detalle depende de cuántos píxeles la componen.
Las imágenes digitales tienen dos dimensiones espaciales principales:
Por ejemplo, una imagen de 1920 x 1080 tiene 1920 columnas y 1080 filas. Eso significa que contiene:
1920 x 1080 = 2.073.600 píxeles.
Esta cantidad total de píxeles influye directamente en el nivel de detalle, el peso del archivo en memoria y el costo computacional de procesar la imagen.
La resolución espacial describe cuántos píxeles se utilizan para representar la imagen. En términos generales, a mayor resolución, mayor capacidad para capturar detalles finos.
Sin embargo, conviene distinguir dos ideas relacionadas pero no idénticas:
Una misma imagen de 1000 x 1000 píxeles puede verse pequeña o grande según dónde se muestre. Su resolución digital no cambia, aunque sí cambie su tamaño visual.
Para trabajar con imágenes, cada píxel debe poder ubicarse mediante coordenadas. Lo habitual en programación es usar:
En muchas bibliotecas, el origen se ubica en la esquina superior izquierda. Esto significa:
Por ejemplo, el píxel (0, 0) está arriba a la izquierda. El píxel (10, 20) indica fila 10, columna 20.
Esta convención es muy importante porque más adelante trabajaremos con recortes, transformaciones y acceso directo a regiones de la imagen.
Una imagen en escala de grises representa la información visual usando un solo valor por píxel. Ese valor indica intensidad luminosa, normalmente desde negro hasta blanco pasando por niveles intermedios de gris.
En el caso más común, cada píxel usa 8 bits, lo que permite 256 valores posibles:
0 representa negro.255 representa blanco.Este tipo de imagen es muy importante porque muchas tareas visuales no necesitan color para empezar, y trabajar con un solo canal simplifica el procesamiento.
Las imágenes en color suelen representarse mediante varios canales. El esquema más conocido es RGB, donde cada píxel tiene tres componentes:
Si cada canal usa 8 bits, entonces cada componente puede tomar valores entre 0 y 255. La combinación de esos tres canales permite representar una gran variedad de colores.
Por ejemplo:
(255, 0, 0) representa rojo intenso.(0, 255, 0) representa verde intenso.(0, 0, 255) representa azul intenso.(255, 255, 255) representa blanco.(0, 0, 0) representa negro.Más adelante veremos que existen otros espacios de color, pero RGB es el punto de partida más intuitivo.
Un canal puede entenderse como una capa numérica que almacena una parte de la información visual. En una imagen RGB, hay tres matrices superpuestas, una por canal.
Si la imagen tiene tamaño alto x ancho, entonces:
alto x ancho.alto x ancho x 3.Este detalle será muy importante cuando usemos bibliotecas de Python, porque la forma o shape del arreglo nos dirá exactamente cómo está organizada la imagen en memoria.
La profundidad de bits indica cuántos bits se usan para representar el valor de cada píxel o de cada canal. Cuantos más bits haya disponibles, mayor será la cantidad de valores posibles.
| Bits | Valores posibles | Ejemplo |
|---|---|---|
| 1 bit | 2 valores | Blanco y negro puro. |
| 8 bits | 256 valores | Escala de grises común o un canal RGB. |
| 16 bits | 65.536 valores | Imágenes médicas o científicas de mayor precisión. |
| 32 bits | Muy alta precisión | Procesamiento flotante o imágenes HDR. |
En visión por computadora básica, el caso más común es trabajar con 8 bits por canal. Pero en algunos dominios especializados, como medicina o teledetección, es frecuente usar más precisión.
La cuantización es el proceso por el cual se asignan valores discretos a una señal continua. En imágenes, esto significa que la intensidad o el color no se guardan con infinitos matices, sino con una cantidad limitada de niveles.
Cuanta menor sea la profundidad de bits:
Por eso existe una relación directa entre calidad visual, capacidad de representación y costo de almacenamiento.
Desde el punto de vista computacional, una imagen puede tratarse como una matriz o arreglo numérico. Esto es una idea central porque permite aplicar operaciones matemáticas y algoritmos de forma sistemática.
Por ejemplo, una imagen en escala de grises de 3 filas por 4 columnas podría representarse así:
[
[ 12, 18, 25, 30],
[ 40, 55, 63, 70],
[ 80, 90, 110, 255]
]
Cada número corresponde a la intensidad de un píxel. Si la imagen fuera RGB, cada posición almacenaría tres valores en lugar de uno.
Esta representación matricial explica por qué NumPy es tan importante en visión por computadora: permite manipular imágenes como arreglos numéricos de forma eficiente.
Cuando trabajamos en Python, es habitual inspeccionar la forma de una imagen mediante su shape. Esa forma describe cuántas dimensiones tiene el arreglo y cuántos elementos hay en cada una.
Ejemplos comunes:
(480, 640) para una imagen en grises.(480, 640, 3) para una imagen RGB.(480, 640, 4) para una imagen con canal alfa adicional.Comprender este punto evita errores muy frecuentes al intentar mostrar, recortar, transformar o alimentar imágenes a un modelo.
El tamaño de una imagen en memoria depende de:
Por ejemplo, una imagen RGB de 1920 x 1080 con 8 bits por canal ocupa aproximadamente:
1920 x 1080 x 3 = 6.220.800 bytes, es decir, alrededor de 6 MB sin compresión.
Esto muestra por qué trabajar con video o con grandes datasets de imágenes puede demandar mucha memoria y almacenamiento.
Una cosa es la representación interna de una imagen en memoria y otra es el formato con el que se guarda en disco. Los formatos de archivo definen cómo se almacena y, en muchos casos, cómo se comprime la información.
Algunos formatos frecuentes son:
En visión por computadora importa conocer esto porque la compresión puede introducir artefactos que afecten el análisis visual.
No todos los formatos guardan la imagen de la misma manera. Algunos preservan exactamente los datos originales, mientras que otros sacrifican parte de la información para reducir tamaño.
Esto tiene consecuencias prácticas. Si una tarea requiere análisis fino de textura, bordes o intensidades, una compresión agresiva puede perjudicar el rendimiento del sistema.
Todas las operaciones de visión por computadora dependen de cómo está representada la imagen. Si modificamos los valores de la matriz, cambia la imagen. Si filtramos una región, estamos operando sobre subconjuntos de píxeles. Si entrenamos una CNN, en realidad alimentamos tensores formados por esos mismos valores numéricos.
Por eso conceptos como intensidad, canal, forma, tipo de dato y resolución no son detalles secundarios. Son la base misma sobre la que trabaja cualquier algoritmo visual.
Además de los valores visuales, importa el tipo de dato con el que esos valores se almacenan. Algunos tipos frecuentes son:
uint8: enteros sin signo de 8 bits, muy común en imágenes estándar.uint16: enteros sin signo de 16 bits.float32: números flotantes, muy usados en procesamiento y Deep Learning.Este punto es importante porque ciertas operaciones pueden producir resultados distintos según el tipo de dato. Por ejemplo, una división o normalización suele requerir conversión a flotante.
En muchos flujos de trabajo, especialmente en Deep Learning, no se utilizan los valores originales de 0 a 255. En cambio, se normalizan a escalas más convenientes, como:
0.0 a 1.0.-1.0 a 1.0.La normalización no cambia la estructura espacial de la imagen, pero sí modifica la escala numérica con la que se trabaja. Esto puede facilitar entrenamiento, estabilidad y comparación entre imágenes.
Algunas imágenes incluyen un canal adicional llamado alfa. Este canal representa transparencia u opacidad. En ese caso, la imagen puede tener cuatro componentes por píxel en lugar de tres.
Por ejemplo:
R, G, B y A.Aunque en visión por computadora tradicional muchas veces se ignora este canal, en ciertos contextos gráficos o de composición visual puede ser relevante.
Conviene no confundir la imagen como dato con la imagen como elemento visual mostrado en pantalla. La representación digital es una estructura numérica. Lo que vemos en el monitor es una interpretación de esa estructura a través del hardware y del software de visualización.
Esto implica que:
En visión por computadora nos interesa principalmente la representación numérica, no la percepción subjetiva del display.
Imaginemos una imagen RGB de 100 x 200 píxeles.
Su forma sería:
(100, 200, 3)
La cantidad total de valores numéricos almacenados sería:
100 x 200 x 3 = 60.000
Esto ayuda a ver con claridad que una imagen digital no es otra cosa que una colección organizada de números con estructura espacial.
Cuando se empieza a trabajar con imágenes, suelen aparecer confusiones frecuentes:
uint8.Evitar estos errores desde el principio simplifica muchísimo el trabajo posterior.
La representación digital de imágenes es una base conceptual decisiva para todo lo que sigue en visión por computadora. Si comprendemos que una imagen es una estructura numérica organizada espacialmente, resulta mucho más fácil entender filtros, transformaciones, histogramas, convoluciones y modelos de Deep Learning.
En otras palabras, antes de enseñar a una máquina a reconocer objetos o interpretar escenas, primero debemos entender cómo está almacenada la información visual con la que va a trabajar.
En el próximo tema estudiaremos los canales de color y los espacios de color, ampliando la forma en que las imágenes representan no solo intensidad, sino también información cromática.