4.11. Debayering

El fotograma Bayer en bruto solo transporta un canal de color por píxel. Convertirlo en una imagen RGB normal de tres canales implica rellenar los dos canales que faltan en cada píxel interpolando a partir de los píxeles cercanos del color adecuado. Esa interpolación es el debayering (también llamado demosaicing). Predomina un puñado de familias de algoritmos.

4.11.1. Superpíxel

El método más económico colapsa cada baldosa Bayer de 2x2 – una celda roja, una celda azul y dos celdas verdes – en un único píxel de salida:

  • el canal rojo es el valor de la celda roja;

  • el canal azul es el valor de la celda azul;

  • el canal verde es el promedio de las dos celdas verdes.

Cada baldosa de entrada de 2x2 se convierte en un píxel de salida, por lo que la imagen final tiene la mitad del ancho y la mitad del alto del sensor, con una cuarta parte del número de píxeles. El superpíxel es rápido y carece de artefactos de interpolación, pero el coste en resolución lo convierte en un último recurso – rara vez se utiliza.

4.11.2. Bilineal

La interpolación bilineal promedia los píxeles más cercanos del color adecuado en lugar de copiarlos o resumirlos. El promedio exacto depende de qué color registra el píxel central, ya que los cuatro casos distribuyen de forma distinta los canales que faltan por el vecindario de 3x3.

Píxel verde en una fila rojo-verde. El valor de rojo que falta promedia los dos vecinos rojos a la izquierda y a la derecha; el azul que falta promedia los dos vecinos azules de arriba y de abajo.

Un vecindario con patrón Bayer de 3 columnas por 3 filas centrado en un píxel verde de una fila rojo-verde. Las celdas a la izquierda y a la derecha del centro son rojas; las celdas de arriba y de abajo son azules; las celdas de las esquinas son verdes. Flechas blancas apuntan hacia dentro desde las dos celdas rojas y las dos celdas azules hacia el centro.

El rojo que falta proviene de los vecinos rojos horizontales; el azul que falta, de los vecinos azules verticales.

Píxel verde en una fila verde-azul. La misma forma con el rojo y el azul intercambiados. El valor de rojo que falta promedia los dos vecinos rojos de arriba y de abajo; el azul que falta promedia los dos vecinos azules a la izquierda y a la derecha.

Un vecindario con patrón Bayer de 3 columnas por 3 filas centrado en un píxel verde de una fila verde-azul. Las celdas de arriba y de abajo del centro son rojas; las celdas a la izquierda y a la derecha son azules; las celdas de las esquinas son verdes. Flechas blancas apuntan hacia dentro desde las dos celdas rojas y las dos celdas azules hacia el centro.

El rojo que falta proviene de los vecinos rojos verticales; el azul que falta, de los vecinos azules horizontales.

Píxel rojo. El valor de verde que falta promedia los cuatro vecinos verdes cardinales (arriba, abajo, izquierda, derecha). El azul que falta promedia los cuatro vecinos azules diagonales.

Un vecindario con patrón Bayer de 3 columnas por 3 filas centrado en un píxel rojo. Los cuatro vecinos cardinales (arriba, abajo, izquierda, derecha) son verdes; las cuatro celdas diagonales de las esquinas son azules. Flechas blancas apuntan hacia dentro desde los ocho vecinos hacia el centro.

El verde que falta proviene de los cuatro vecinos verdes cardinales; el azul que falta, de los cuatro vecinos azules diagonales.

Píxel azul. Reflejo del caso del rojo. El verde que falta promedia los cuatro vecinos verdes cardinales, y el rojo que falta promedia los cuatro vecinos rojos diagonales.

Un vecindario con patrón Bayer de 3 columnas por 3 filas centrado en un píxel azul. Los cuatro vecinos cardinales son verdes; las cuatro celdas diagonales de las esquinas son rojas. Flechas blancas apuntan hacia dentro desde los ocho vecinos hacia el centro.

El verde que falta proviene de los cuatro vecinos verdes cardinales; el rojo que falta, de los cuatro vecinos rojos diagonales.

El método bilineal conserva la resolución completa del sensor y es lo bastante suave para la mayoría de los usos, pero aún muestra artefactos en los bordes. Una transición brusca entre dos colores cruza la cuadrícula de píxeles con una orientación determinada, y promediar a través del borde lo suaviza ligeramente. Allí donde los bordes de color y de luminancia no coinciden exactamente, aparecen tenues franjas de color en la salida.

4.11.3. Más allá del bilineal

Existe una variedad de algoritmos de debayering mejores. Algunos emplean vecindarios más grandes que la pequeña cruz de vecinos del mismo color del bilineal y ponderan las muestras con coeficientes elegidos con más cuidado; otros detectan la dirección de los bordes locales y sesgan la interpolación a lo largo de esa dirección, de modo que un borde que atraviesa la cuadrícula de píxeles se mantenga nítido en lugar de suavizarse. Cualquiera de los dos enfoques reduce las franjas de color y el suavizado de bordes que deja el bilineal, a costa de más aritmética por píxel y más silicio (o más cómputo en el lado del MCU).

La calidad del debayering disponible en cualquier OpenMV Cam dada es específica de la plataforma – depende de lo que ofrezcan el sensor y el MCU de esa cámara.

4.11.4. Dónde se ejecuta el debayering

El procesador de señal de imagen (ISP) – ya sea en el propio chip del sensor o en el lado del MCU – realiza el debayering de cada fotograma antes de que abandone la canalización de imagen en la mayoría de los casos. El código de usuario recibe una imagen RGB de tres canales ya terminada sin llegar a tocar nunca el mosaico en bruto.

También se le puede indicar al ISP que deje pasar el fotograma Bayer en bruto sin cambios. El Bayer en bruto ocupa menos memoria que la imagen procesada – un byte por píxel frente a tres – lo que lo hace útil cuando el almacenamiento de fotogramas es el cuello de botella, cuando se captura para procesamiento sin conexión, o cuando el proyecto quiere aplicar un algoritmo de debayering personalizado por software.