4.11. Dématriçage (debayering)

La trame Bayer brute ne transporte qu’un seul canal de couleur par pixel. La convertir en une image RGB normale à trois canaux consiste à reconstituer les deux canaux manquants pour chaque pixel en interpolant à partir des pixels voisins de la bonne couleur. Cette interpolation est le dématriçage (aussi appelé démosaïquage). Quelques familles d’algorithmes dominent.

4.11.1. Super-pixel

L’approche la plus économique réduit chaque tuile Bayer de 2x2 – une cellule rouge, une cellule bleue et deux cellules vertes – en un seul pixel de sortie :

  • le canal rouge correspond à la valeur de la cellule rouge ;

  • le canal bleu correspond à la valeur de la cellule bleue ;

  • le canal vert est la moyenne des deux cellules vertes.

Chaque tuile d’entrée de 2x2 devient un pixel de sortie, si bien que l’image finale fait la moitié de la largeur et la moitié de la hauteur du capteur, avec un quart du nombre de pixels. Le super-pixel est rapide et exempt d’artefacts d’interpolation, mais le coût en résolution en fait une solution de dernier recours – il est rarement utilisé.

4.11.2. Bilinéaire

L’interpolation bilinéaire effectue la moyenne des pixels les plus proches de la bonne couleur plutôt que de les copier ou de les synthétiser. La moyenne exacte dépend de la couleur enregistrée par le pixel central, car les quatre cas répartissent différemment les canaux manquants autour du voisinage de 3x3.

Pixel vert dans une ligne rouge-vert. La valeur rouge manquante est la moyenne des deux voisins rouges à gauche et à droite ; le bleu manquant est la moyenne des deux voisins bleus au-dessus et en dessous.

Un voisinage en motif Bayer de 3 colonnes par 3 lignes centré sur un pixel vert dans une ligne rouge-vert. Les cellules à gauche et à droite du centre sont rouges ; les cellules au-dessus et en dessous sont bleues ; les cellules d'angle sont vertes. Des flèches blanches pointent vers l'intérieur depuis les deux cellules rouges et les deux cellules bleues vers le centre.

Le rouge manquant provient des voisins rouges horizontaux ; le bleu manquant des voisins bleus verticaux.

Pixel vert dans une ligne vert-bleu. Même configuration avec le rouge et le bleu inversés. La valeur rouge manquante est la moyenne des deux voisins rouges au-dessus et en dessous ; le bleu manquant est la moyenne des deux voisins bleus à gauche et à droite.

Un voisinage en motif Bayer de 3 colonnes par 3 lignes centré sur un pixel vert dans une ligne vert-bleu. Les cellules au-dessus et en dessous du centre sont rouges ; les cellules à gauche et à droite sont bleues ; les cellules d'angle sont vertes. Des flèches blanches pointent vers l'intérieur depuis les deux cellules rouges et les deux cellules bleues vers le centre.

Le rouge manquant provient des voisins rouges verticaux ; le bleu manquant des voisins bleus horizontaux.

Pixel rouge. La valeur verte manquante est la moyenne des quatre voisins verts cardinaux (au-dessus, en dessous, à gauche, à droite). Le bleu manquant est la moyenne des quatre voisins bleus diagonaux.

Un voisinage en motif Bayer de 3 colonnes par 3 lignes centré sur un pixel rouge. Les quatre voisins cardinaux (au-dessus, en dessous, à gauche, à droite) sont verts ; les quatre cellules d'angle diagonales sont bleues. Des flèches blanches pointent vers l'intérieur depuis les huit voisins vers le centre.

Le vert manquant provient des quatre voisins verts cardinaux ; le bleu manquant des quatre voisins bleus diagonaux.

Pixel bleu. Symétrique du cas rouge. Le vert manquant est la moyenne des quatre voisins verts cardinaux, et le rouge manquant est la moyenne des quatre voisins rouges diagonaux.

Un voisinage en motif Bayer de 3 colonnes par 3 lignes centré sur un pixel bleu. Les quatre voisins cardinaux sont verts ; les quatre cellules d'angle diagonales sont rouges. Des flèches blanches pointent vers l'intérieur depuis les huit voisins vers le centre.

Le vert manquant provient des quatre voisins verts cardinaux ; le rouge manquant des quatre voisins rouges diagonaux.

L’interpolation bilinéaire conserve la résolution complète du capteur et est suffisamment lisse pour la plupart des usages, mais elle laisse tout de même apparaître des artefacts sur les contours. Une transition nette entre deux couleurs traverse la grille de pixels selon une orientation donnée, et la moyenne effectuée à travers le contour l’adoucit légèrement. Là où les contours de couleur et de luminance ne coïncident pas exactement, de légères franges colorées apparaissent dans la sortie.

4.11.3. Au-delà du bilinéaire

Il existe toute une gamme d’algorithmes de dématriçage plus performants. Certains utilisent des voisinages plus grands que la petite croix de voisins de même couleur du bilinéaire et pondèrent les échantillons avec des coefficients choisis plus soigneusement ; d’autres détectent la direction des contours locaux et orientent l’interpolation le long de cette direction afin qu’un contour traversant la grille de pixels reste net au lieu de s’adoucir. Ces deux approches réduisent les franges colorées et l’adoucissement des contours que laisse le bilinéaire, au prix de davantage de calculs par pixel et de plus de silicium (ou de plus de puissance de calcul côté MCU).

La qualité de dématriçage disponible sur une OpenMV Cam donnée dépend de la plateforme – elle dépend de ce qu’offrent le capteur et le MCU de cette caméra.

4.11.4. Où s’exécute le dématriçage

Le processeur de signal d’image (ISP) – sur la puce du capteur elle-même ou côté MCU – effectue le dématriçage de chaque trame avant qu’elle ne quitte le pipeline d’imagerie dans la plupart des cas. Le code utilisateur reçoit une image RGB finie à trois canaux sans jamais toucher à la mosaïque brute.

On peut aussi demander à l’ISP de laisser passer la trame Bayer brute sans modification. Le Bayer brut occupe moins de mémoire que l’image dématricée – un octet par pixel contre trois – ce qui le rend utile lorsque le stockage des trames est le facteur limitant, lors de captures destinées à un traitement hors ligne, ou lorsque le projet souhaite appliquer un algorithme de dématriçage personnalisé en logiciel.